From adcee4f15efd9bfe58fcfd2e8aad2b2fc1d0b771 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Wed, 30 Jun 2021 16:34:22 -0500 Subject: [PATCH 01/23] Rollback https stats server due to issues with self signed cert. --- API/Services/Clients/StatsApiClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API/Services/Clients/StatsApiClient.cs b/API/Services/Clients/StatsApiClient.cs index d56f53707..e07bec222 100644 --- a/API/Services/Clients/StatsApiClient.cs +++ b/API/Services/Clients/StatsApiClient.cs @@ -16,7 +16,7 @@ namespace API.Services.Clients private readonly HttpClient _client; private readonly StatsOptions _options; private readonly ILogger _logger; - private const string ApiUrl = "https://stats.kavitareader.com"; + private const string ApiUrl = "http://stats.kavitareader.com"; public StatsApiClient(HttpClient client, IOptions options, ILogger logger) { From 98272216ca8f2eb4a002d0e9c1643e11672130d0 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Wed, 30 Jun 2021 21:00:56 -0500 Subject: [PATCH 02/23] Update FUNDING.yml Removed paypal from funding link. All donations should go through OpenCollective. --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 8bca3c1ef..609276908 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username -custom: ["https://paypal.me/majora2007"] +custom: [] From 2da77da51b620195229f02484b8fc52c9e4d7529 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Fri, 2 Jul 2021 14:30:11 -0500 Subject: [PATCH 03/23] Update README.md Added demo link to Readme and tweaked Sentry icon --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 60db687a1..699b94102 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,14 @@ your reading collection with your friends and family! [![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://discord.gg/eczRp9eeem) [![GitHub - Bugs and Feature Requests Only](https://img.shields.io/badge/github-issues-red.svg?maxAge=60)](https://github.com/Kareadita/Kavita/issues) +## Demo +If you want to try out Kavita, we have a demo up: +[https://demo.kavitareader.com/](https://demo.kavitareader.com/) +``` +Username: demouser +Password: Demouser64 +``` + ## Setup ### Non-Docker - Unzip the archive for your target OS @@ -108,9 +116,9 @@ Thank you to [ JetBrains](http: * [ dotTrace](http://www.jetbrains.com/dottrace/) ## Sentry -Thank you to [ Sentry](https://sentry.io/welcome/) for providing us with free license to their software. +Thank you to [](https://sentry.io/welcome/) for providing us with free license to their software. ### License * [GNU GPL v3](http://www.gnu.org/licenses/gpl.html) -* Copyright 2010-2021 \ No newline at end of file +* Copyright 2010-2021 From 2a34fe4cc78c14330490ce9c3fd3bb75ebc6d223 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 17 Jul 2021 14:03:11 -0500 Subject: [PATCH 04/23] The big one (#396) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactored library card to have a custom implemenation using icons rather than images. In addition, swapped out font awesome with official version. * Replaced pull-right with float-right due to updated bootstrap version. * Added a new section to admin dashboard * Added some menu system for reader, fit to width, height or original. Temp hack to make background black. * Ability to set nav bar completely off from some pages. Removed test case that isn't used. * Restore nav bar after reading * Implemented ability to delete a series directly and scan from a series. * Implemented some basic prefetching capabilities (just next page) and implemented proper reading direction support with a toggle. * Added a no connection route for if backend goes down. Removed go to page functionality as it isn't really needed and overly complicated. * Implemented ability to track progress and view it at a series level * Read status enhancements, cleaned up card code a bit, styling changes on nav bar dropdown, read or continue functionality for series detail page. * Fixed a few bugs around registering and refactored APIs to match backend. * Lots of cleanup of the code and TODOs. Improved responsiveness on series detail page. * Missed some changes * Implemented ability to rate a series. review text will come in v0.2. * Reverted some debug code for reader menu always being open. Added loader to reader as well. * Setup for building prod for releasing Kavita server. * After we create an admin for first time flow, refresh page so they can login. * Small change to help user get to server settings to setup libraries * Implemented ability to save what tab you are on or link directly to tab for admin dashboard. * Implemented ability to reset another users password. Tweaked how error interceptor reacted to OK messages. * Implemented general settings. Have ability to change cache directory, but disabled on BE. * Remove SSL * Implemented Volume 0's for series detail. * Compressed image-placeholder and implemented refresh metadata. Refresh metadata will update cover images while scan library will just fix matching, etc. * Refactored for backened architectural changes. Fixed some bugs around read progress off by one. * Fixed some styling around grid layout for volume then chapters. * On unauthorized, force logout then redirect to login page. * Don't throw multiple toasters when somthing goes wrong due to backend going down. * Implemented the ability to see and update server settings. * Implemented user preferences and ability to update them. Fixed a bug in production code such that API requests are made on current domain. * Small fixes around the app and server setting for port. * Fixed some styling to look better on mobile devices and overflow text to eclipse. * Cleanup and implemented card details for Volume/Chapters. * Small tweak to card details * Mark as Read/unread on Volumes now implemented. * Cleaned up some code, integrated user settings into manga reader, took care of some todos. * Forgot to sort chapters * Fixed issue in card details with string concatentation * Updated the Manga Reader to be better looking and simplier (code) on Desktop devices. * Added more responsive breakpoints for overlay to look much better on more screen sizes * Some changes for tablet. Clear out localStorage that is older than 1 page of what you're reading. * Fix bug for continuing where you last left off. * Fixed a bug where continue reading didn't take into account chapters. * Cleaned up imports and added autocomplete skeleton. * Small UX enhancements * Moved manga-reader into it's own module to lessen default package size * Removed route guards from reader module as it is handled by parent module. * Responsive pass through on Series Detail page. * Cleaned up containers and tooltips. * Tooltip for icon only buttons * Library editor modal cleanup * Implemented nav bar for directory picker. * Removed console.log * Implemented a basic search for Kavita. Along the way did some CSS changes and error interceptor messages are better. * Implemented a re-usable base64 image that can be styled. Not as easy as using inline styling, but easy to use. * View encapsulation off so we can easily size these images. * Implemented typeahead search for nav bar. * Fix a bug when route parameters change, the series detail page wasn't updating with new information * Implemented page splitting * Cleaned up Card Details and split into 2 separate versions with unified Look and Feel. * Implemented ability to mark a series as read/unread. * Implemented Jump to First/Last page functionality as shortcuts to goToPage. * Implemented pagination on Library Detail page * Restore scroll position to the top on page route change * Not sure if this changes anything, but IDE doesn't complain * Added a cutsom favicon and small tweak on UI for library pagination controls. * Bugfix to take into account currently reading chapter for read/continue button * Implemented user reviews * Forgot to hook up one click handler * Only admins can edit a series * Implemented edit series page. Many fields are not yet supported for modification. * Hooked in Edit Series into backend. Fixed an ngIf on edit review button. * Switched over existing series info modal to use the new edit one. * Partially implemented download logs. Removed some files not needed and trialing css changes on actions menu for card items. * Integrated Jest for Unit Testing and added one test case. Will expand and integrate into work flow. * Cleaned up some mobile breakpoint styles. Looks much better on a phone. * A bit more css around phones to make reader menu useable. * Removed series-card-detail since it's been replaced with edit-series-modal. * Implemented save logs * Small cleanup * More responsive breakpoint tweaks for nav bar. * Fetching logs is fixed * Bugfix: Search bar was visible for non-authenticated users * Implemented the ability to correct (manually) a series title and for it to persist between scans. Small QoL changes throughout codebase. * Added some broken test setup. * Disable comments must start with space lint rule. * Fixed issue where tablets wouldn't be able to render all images. * Migrated code off localStorage and used one api to get information about chapter. * Cleaned up the code now that we are loading images differently. * Use circular array to cache image requests so that we can ensure next image is instantaneously available. * Some fixes around ensuring we don't prefetch when going back a page and ensuring prefetch doesn't fetch more pages than there are left. * Fixed #70: When marking as read from volume level, completion was off by 1 thus series level didn't show as completed. * Fixed #72. Missing an else statement which allowed another navigate to override the correct code. Refactored hasReadingProgress to be set in setContinuePoint * Cleaned up the User button in nav bar to be cleaner * Implemented a custom confirm/alert service so that I have complete control over style. * Missed LGTM exception * First pass at removing base64 strings for images and using lazy loaded binary file images. * Only load images that are within view (scroll port) * Not connected message needs more top margin * Move image handling to it's own service. Add transition for loading images and some cleanup * Misc cleanup * Refactored action items to a factory * Refactored the card item actionables into factory and moved actionable rendering into one component * Added an optional btn class input to allow styling menu as a button. * Implemented the ability to reset your individual password. * Wrong reset after resetting password * Don't let user set log level. Not sure it's possible to implement in ASP.NET * Implemented a carousel for streams component. Still needs some CSS and tweaking. Added some temp API endpoints for streams. Fixed a bug where after editing name on series underlying card didn't reflect. * Everything but the css is done * CSS done. Carousel components implemented * More CSS stuff * Small css change * Some cleanup on code * Add aria-hidden="true" on icons * Fixed css issue due to missing class * Made scrolling carousel feel better on more screen sizes * Fixed bug where confirm default buttons would all be cancel. * Replaced placeholder image with a kavita placeholder. Added a theme folder for standardizing colors. Cleaned up some css here and there. * Removed a dependency no longer needed. Implemented history based pagination for library detail page. * Changed MangaFile numberOfPages to Page to match with new migration * Fixed issue where if no chapters, we were just doing console.error instead of informing the user (should never happen) * Add a todo for a future feature * Implemented loading on series-detail volume section and fixed an issue where the whole series is just one volume and it's a special aka we can't parse vol/chapter from it, so it renders appropriately * Fixed a rare issue where split pages would quickly flash both sides due to previously that page being fetched via onload and thus when render called, render got recalled. * Fixed an off by 1 issue due to the fact that reading is 0-based and everything else is 1 based. (#94) * Fixed an off by 1 issue due to the fact that reading is 0-based and everything else is 1 based. (#94) (#95) * Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" (#96) * Bugfixes! (#99) * Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" * Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal. * Fixed the date format showing days before months. * Fixed a bug with scrollable modals for context info modals. * Fixed a bug where adding a folder to a library added a / before the path, thus breaking on linux. (#101) * Bugfixes (#103) * Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" * Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal. * Fixed the date format showing days before months. * Fixed a bug with scrollable modals for context info modals. * Last modified on chapters didn't really s how well and made no sense to show, removed it. * Preparing for feature * CSS adjustment for admin dashboard * First flow, ensure we go directly to library tab * When a user registers for first time, put them on login instead of relying on home page redirection. * Fixed an issue with directory picker where the path separators didn't work for both linux and windows systems. * Implement comic support (#104) * Implement comic support * Any disabled controls should show not-allowed pointer. * Fixed a scroll bug on modal * On connection lost, restore to previous page (#106) * Implement comic support * Any disabled controls should show not-allowed pointer. * Fixed a scroll bug on modal * If the server goes down between sessions and we go to not-connected page, try to restore previous route when connection regained. * Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in. (#108) * Error Cards (#110) * Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in. * Implemented a marker to inform the user that some archives can't be parsed. * Don't show scrollbar if we don't have enough height to overflow * Shows an error card when the underlying archive could not be read at all. * Changed the card up * Special grouping (#115) * Implemented splitting specials into their own section for individual reading. Requires up to date backend for db changes. * Cleaned up the code * Replace underscores on specials if they exist. A simple name cleaning. * Lots of Fixes (#126) * Fixed After editing a user's library access, the Sharing details aren't updating without a refresh #116 * Fixed Series Summary & Review do not respect newline characters #114 * Default to non-specials tab and don't destroy DOM between tab changes * Align UI api with backend * Library icon should be "manga" for comic and Manga * Fixed Mark Series as Read in series detail page doesn't update the volume/chapter cards unless page is refreshed. #118 * Fixed Defect: 2 Split pages in a row causes second page to not split #112 * Fixed an issue if last page is a splitpage, we wouldn't be able to see the other side of the split. * When jumping to begining and end and both first page and last page are splitpages, make sure we set the paging direction so user can view both pages. * Make sure we take into account splits when we try jump to first page then try to go "back" to the other split. * Cleaned up split code a bit * Fixed Go to Page is off by one #124 * Fixed Read button is showing continue when a show doesn't have any progress on it #121 * Implemented Read more component (Fixes #117) * Fixed a bug in gotopage where if you went to maxPages or greater, we would always - 1 from page number. * Forgot to commit this for Readmore component * tslint cleanup * Implemented Refactor Review to be bound to the star control rather than having a text review so the user can review without rating. #125 * Fixes #119 - 0 Volumes with 0 chapters were showing as specials, but should be in the special tab. * Fixed an issue from reverting scanSeries code. * Handle specials with a little more care * Fixed #138. Search wasn't showing localizedName due to a rendering issue. * Fixed an issue where L2R didn't handle multiple split pages in a row. * Code smells * Ensure we wipe context actions for library between login/logouts * Fixed loading series after marking searies unread/read (#135) * Removed isSpecial from volume (#137) * Bugfix/gotopage (#139) * Fixed #138 * Fixed #131 - getStem no longer removes the substring if lastPath is same as path. * Implements Issue #129 - There is now a close book button on the menu * Book Support (#141) * Refactored Library Type dropdown to use an API so UI/Backend is in sync. * Implemented the ability to load the book reader * Book support but none of this works. Just here to keep track as I switch to other bugs * Basic iframe implementation is now working * Needed changes to load the content into native div rather than via iframe. * We now have the ability to customize how we render the text. * Removed console.log * Implemented the ability to loadpages from remapped anchors from backend. * Removed epubjs references and implemented table of contents api. * Code now works for chapters with nested chapters * Lots of changes, most of the reader is half baked, but foundation is there. * Changed styles up a bit * Implemented the ability to scroll to a part within a book. Added a custom font to test out. * Show active page with a bolding when there are nested chapters * Chapter group titles are now clickable * Added the ability to set top offset in drawer * Finally got style overrides to work and some other stuff * User can now toggle menu with space * Ensure styles don't leak. Drawer bottom was cutoff. On phone devices, default margins should be 0%. * Use smooth scrolling when navigating between pages with scroll offset * Added some code for checking when all images on page are loaded, added a fade in animation (doesnt work) and some media queries for top bar. * Refactored all data structures in application into shared module * CSS changes * Fixed part selector query due to improper ids, now we use a more robust query type. Implemented a stack for adhoc clicks, so user can explore a bit but pagination is based on current page. * Reverted sidenav changes. Fixed scrollTo to be more reliable with how the content comes into view. * When you make an adhoc link jump, we now restore page and scroll position. * Hooked in basic preferences for books and force margin settings for mobile devices. * Book overrides now work all the time. Added a bunch of fonts for users to try out. * Added all font faces * A bit hacky, but darkMode now works for the reader. * Remove styles on destroy * First time users will have their menu open automatically * Book format now shows on card details modal * changed how margin updates to make more sense * Fixed flashing by applying an opacity transition on page change. * Code cleanup * Reverted changes to unify series-detail page. Added some extra accessibility for book reader. * Implement the ability to close drawer by clicking into the reader area * Don't let the user page past where they should be able to * Allow user to see the underlying values of customizations and when they save them, actually reset to their preferences * Responsive top for sticky header * Code smells * Implemented the ability to update book settings from user settings * code smells * Code smells and max/mins on reader should match the user pref area * Feature/feats and fixes (#144) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Feature/feats and fixes (#146) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Use margin-top instead of top for offsetting top * Add a little extra spacing just in case * Updated carousel to use a swpier * Increased the budget and changed how vendor module is created * Added some todos * Implemented the ability to suppress library link on cards * Fixed an issue with top offset for reading section * Added the action bar to the bottom when user scrolls all the way down (Feedback) * Added in a skip to content link for top nav * After performing an action on library page, refresh the data on page. * Implemented the ability to refresh metadata of a single series directly * Implemented a progress bar for reading and a go to page by clicking the progress bar * Only show the bottom action bar when there is a scrollbar * Implemented the ability to tap the sides of book reader to paginate * Book Feedback and Fixes (#147) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Use margin-top instead of top for offsetting top * Add a little extra spacing just in case * Updated carousel to use a swpier * Increased the budget and changed how vendor module is created * Added some todos * Implemented the ability to suppress library link on cards * Fixed an issue with top offset for reading section * Added the action bar to the bottom when user scrolls all the way down (Feedback) * Added in a skip to content link for top nav * After performing an action on library page, refresh the data on page. * Implemented the ability to refresh metadata of a single series directly * Implemented a progress bar for reading and a go to page by clicking the progress bar * Only show the bottom action bar when there is a scrollbar * Implemented the ability to tap the sides of book reader to paginate * Cleaned up carousel and fixed breakpoints so we always at least show 2 cards. * Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers. * Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons. * Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on. * Book Feedback (#148) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Use margin-top instead of top for offsetting top * Add a little extra spacing just in case * Updated carousel to use a swpier * Increased the budget and changed how vendor module is created * Added some todos * Implemented the ability to suppress library link on cards * Fixed an issue with top offset for reading section * Added the action bar to the bottom when user scrolls all the way down (Feedback) * Added in a skip to content link for top nav * After performing an action on library page, refresh the data on page. * Implemented the ability to refresh metadata of a single series directly * Implemented a progress bar for reading and a go to page by clicking the progress bar * Only show the bottom action bar when there is a scrollbar * Implemented the ability to tap the sides of book reader to paginate * Cleaned up carousel and fixed breakpoints so we always at least show 2 cards. * Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers. * Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons. * Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on. * Fixed issue where errors from login flow would not throw a toastr * Moved the progress bar and go to page into the side drawer to be less distracting when reading * Removed console.logs * Cleaned up styles on slider to be closer to size of cards * Fixed an issue with swiper not allowing use of touch (#149) * Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages. (#151) * Bugfix/in progress (#156) * Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages. * Actually fix in progress by only incrementing page num on bookmark when we are on the last page * Impleents tap to paginate user setting. (#157) * Feature/manga reader (#160) * Implemented pressing G to open go to page. Enhanced the dialog to give how many pages you can go to. On page splitting button press, if the current page needs splitting, we will re-render with the new option. * Added gotopage shortcut key for book reader * Setup for new feature * Swiper now respects card sizes * Fixes #51 and updates dependencies for security vulnerabilities * Implemented back to top button * Remove the - 1 hack from series-detail * Remove hack from carad item * Fix a regression where book reader would +1 pageNum for bookmarking on last page, but because books don't start at 0 for page nums, it isn't necessariy * Implemented the ability to move between volumes automatically * Additional security fix * Code smells * Cleaned up the implementation to properly prevent pagination when loading next chapter/volume * v0.4 Last touches (#162) * PurgeCSS integration * Changed some icons to have titles * Automatic scaling changes * Removed 2 font families that didn't make the release cut. Fixed an off by 1 regression with setContinuePoint * Backed out purge css after testing * Some cleanup of the package * Automatic scaling adjustments * Bugfix/release shakeout (#164) * Fixed body color not being reset due to capturing it too late * Removed some dead code * v0.4 merge to stable (#165) * Fixed an off by 1 issue due to the fact that reading is 0-based and everything else is 1 based. (#94) * Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" (#96) * Bugfixes! (#99) * Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" * Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal. * Fixed the date format showing days before months. * Fixed a bug with scrollable modals for context info modals. * Fixed a bug where adding a folder to a library added a / before the path, thus breaking on linux. (#101) * Bugfixes (#103) * Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" * Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal. * Fixed the date format showing days before months. * Fixed a bug with scrollable modals for context info modals. * Last modified on chapters didn't really s how well and made no sense to show, removed it. * Preparing for feature * CSS adjustment for admin dashboard * First flow, ensure we go directly to library tab * When a user registers for first time, put them on login instead of relying on home page redirection. * Fixed an issue with directory picker where the path separators didn't work for both linux and windows systems. * Implement comic support (#104) * Implement comic support * Any disabled controls should show not-allowed pointer. * Fixed a scroll bug on modal * On connection lost, restore to previous page (#106) * Implement comic support * Any disabled controls should show not-allowed pointer. * Fixed a scroll bug on modal * If the server goes down between sessions and we go to not-connected page, try to restore previous route when connection regained. * Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in. (#108) * Error Cards (#110) * Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in. * Implemented a marker to inform the user that some archives can't be parsed. * Don't show scrollbar if we don't have enough height to overflow * Shows an error card when the underlying archive could not be read at all. * Changed the card up * Special grouping (#115) * Implemented splitting specials into their own section for individual reading. Requires up to date backend for db changes. * Cleaned up the code * Replace underscores on specials if they exist. A simple name cleaning. * Lots of Fixes (#126) * Fixed After editing a user's library access, the Sharing details aren't updating without a refresh #116 * Fixed Series Summary & Review do not respect newline characters #114 * Default to non-specials tab and don't destroy DOM between tab changes * Align UI api with backend * Library icon should be "manga" for comic and Manga * Fixed Mark Series as Read in series detail page doesn't update the volume/chapter cards unless page is refreshed. #118 * Fixed Defect: 2 Split pages in a row causes second page to not split #112 * Fixed an issue if last page is a splitpage, we wouldn't be able to see the other side of the split. * When jumping to begining and end and both first page and last page are splitpages, make sure we set the paging direction so user can view both pages. * Make sure we take into account splits when we try jump to first page then try to go "back" to the other split. * Cleaned up split code a bit * Fixed Go to Page is off by one #124 * Fixed Read button is showing continue when a show doesn't have any progress on it #121 * Implemented Read more component (Fixes #117) * Fixed a bug in gotopage where if you went to maxPages or greater, we would always - 1 from page number. * Forgot to commit this for Readmore component * tslint cleanup * Implemented Refactor Review to be bound to the star control rather than having a text review so the user can review without rating. #125 * Fixes #119 - 0 Volumes with 0 chapters were showing as specials, but should be in the special tab. * Fixed an issue from reverting scanSeries code. * Handle specials with a little more care * Fixed #138. Search wasn't showing localizedName due to a rendering issue. * Fixed an issue where L2R didn't handle multiple split pages in a row. * Code smells * Ensure we wipe context actions for library between login/logouts * Fixed loading series after marking searies unread/read (#135) * Removed isSpecial from volume (#137) * Bugfix/gotopage (#139) * Fixed #138 * Fixed #131 - getStem no longer removes the substring if lastPath is same as path. * Implements Issue #129 - There is now a close book button on the menu * Book Support (#141) * Refactored Library Type dropdown to use an API so UI/Backend is in sync. * Implemented the ability to load the book reader * Book support but none of this works. Just here to keep track as I switch to other bugs * Basic iframe implementation is now working * Needed changes to load the content into native div rather than via iframe. * We now have the ability to customize how we render the text. * Removed console.log * Implemented the ability to loadpages from remapped anchors from backend. * Removed epubjs references and implemented table of contents api. * Code now works for chapters with nested chapters * Lots of changes, most of the reader is half baked, but foundation is there. * Changed styles up a bit * Implemented the ability to scroll to a part within a book. Added a custom font to test out. * Show active page with a bolding when there are nested chapters * Chapter group titles are now clickable * Added the ability to set top offset in drawer * Finally got style overrides to work and some other stuff * User can now toggle menu with space * Ensure styles don't leak. Drawer bottom was cutoff. On phone devices, default margins should be 0%. * Use smooth scrolling when navigating between pages with scroll offset * Added some code for checking when all images on page are loaded, added a fade in animation (doesnt work) and some media queries for top bar. * Refactored all data structures in application into shared module * CSS changes * Fixed part selector query due to improper ids, now we use a more robust query type. Implemented a stack for adhoc clicks, so user can explore a bit but pagination is based on current page. * Reverted sidenav changes. Fixed scrollTo to be more reliable with how the content comes into view. * When you make an adhoc link jump, we now restore page and scroll position. * Hooked in basic preferences for books and force margin settings for mobile devices. * Book overrides now work all the time. Added a bunch of fonts for users to try out. * Added all font faces * A bit hacky, but darkMode now works for the reader. * Remove styles on destroy * First time users will have their menu open automatically * Book format now shows on card details modal * changed how margin updates to make more sense * Fixed flashing by applying an opacity transition on page change. * Code cleanup * Reverted changes to unify series-detail page. Added some extra accessibility for book reader. * Implement the ability to close drawer by clicking into the reader area * Don't let the user page past where they should be able to * Allow user to see the underlying values of customizations and when they save them, actually reset to their preferences * Responsive top for sticky header * Code smells * Implemented the ability to update book settings from user settings * code smells * Code smells and max/mins on reader should match the user pref area * Feature/feats and fixes (#144) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Feature/feats and fixes (#146) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Use margin-top instead of top for offsetting top * Add a little extra spacing just in case * Updated carousel to use a swpier * Increased the budget and changed how vendor module is created * Added some todos * Implemented the ability to suppress library link on cards * Fixed an issue with top offset for reading section * Added the action bar to the bottom when user scrolls all the way down (Feedback) * Added in a skip to content link for top nav * After performing an action on library page, refresh the data on page. * Implemented the ability to refresh metadata of a single series directly * Implemented a progress bar for reading and a go to page by clicking the progress bar * Only show the bottom action bar when there is a scrollbar * Implemented the ability to tap the sides of book reader to paginate * Book Feedback and Fixes (#147) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Use margin-top instead of top for offsetting top * Add a little extra spacing just in case * Updated carousel to use a swpier * Increased the budget and changed how vendor module is created * Added some todos * Implemented the ability to suppress library link on cards * Fixed an issue with top offset for reading section * Added the action bar to the bottom when user scrolls all the way down (Feedback) * Added in a skip to content link for top nav * After performing an action on library page, refresh the data on page. * Implemented the ability to refresh metadata of a single series directly * Implemented a progress bar for reading and a go to page by clicking the progress bar * Only show the bottom action bar when there is a scrollbar * Implemented the ability to tap the sides of book reader to paginate * Cleaned up carousel and fixed breakpoints so we always at least show 2 cards. * Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers. * Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons. * Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on. * Book Feedback (#148) * In case a migration is poorly implemented, default on first load of bookreader. * If there is no table of contents in epub file, inform the user * Fixed #143 by ensuring we properly flatten the correct property when catching errors. * Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px) * For Cards, moved the action menu into the bottom area, added Library link that said series belongs to. * Added library to the series detail card * Implemented the ability to automatically scale the manga reader based on screen size. * Fix code smells * Use margin-top instead of top for offsetting top * Add a little extra spacing just in case * Updated carousel to use a swpier * Increased the budget and changed how vendor module is created * Added some todos * Implemented the ability to suppress library link on cards * Fixed an issue with top offset for reading section * Added the action bar to the bottom when user scrolls all the way down (Feedback) * Added in a skip to content link for top nav * After performing an action on library page, refresh the data on page. * Implemented the ability to refresh metadata of a single series directly * Implemented a progress bar for reading and a go to page by clicking the progress bar * Only show the bottom action bar when there is a scrollbar * Implemented the ability to tap the sides of book reader to paginate * Cleaned up carousel and fixed breakpoints so we always at least show 2 cards. * Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers. * Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons. * Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on. * Fixed issue where errors from login flow would not throw a toastr * Moved the progress bar and go to page into the side drawer to be less distracting when reading * Removed console.logs * Cleaned up styles on slider to be closer to size of cards * Fixed an issue with swiper not allowing use of touch (#149) * Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages. (#151) * Bugfix/in progress (#156) * Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages. * Actually fix in progress by only incrementing page num on bookmark when we are on the last page * Impleents tap to paginate user setting. (#157) * Feature/manga reader (#160) * Implemented pressing G to open go to page. Enhanced the dialog to give how many pages you can go to. On page splitting button press, if the current page needs splitting, we will re-render with the new option. * Added gotopage shortcut key for book reader * Setup for new feature * Swiper now respects card sizes * Fixes #51 and updates dependencies for security vulnerabilities * Implemented back to top button * Remove the - 1 hack from series-detail * Remove hack from carad item * Fix a regression where book reader would +1 pageNum for bookmarking on last page, but because books don't start at 0 for page nums, it isn't necessariy * Implemented the ability to move between volumes automatically * Additional security fix * Code smells * Cleaned up the implementation to properly prevent pagination when loading next chapter/volume * v0.4 Last touches (#162) * PurgeCSS integration * Changed some icons to have titles * Automatic scaling changes * Removed 2 font families that didn't make the release cut. Fixed an off by 1 regression with setContinuePoint * Backed out purge css after testing * Some cleanup of the package * Automatic scaling adjustments * Bugfix/release shakeout (#164) * Fixed body color not being reset due to capturing it too late * Removed some dead code * Implemented dark mode (#166) * Implemented dark mode * Bump version to v0.4.1, moved dark styles to own stylesheet (some files need dark overrides) and ensured all pages are styled correctly. * Switched the code over to use bootstrap theme with Kavita color * Bugfix/manga issues (#169) * Fixes #168 * Fixed a bug on the manga reader that caused the background color to inherit from body rather than be forced black. Fixed an issue where a long filename on a phone could make it hard to close menu once open. * Sentry Integration (#170) * Basic version of sentry is implemented * Enhanced continuous reading to show a warning when we couldn't find the next reading point. This will also short circuit after the first warning is shown * Implemented Sentry. Currently src maps aren't uploading * Bugfixes/misc (#174) * Fixes #171 * Ensure btn-information is properly styled in dark mode * no trace sampling for UI * Fixed an issue where when we had no read progress, when choosing firs… (#176) * Fixed an issue where when we had no read progress, when choosing first volume, we'd use first chapter, but sometimes chapters wouldn't be ordered. * Code smell * Collection Support (#179) * Home button should go to library page, so we can use back and return to where we clicked from. * Implemented Collection Support * Fixed an issue for search in nav bar in darkmode * Move loading to the top of the book reader * Added DOMHelper to help with accessibility * Implemented a re-usable layout component for all card layout screens. Handles pagination. * Fixes #175 * Additional RBS check for tags where the tag fragment is invalid or there are no libraries that a user has access to * Introduced an edit collection tag modal and actionables for collection tags. * Bump version of Sentry SDK. * Ability to remove series from a tag in a bulk manner. * Continue Reading Regression (#186) * Added a dark placeholder image for dark mode and hooked it up to Image service to load correct placeholder * Fixed #181. Rewrote the continue logic to only check chapters and removed the concept of volumes (since every volume has a chapter). Opening a volume now does it's own check if there is progress on the volume, it will open to where the user left off. Otherwise, it will grab the first chapter and start at the beginning. * Added dark error placeholder image (#187) * Bugfix/misc (#188) * Fixed an issue where carousel series cards scan library would kick off for wrong library id. * Refactored the tab code to be dynamic based on the volume/chapter/specials of the data. The correct tab will be default selected and tabs that don't need to exist wont. * Some css adjustments for typeaheads * Move the loader out of the action bar so if settings menu is open when navigating pages, the math doesn't break * Fixed a bug where highlight wasn't updating correctly when we type or after we add a tag via keyboard * Fix an exception when tags are null (due to a bug in release) * Accessibility bugs * Collection Tweaks (#190) * Fixed an issue where carousel series cards scan library would kick off for wrong library id. * Refactored the tab code to be dynamic based on the volume/chapter/specials of the data. The correct tab will be default selected and tabs that don't need to exist wont. * Some css adjustments for typeaheads * Move the loader out of the action bar so if settings menu is open when navigating pages, the math doesn't break * Fixed a bug where highlight wasn't updating correctly when we type or after we add a tag via keyboard * Fix an exception when tags are null (due to a bug in release) * Accessibility bugs * Fixed #189 and cleaned up series pagination. * Major cleanup of the typeahead code. One bug remaining * Fixed highlight issue * Fixed #183. When using continuous manga reading, moving to another chapter within the reader now updates the url. (#191) * Book Parity: Reading direction for books (#192) * Fixed pagination issue on library-detail * Implemented left to right/right to left reading mode in book reader * feat: remove Webtoon option from Library Types (#194) #251 * Book Reading Progress Enhancement (#196) * Implemented the ability to bookmark and restore reading progress (scroll) for books. * Check to make sure we have something to search before we perform a querySelectorAll * Don't reload a page when we've hit the boundaries of min/max pages and are trying to spam left/right key. * Fixed a bug where if kavita-part marker was on the same page, the conditional was always true, meaning that when it was on a different one, we wouldn't load it up. * Bugfix/tab refactor (#197) * Fixed a logic bug which hid the specials tab too aggressively * Unsubscribe from observables on destroy of account service * Recently Added Page (#198) * Recently Added Page * Changed default pagination to 30 * Update to CSS for homepage section title links (#201) * Update to CSS for homepage section title links * Adding :active and :focus selectors - :active for accessibility best practice and UX. - :focus for mobile. * Fixed #202 - Scope list item hover styles in darkmode to only typeahead (#204) * Double Flashing Fix (#206) * Fixed #202 - Scope list item hover styles in darkmode to only typeahead * Fixed #199 - Flickering when paginating * Fixed an issue with Continue Reading not working after manually updating a volume with multiple chapters as read/unread (#211) * Directory Picker UX Enhancements (#214) * Added a filter and some css to the directory picker to make it more useable * Fixed a bug where last goBack didn't reload the disks and kept the directories from the last selected node. * Allow user to change port (#215) * Allow the admin to configure the log level from the UI. Add a warning informing them restart is required for port and log level. (#217) * Cleaned up some console.logs and tweaked the logic of scroll position remembering. Now the side nav chapter list will show what part you are on (if applicable). (#220) * Specials Sort (#223) * Implemented a natural sort (same as BE) to sort the specials so the order isn't completely random * Added ability to push source maps tagged to a release on push to main and develop (#219) * Create Library Feedback (#224) # Added - Library type and number of folders shared is now visible on Manage Libraries page # Changed - Directory Picker will now let you share the current folder from any time in the picker flow - Headings are now consistent between User Preferences and Admin screen * Fixing folder structure for sentry github action (#225) * Updating workflow environment (#226) Sentry workflow was giving an error: "Error: Container action is only supported on Linux" * Fixing build dist path for sentry (#227) * Updating workflow environment Sentry workflow was giving an error: "Error: Container action is only supported on Linux" * update build dist path for sentry * fix: unable to select lib type when creating a new lib (#231) * fix: unable to select lib type when creating a new lib fixed #230 * fix: able to change lib type after it's creation * Download Support (#229) * Implemented the ability to download series/chapter/volume from server. Uses RBS to determine if a user can or cannot download. * Safety Checks (#233) * Fixes a safety check from Sentry ANGULAR-1Z * Fixed a build issue from downloading branch * Fix/234 235 login redirection and dark theme not working (#236) * fix: login redirection not happening #234 * fix: dark theme not working after logout #235 * Remove SP marker from specials and also remove extension from specials. (#238) * Remove SP marker from specials and also remove extension from specials. * Sort first so we can take advantage of the SP number * Error Handling Rework (#237) * Updated ngx-toastr version (includes new styles), updated style.scss to be cleaner. Began adding Title service for accessibility. * Reworked error interceptor and toastr service to reduce duplicates and properly show errors. Co-authored-by: Milazzo, Joseph (jm520e) * Fixed a prod only issue due to multi: true for provider (#243) * Feat/usage stats collection (#245) * feat: add client anonymous data collection * fix: sonar issues * Implemented a server setting to opt-out of usage collection Co-authored-by: Joseph Milazzo * Book Progress Enhancements (#250) * Implemented the ability to bookmark any part of the book, not just the chapter parts * Added total pages label to the book reader * Manga Reader Redesign + Webtoon Reader (#247) # New - Bottom drawer has a scroller to jump to pages, jump to first/last page, and jump between volume/chapters. - Quick actions easily available to change reading direction, change reader mode, color tones, and access extended settings - Extended settings area for settings unlikely changed - Ability to auto close menu (setting) - Ability to apply extra darkness or a sepia tone to reduce blue light - New reader modes: Left/Right, Up/Down, Webtoon (scroll up and down) - Information about the volume/chapter you are reading is now showed in the top drawer # Changed - When applying reader modes or reading directions, the clickable areas will now show an overlay to help you understand where to click. - Image scaling and Image splitting now show some contextual icons to help the user understand what they do - Close book button is now in the top drawer menu * Bugfix/toastr css updates (#249) * CSS Updates - Removed BS4 toastr styles - Reinstituted default non-BS4 toastr styles - Centered login (accounting for header) - Adjusted the carousel section heading font-size. - Added a small padding (5px) on top of the padding for the nav, so the text isn't so close to the nav. * Login refresh & toaster styles - Added new font for login - Updated login styles - Hide nav bar on logout - show nav bar on login - Added images for new login - dark styles for login - dark styles for toastr * minified images * sonar bug fix * updating style url for minified asset * Fixes and code smells - fix for login bg image showing up elsewhere - fix for code smells - added font family to nav bar * Fixed missing label/input linking * resized, compressed, and minified bg image - change opacity to dark mode login * Changed Spartan font files to variable weight * Change requests - Added font license - Renamed image used for login bg - Fixed path in styles where above file was used - Removed now unused bs4 toastr style import Co-authored-by: Joseph Milazzo * Fix a bad version number * hotfix for docker build issue (#251) * updating angular.json changing output folder * change path * Fixed build issues (#252) * Bugs! (#254) * Fix style issue where bootstrap components weren't taking kavita overrides * Fixed a bug where after updating certain things within a card on library page, the feeds wouldn't update * Fixed a bug where chapter sort would not behave the same way as on chrome * Release canidate bugs (#255) * Auto Close menu wasn't updating within reader * (Book Reader) Enhanced scroll part code to limit elements we count for bookmarking, only calculating intersection once fully visible and saving when scroll ends * Removed Image Smoothing option (chrome only) from this release. No noticeable difference having it. * Fixed a page reload when clicking on In Progress section title on home page * Bugfix/webtoons (#256) * Fixed issue where first load would not start capturing scroll events due to not knowing the scroll to an element finished. * Changed how to figure out when to end scrolling event by calculating if the target element is visible in the viewport. * Seems to be working pretty well. Cleaned up some of the messages for debugging. * Simplified the intersection logic drastically * Fixed a color issue on slider for non-dark mode * Disable first/last page buttons if we are already on those respective pages * Added documentation to circular array class * Some debug code but scrolling no longer results in jank due to scrollToPage getting executed too often * Backing out ability to use webtoon reader * Css fix for book reader progress and light mode toastr (#257) * Changing dark mode to default (#262) - Changed user-preferences site dark mode to default true * added logo and css for logo (#260) * added logo and css for logo - max-height is to prevent the image from increasing the height of the navbar. - middle middle vertical align didn't look to match up as expected, so a top middle was implemented based on chrome and firefox renderings. * Adding requested accessibility changes * Added Kavita-webui repo to UI/Web * Special parsing issues (#361) * Update README.md Added demo link to Readme and tweaked Sentry icon * Adds some regex cases from manga downloaded through FMD2. For parsing specials, if the marker is found, try to overwrite the series with the folder the manga is in, rather than what we parse from filename. * Version bump * Changed company to point to our domain * Fixed copyright to point to our domain * Adding test github workflow and test build file (#362) * Fixing copy fail in monorepo-test workflow * fixing shell script to be executable * fixing permission issue * Folder Parsing (#366) * New: Ability to parse volume and chapter from directory tree, rather than exclusively from filename. (#313) * Fixed: Fixed an edge case where GetFoldersTillRoot if given a non-existent root in the file path, would result in an infinite loop. * Book Reader Bugs (#367) * Fixed: Fixed an issue where when tap to paginate is on, clicking off the settings menu doesn't close it. * Fixed: Fixed the tint color on book reader being different from manga reader. * Fixed: Reworked the clickable overlay for tap to paginate so links are still clickable when tap to paginate is on. * Build on monorepo * Book Reader Intersection Handler not firing (#369) * Fixed: Fixed an issue where intersection observer wouldn't be triggered when book page had no images (Book reader bookmark not firing while scrolling #360) * Raw Image Support (#375) * New: Ability to add Raw Image folders to Kavita via new library Types Images (Comic) and Images (Manga). Images must belong to a folder, they cannot exist in the root directory. It is important to at least put a second folder (minimum) with a Volume of Chapter, else you will end up with each image as a special which is not easily readable. * Changed: When caching images for raw images, do it much faster and return earlier if the files have already been cached. Co-authored-by: Robbie Davis * Fixed a bug in the circular array which would not properly roll index over for applyFor (#377) * Fixed: Manga reader's prefetching buffer had issues with rolling over index, which would require a manual image load every 7 pages. (#372) * Adding new ui dist folder to gitignore * Added stats folder persistence (#382) * Added demo link to Readme and tweaked Sentry icon * Added a symbolic link to persist the stats folder between docker container updates. Co-authored-by: Joseph Milazzo * Lots of UI fixes and changes (#383) * After we flatten, remove any non image files as we shouldn't iterate over them * Fixed a case for next/prev chapter where if we have a volume then chapters attached afterwards, there would be improper movement due to how sorting works. * Fixed an issue where no-connection would not resume where the loss of connection occured * Fixed an issue where after creating a new user, their Last Active Date would show as a weird date, instead of "Never" * Sort files in card detail to mimic reading order * Implemented a single source of executing actions (card or main page) and added actionables on library detail page. * Refactored series actions into action service * Implemented common handling for entity actions in a dedicated service * Fixed build script for new monorepo layout. * Cleaned up nav header subscriptions * Updated the favicon/icons to work on different devices as home screen shortcuts * Fixed: Fixed issue where if you had a volume with 1 volume based file and a chapter file, the next/prev chapters wouldn't work (Fixes #380) * Fixed: When connection is lost to backend, saving current page url and resuming when connection reestablished was not working (Fixes #379) * Fixed: When creating a new user, a strange date format was shown in Last Active due to not having been active. Now "Never" shows (Fixes #376) * Fixed: When showing files for a volume/chapter, the files are now sorted in the order you will read them in (Fixes #378) * Added: Library detail now has actionable menu next to header, so you can kick off a scan or metadata refresh (Closes #363) * Changed: When performing actions like marking as read/unread on series detail page, the actionable button will disable until the request finishes. (Closes #381) * Changed: Favicon and Icons have been updated so when saving webpage to home screen, it should show a proper icon (Closes #356) * Lots of Bugfixes and Tweaks (#387) * Fixed: Fixed a bug in how we get images. When dealing with raw images, we need special logic (Monorepo) * Added: (Manga Reader) When we are within 10 pages of the beginning of a manga, prefetch the prev chapter * Fixed: (Manga Reader) The slider would sometime skip pages and would have leftover track on last page. * Fixed: (Raw Images) When calculating cover image for Raw Image entities, only select image files * Fixed: Fixed a logic bug where raw image based entities wouldn't send back the correct page (Monorepo) * Changed: When deleting a library, it can take a long time. Disable delete buttons until the deletion finishes * Added: (Parser) Added a regex case for "Series - Ch. 20 - Part" * Changed: Try to show the files in volume/chapter detail modal in the reading order. * Fixed: Next/Previous chapter was not working in all cases from previous Monorepo commit. * Bugfix/locked name reset (#389) * Fixed: Fixed an issue where if you manually rename a series, then remove/modify an entity related to the series, the series would be deleted and re-created with the original, parsed name. * Scan Series (#390) * Refactored Library delete to use a transaction. * Ensure we parse "Series Name - Chapter XXX" before "Series Name - Vol XXX" * Ensure if GetFoldersTillRoot is called with a fullPath containing a file, that we ignore the file for returned folders. * Changed: From the series actionable menu, instead of scan library, which would kick off a filesystem scan on the library the series belonged to, instead we have "scan series" which will scan the folders represented by that series. If that series has files in the root of the library, the library root is scanned, but only said series files will be processed. This can make a refresh occur in under 500 ms (Fixes #371) * Fixed: Fixed a bad parsing case for "Series Name - Vol.01 Chapter 029 8 Years Ago" where somehow the chapter would parse as "029 8", thus making the file a special rather than chapter 29. * Fixes a bug where the root path and the full path share a common word, like root: "/Test library" and full path "/Test library/Test" which caused "/Test" to be taken out of root and thus GetFoldersTillRoot would never finish * About Section (#394) * Added: Added an about section with version, links to discord, github, donations, etc. * Fixed: Fixed some parsing issues that caused "Series Name - Volume X Chapter Y" to parse as "Series Name - Volume X" from a previous change in develop. * Cleaning up monorepo build files * Fixing permission issues Co-authored-by: Leonardo Dias Co-authored-by: Robbie Davis Co-authored-by: Leonardo Dias Co-authored-by: Milazzo, Joseph (jm520e) Co-authored-by: Chris Plaatjes --- .browserslistrc | 17 + .editorconfig | 21 + .github/workflows/build.yml | 2 +- .github/workflows/monorepo-test.yml | 38 + .github/workflows/nightly-docker.yml | 15 +- .github/workflows/sentry-release.yml | 42 + .github/workflows/stable-docker.yml | 13 +- .gitignore | 46 +- .vscode/settings.json | 50 + API.Tests/Extensions/SeriesExtensionsTests.cs | 28 +- API.Tests/Parser/MangaParserTests.cs | 81 +- API.Tests/Services/BookServiceTests.cs | 4 +- API.Tests/Services/DirectoryServiceTests.cs | 28 +- API.Tests/Services/ScannerServiceTests.cs | 47 +- API/API.csproj | 18 +- API/Comparators/ChapterSortComparer.cs | 23 +- API/Controllers/.editorconfig | 0 API/Controllers/BookController.cs | 1 + API/Controllers/LibraryController.cs | 66 +- API/Controllers/ReaderController.cs | 72 +- API/Controllers/SeriesController.cs | 52 +- API/Controllers/ServerController.cs | 25 +- API/Controllers/SettingsController.cs | 26 +- API/Data/LibraryRepository.cs | 41 +- API/Entities/Enums/LibraryType.cs | 8 +- API/Entities/Enums/ReaderMode.cs | 5 +- API/Entities/Genre.cs | 4 +- API/Entities/SeriesMetadata.cs | 12 +- .../ApplicationServiceExtensions.cs | 25 +- API/Extensions/DirectoryInfoExtensions.cs | 28 +- API/Extensions/SeriesExtensions.cs | 19 +- API/Extensions/ServiceCollectionExtensions.cs | 5 +- API/Interfaces/ILibraryRepository.cs | 4 +- API/Interfaces/ITaskScheduler.cs | 3 +- API/Interfaces/Services/IArchiveService.cs | 2 +- API/Interfaces/{ => Services}/IBookService.cs | 4 +- API/Interfaces/Services/IDirectoryService.cs | 5 +- API/Interfaces/Services/IImageService.cs | 10 + API/Interfaces/Services/IScannerService.cs | 6 +- API/Parser/Parser.cs | 228 +- API/Program.cs | 13 +- API/Services/ArchiveService.cs | 55 +- API/Services/BookService.cs | 46 +- API/Services/CacheService.cs | 77 +- API/Services/Clients/StatsApiClient.cs | 3 +- API/Services/DirectoryService.cs | 100 +- API/Services/ImageService.cs | 71 + API/Services/MetadataService.cs | 63 +- API/Services/StatsService.cs | 4 +- API/Services/TaskScheduler.cs | 31 +- API/Services/Tasks/ScannerService.cs | 304 +- API/Startup.cs | 34 +- Kavita.Common/Extensions/EnumExtensions.cs | 21 + Kavita.Common/Extensions/PathExtensions.cs | 12 + Kavita.Common/HashUtil.cs | 10 +- Kavita.Common/Kavita.Common.csproj | 11 +- UI/Web/LICENSE | 674 + UI/Web/README.md | 27 + UI/Web/angular.json | 139 + UI/Web/e2e/protractor.conf.js | 37 + UI/Web/e2e/src/app.e2e-spec.ts | 23 + UI/Web/e2e/src/app.po.ts | 11 + UI/Web/e2e/tsconfig.json | 13 + UI/Web/package-lock.json | 37201 ++++++++++++++++ UI/Web/package.json | 78 + UI/Web/setupJest.ts | 19 + UI/Web/src/app/_guards/admin.guard.ts | 28 + UI/Web/src/app/_guards/auth.guard.ts | 27 + .../src/app/_guards/library-access.guard.ts | 17 + .../app/_interceptors/error.interceptor.ts | 121 + .../src/app/_interceptors/jwt.interceptor.ts | 36 + .../edit-collection-tags.component.html | 53 + .../edit-collection-tags.component.scss | 0 .../edit-collection-tags.component.ts | 121 + .../edit-series-modal.component.html | 169 + .../edit-series-modal.component.scss | 3 + .../edit-series-modal.component.ts | 148 + .../review-series-modal.component.html | 32 + .../review-series-modal.component.scss | 0 .../review-series-modal.component.ts | 41 + UI/Web/src/app/_models/bookmark.ts | 5 + UI/Web/src/app/_models/chapter.ts | 14 + UI/Web/src/app/_models/client-info.ts | 12 + UI/Web/src/app/_models/collection-tag.ts | 7 + UI/Web/src/app/_models/details-version.ts | 4 + UI/Web/src/app/_models/in-progress-chapter.ts | 14 + UI/Web/src/app/_models/library.ts | 15 + UI/Web/src/app/_models/manga-file.ts | 7 + UI/Web/src/app/_models/manga-format.ts | 6 + UI/Web/src/app/_models/member.ts | 10 + UI/Web/src/app/_models/pagination.ts | 11 + UI/Web/src/app/_models/person.ts | 10 + .../_models/preferences/page-split-option.ts | 5 + .../app/_models/preferences/preferences.ts | 30 + .../app/_models/preferences/reader-mode.ts | 14 + .../_models/preferences/reading-direction.ts | 4 + .../app/_models/preferences/scaling-option.ts | 6 + UI/Web/src/app/_models/search-result.ts | 9 + UI/Web/src/app/_models/series-metadata.ts | 10 + UI/Web/src/app/_models/series.ts | 18 + UI/Web/src/app/_models/user.ts | 9 + UI/Web/src/app/_models/volume.ts | 13 + UI/Web/src/app/_services/account.service.ts | 126 + .../app/_services/action-factory.service.ts | 202 + UI/Web/src/app/_services/action.service.ts | 199 + .../app/_services/collection-tag.service.ts | 38 + UI/Web/src/app/_services/image.service.ts | 41 + UI/Web/src/app/_services/library.service.ts | 89 + UI/Web/src/app/_services/member.service.ts | 38 + UI/Web/src/app/_services/nav.service.ts | 39 + UI/Web/src/app/_services/reader.service.ts | 107 + UI/Web/src/app/_services/series.service.ts | 163 + UI/Web/src/app/_services/server.service.ts | 26 + UI/Web/src/app/_services/stats.service.ts | 18 + .../directory-picker.component.html | 54 + .../directory-picker.component.scss | 15 + .../directory-picker.component.ts | 110 + .../edit-rbs-modal.component.html | 23 + .../edit-rbs-modal.component.scss | 0 .../edit-rbs-modal.component.ts | 70 + .../library-access-modal.component.html | 23 + .../library-access-modal.component.scss | 0 .../library-access-modal.component.ts | 70 + .../library-editor-modal.component.html | 40 + .../library-editor-modal.component.scss | 0 .../library-editor-modal.component.ts | 104 + .../reset-password-modal.component.html | 21 + .../reset-password-modal.component.scss | 0 .../reset-password-modal.component.ts | 36 + UI/Web/src/app/admin/_models/server-info.ts | 8 + .../src/app/admin/_models/server-settings.ts | 8 + UI/Web/src/app/admin/admin-routing.module.ts | 22 + UI/Web/src/app/admin/admin.module.ts | 47 + .../admin/dashboard/dashboard.component.html | 29 + .../admin/dashboard/dashboard.component.scss | 0 .../admin/dashboard/dashboard.component.ts | 52 + UI/Web/src/app/admin/filter.pipe.ts | 16 + .../manage-library.component.html | 33 + .../manage-library.component.scss | 0 .../manage-library.component.ts | 98 + .../manage-settings.component.html | 64 + .../manage-settings.component.scss | 11 + .../manage-settings.component.ts | 61 + .../manage-system.component.html | 43 + .../manage-system.component.scss | 0 .../manage-system/manage-system.component.ts | 61 + .../manage-users/manage-users.component.html | 50 + .../manage-users/manage-users.component.scss | 0 .../manage-users/manage-users.component.ts | 107 + UI/Web/src/app/admin/settings.service.ts | 34 + .../all-collections.component.html | 23 + .../all-collections.component.scss | 0 .../all-collections.component.ts | 108 + UI/Web/src/app/app-routing.module.ts | 61 + UI/Web/src/app/app.component.html | 5 + UI/Web/src/app/app.component.scss | 0 UI/Web/src/app/app.component.ts | 30 + UI/Web/src/app/app.module.ts | 142 + .../book-reader/_models/book-chapter-item.ts | 6 + .../src/app/book-reader/book-reader.module.ts | 25 + .../book-reader/book-reader.router.module.ts | 17 + .../book-reader/book-reader.component.html | 134 + .../book-reader/book-reader.component.scss | 203 + .../book-reader/book-reader.component.ts | 811 + UI/Web/src/app/book-reader/book.service.ts | 41 + UI/Web/src/app/book-reader/safe-style.pipe.ts | 15 + .../carousel-reel.component.html | 19 + .../carousel-reel.component.scss | 49 + .../carousel-reel/carousel-reel.component.ts | 42 + UI/Web/src/app/carousel/carousel.module.ts | 18 + UI/Web/src/app/home/home.component.html | 11 + UI/Web/src/app/home/home.component.scss | 0 UI/Web/src/app/home/home.component.ts | 58 + .../library-detail.component.html | 11 + .../library-detail.component.scss | 11 + .../library-detail.component.ts | 91 + UI/Web/src/app/library/library.component.html | 33 + UI/Web/src/app/library/library.component.scss | 0 UI/Web/src/app/library/library.component.ts | 118 + .../app/manga-reader/_models/chapter-info.ts | 10 + .../app/manga-reader/_models/reader-enums.ts | 22 + .../app/manga-reader/_models/webtoon-image.ts | 4 + .../infinite-scroller.component.html | 15 + .../infinite-scroller.component.scss | 7 + .../infinite-scroller.component.ts | 414 + .../manga-reader/manga-reader.component.html | 130 + .../manga-reader/manga-reader.component.scss | 254 + .../manga-reader/manga-reader.component.ts | 951 + .../app/manga-reader/manga-reader.module.ts | 30 + .../manga-reader.router.module.ts | 17 + .../app/nav-header/nav-header.component.html | 80 + .../app/nav-header/nav-header.component.scss | 68 + .../app/nav-header/nav-header.component.ts | 101 + .../not-connected.component.html | 3 + .../not-connected.component.scss | 0 .../not-connected/not-connected.component.ts | 26 + .../person-badge/person-badge.component.html | 12 + .../person-badge/person-badge.component.scss | 24 + .../person-badge/person-badge.component.ts | 15 + .../recently-added.component.html | 12 + .../recently-added.component.scss | 0 .../recently-added.component.ts | 54 + .../series-detail.component.html | 124 + .../series-detail.component.scss | 30 + .../series-detail/series-detail.component.ts | 416 + .../card-details-modal.component.html | 65 + .../card-details-modal.component.scss | 3 + .../card-details-modal.component.ts | 66 + .../shared/_services/dom-helper.service.ts | 200 + .../app/shared/_services/download.service.ts | 124 + .../shared/_services/natural-sort.service.ts | 69 + .../app/shared/_services/utility.service.ts | 58 + UI/Web/src/app/shared/a11y-click.directive.ts | 42 + .../card-detail-layout.component.html | 64 + .../card-detail-layout.component.scss | 0 .../card-detail-layout.component.ts | 50 + .../card-actionables.component.html | 8 + .../card-actionables.component.scss | 3 + .../card-actionables.component.ts | 36 + .../shared/card-item/card-item.component.html | 29 + .../shared/card-item/card-item.component.scss | 99 + .../shared/card-item/card-item.component.ts | 79 + .../confirm-dialog/_models/confirm-button.ts | 4 + .../confirm-dialog/_models/confirm-config.ts | 8 + .../confirm-dialog.component.html | 16 + .../confirm-dialog.component.scss | 0 .../confirm-dialog.component.ts | 42 + UI/Web/src/app/shared/confirm.service.ts | 65 + .../shared/data-structures/circular-array.ts | 99 + .../src/app/shared/data-structures/queue.ts | 27 + .../src/app/shared/data-structures/stack.ts | 29 + .../app/shared/drawer/drawer.component.html | 15 + .../app/shared/drawer/drawer.component.scss | 56 + .../src/app/shared/drawer/drawer.component.ts | 31 + .../library-card/library-card.component.html | 15 + .../library-card/library-card.component.scss | 58 + .../library-card/library-card.component.ts | 77 + .../shared/read-more/read-more.component.html | 4 + .../shared/read-more/read-more.component.scss | 6 + .../shared/read-more/read-more.component.ts | 41 + .../register-member.component.html | 27 + .../register-member.component.scss | 0 .../register-member.component.ts | 44 + UI/Web/src/app/shared/safe-html.pipe.ts | 15 + .../series-card/series-card.component.html | 3 + .../series-card/series-card.component.scss | 0 .../series-card/series-card.component.ts | 146 + UI/Web/src/app/shared/shared.module.ts | 66 + .../app/shared/show-if-scrollbar.directive.ts | 22 + .../shared/tag-badge/tag-badge.component.html | 3 + .../shared/tag-badge/tag-badge.component.scss | 25 + .../shared/tag-badge/tag-badge.component.ts | 15 + UI/Web/src/app/shared/utils/clientUtils.ts | 21 + .../src/app/typeahead/typeahead-settings.ts | 52 + .../app/typeahead/typeahead.component.html | 37 + .../app/typeahead/typeahead.component.scss | 84 + .../src/app/typeahead/typeahead.component.ts | 387 + UI/Web/src/app/typeahead/typeahead.module.ts | 23 + .../app/user-login/user-login.component.html | 28 + .../app/user-login/user-login.component.scss | 68 + .../user-login/user-login.component.spec.ts | 94 + .../app/user-login/user-login.component.ts | 57 + .../user-preferences.component.html | 192 + .../user-preferences.component.scss | 3 + .../user-preferences.component.ts | 161 + UI/Web/src/assets/.gitkeep | 0 .../EBGaramond-Italic-VariableFont_wght.ttf | Bin 0 -> 829752 bytes .../EBGaramond-VariableFont_wght.ttf | Bin 0 -> 897728 bytes UI/Web/src/assets/fonts/EBGarmond/OFL.txt | 93 + .../assets/fonts/Fira_Sans/FiraSans-Black.ttf | Bin 0 -> 491084 bytes .../fonts/Fira_Sans/FiraSans-BlackItalic.ttf | Bin 0 -> 511300 bytes .../assets/fonts/Fira_Sans/FiraSans-Bold.ttf | Bin 0 -> 473492 bytes .../fonts/Fira_Sans/FiraSans-BoldItalic.ttf | Bin 0 -> 490668 bytes .../fonts/Fira_Sans/FiraSans-ExtraBold.ttf | Bin 0 -> 480720 bytes .../Fira_Sans/FiraSans-ExtraBoldItalic.ttf | Bin 0 -> 520684 bytes .../fonts/Fira_Sans/FiraSans-ExtraLight.ttf | Bin 0 -> 430924 bytes .../Fira_Sans/FiraSans-ExtraLightItalic.ttf | Bin 0 -> 446596 bytes .../fonts/Fira_Sans/FiraSans-Italic.ttf | Bin 0 -> 456032 bytes .../assets/fonts/Fira_Sans/FiraSans-Light.ttf | Bin 0 -> 433436 bytes .../fonts/Fira_Sans/FiraSans-LightItalic.ttf | Bin 0 -> 447028 bytes .../fonts/Fira_Sans/FiraSans-Medium.ttf | Bin 0 -> 441000 bytes .../fonts/Fira_Sans/FiraSans-MediumItalic.ttf | Bin 0 -> 456472 bytes .../fonts/Fira_Sans/FiraSans-Regular.ttf | Bin 0 -> 440560 bytes .../fonts/Fira_Sans/FiraSans-SemiBold.ttf | Bin 0 -> 472768 bytes .../Fira_Sans/FiraSans-SemiBoldItalic.ttf | Bin 0 -> 490340 bytes .../assets/fonts/Fira_Sans/FiraSans-Thin.ttf | Bin 0 -> 426428 bytes .../fonts/Fira_Sans/FiraSans-ThinItalic.ttf | Bin 0 -> 441000 bytes UI/Web/src/assets/fonts/Fira_Sans/OFL.txt | 93 + UI/Web/src/assets/fonts/Lato/Lato-Black.ttf | Bin 0 -> 69484 bytes .../assets/fonts/Lato/Lato-BlackItalic.ttf | Bin 0 -> 71948 bytes UI/Web/src/assets/fonts/Lato/Lato-Bold.ttf | Bin 0 -> 73316 bytes .../src/assets/fonts/Lato/Lato-BoldItalic.ttf | Bin 0 -> 77680 bytes UI/Web/src/assets/fonts/Lato/Lato-Italic.ttf | Bin 0 -> 75744 bytes UI/Web/src/assets/fonts/Lato/Lato-Light.ttf | Bin 0 -> 77192 bytes .../assets/fonts/Lato/Lato-LightItalic.ttf | Bin 0 -> 49064 bytes UI/Web/src/assets/fonts/Lato/Lato-Regular.ttf | Bin 0 -> 75136 bytes UI/Web/src/assets/fonts/Lato/Lato-Thin.ttf | Bin 0 -> 69968 bytes .../src/assets/fonts/Lato/Lato-ThinItalic.ttf | Bin 0 -> 48848 bytes UI/Web/src/assets/fonts/Lato/OFL.txt | 93 + .../LibreBaskerville-Bold.ttf | Bin 0 -> 155428 bytes .../LibreBaskerville-Italic.ttf | Bin 0 -> 172212 bytes .../LibreBaskerville-Regular.ttf | Bin 0 -> 154676 bytes .../assets/fonts/Libre_Baskerville/OFL.txt | 94 + .../Libre_Caslon/LibreCaslonText-Bold.ttf | Bin 0 -> 91056 bytes .../Libre_Caslon/LibreCaslonText-Italic.ttf | Bin 0 -> 100292 bytes .../Libre_Caslon/LibreCaslonText-Regular.ttf | Bin 0 -> 91220 bytes UI/Web/src/assets/fonts/Libre_Caslon/OFL.txt | 93 + .../fonts/Merriweather/Merriweather-Black.ttf | Bin 0 -> 141624 bytes .../Merriweather/Merriweather-BlackItalic.ttf | Bin 0 -> 142520 bytes .../fonts/Merriweather/Merriweather-Bold.ttf | Bin 0 -> 141964 bytes .../Merriweather/Merriweather-BoldItalic.ttf | Bin 0 -> 143736 bytes .../Merriweather/Merriweather-Italic.ttf | Bin 0 -> 142548 bytes .../fonts/Merriweather/Merriweather-Light.ttf | Bin 0 -> 148100 bytes .../Merriweather/Merriweather-LightItalic.ttf | Bin 0 -> 141956 bytes .../Merriweather/Merriweather-Regular.ttf | Bin 0 -> 149092 bytes UI/Web/src/assets/fonts/Merriweather/OFL.txt | 93 + .../fonts/Nanum_Gothic/NanumGothic-Bold.ttf | Bin 0 -> 4004184 bytes .../Nanum_Gothic/NanumGothic-ExtraBold.ttf | Bin 0 -> 3883296 bytes .../Nanum_Gothic/NanumGothic-Regular.ttf | Bin 0 -> 4091796 bytes UI/Web/src/assets/fonts/Nanum_Gothic/OFL.txt | 97 + UI/Web/src/assets/fonts/Oswald/OFL.txt | 93 + .../fonts/Oswald/Oswald-VariableFont_wght.ttf | Bin 0 -> 153152 bytes UI/Web/src/assets/fonts/Oswald/README.txt | 68 + .../fonts/Oswald/static/Oswald-Bold.ttf | Bin 0 -> 91676 bytes .../fonts/Oswald/static/Oswald-ExtraLight.ttf | Bin 0 -> 91364 bytes .../fonts/Oswald/static/Oswald-Light.ttf | Bin 0 -> 91500 bytes .../fonts/Oswald/static/Oswald-Medium.ttf | Bin 0 -> 91648 bytes .../fonts/Oswald/static/Oswald-Regular.ttf | Bin 0 -> 91400 bytes .../fonts/Oswald/static/Oswald-SemiBold.ttf | Bin 0 -> 91700 bytes UI/Web/src/assets/fonts/RocknRoll_One/OFL.txt | 93 + .../RocknRoll_One/RocknRollOne-Regular.ttf | Bin 0 -> 5374328 bytes UI/Web/src/assets/fonts/Spartan/OFL.txt | 93 + .../Spartan/Spartan-VariableFont_wght.ttf | Bin 0 -> 88048 bytes .../assets/icons/android-chrome-192x192.png | Bin 0 -> 10628 bytes .../assets/icons/android-chrome-256x256.png | Bin 0 -> 12035 bytes UI/Web/src/assets/icons/apple-touch-icon.png | Bin 0 -> 3268 bytes UI/Web/src/assets/icons/browserconfig.xml | 9 + UI/Web/src/assets/icons/favicon-16x16.png | Bin 0 -> 807 bytes UI/Web/src/assets/icons/favicon-32x32.png | Bin 0 -> 1292 bytes UI/Web/src/assets/icons/favicon.ico | Bin 0 -> 15086 bytes UI/Web/src/assets/icons/mstile-150x150.png | Bin 0 -> 6896 bytes .../assets/images/error-placeholder-min.png | Bin 0 -> 902 bytes .../src/assets/images/error-placeholder.png | Bin 0 -> 2607 bytes .../assets/images/error-placeholder2-min.png | Bin 0 -> 923 bytes .../images/error-placeholder2.dark-min.png | Bin 0 -> 440 bytes .../assets/images/error-placeholder2.dark.png | Bin 0 -> 1623 bytes .../src/assets/images/error-placeholder2.png | Bin 0 -> 2381 bytes .../assets/images/image-placeholder-min.png | Bin 0 -> 1062 bytes .../images/image-placeholder.dark-min.png | Bin 0 -> 744 bytes .../assets/images/image-placeholder.dark.png | Bin 0 -> 2099 bytes .../src/assets/images/image-placeholder.png | Bin 0 -> 2770 bytes .../src/assets/images/kavita-book-cropped.png | Bin 0 -> 4567 bytes UI/Web/src/assets/images/login-bg.jpg | Bin 0 -> 243627 bytes UI/Web/src/assets/images/logo.png | Bin 0 -> 8715 bytes UI/Web/src/assets/images/preset-light.png | Bin 0 -> 42165 bytes UI/Web/src/assets/themes/dark.scss | 179 + UI/Web/src/environments/environment.prod.ts | 4 + UI/Web/src/environments/environment.ts | 17 + UI/Web/src/index.html | 43 + UI/Web/src/main.ts | 14 + UI/Web/src/polyfills.ts | 67 + UI/Web/src/site.webmanifest | 19 + UI/Web/src/styles.scss | 116 + UI/Web/src/theme/_colors.scss | 7 + UI/Web/src/theme/_toastr.scss | 183 + UI/Web/tsconfig.app.json | 15 + UI/Web/tsconfig.json | 31 + UI/Web/tsconfig.spec.json | 18 + UI/Web/tslint.json | 155 + action-build.sh => action-build.sh.OLD | 0 build.sh | 16 +- docker-build.sh | 0 entrypoint.sh | 14 + monorepo-build.sh | 88 + 374 files changed, 53069 insertions(+), 617 deletions(-) create mode 100644 .browserslistrc create mode 100644 .editorconfig create mode 100644 .github/workflows/monorepo-test.yml create mode 100644 .github/workflows/sentry-release.yml create mode 100644 .vscode/settings.json create mode 100644 API/Controllers/.editorconfig rename API/Interfaces/{ => Services}/IBookService.cs (96%) create mode 100644 API/Interfaces/Services/IImageService.cs create mode 100644 API/Services/ImageService.cs create mode 100644 Kavita.Common/Extensions/EnumExtensions.cs create mode 100644 Kavita.Common/Extensions/PathExtensions.cs create mode 100644 UI/Web/LICENSE create mode 100644 UI/Web/README.md create mode 100644 UI/Web/angular.json create mode 100644 UI/Web/e2e/protractor.conf.js create mode 100644 UI/Web/e2e/src/app.e2e-spec.ts create mode 100644 UI/Web/e2e/src/app.po.ts create mode 100644 UI/Web/e2e/tsconfig.json create mode 100644 UI/Web/package-lock.json create mode 100644 UI/Web/package.json create mode 100644 UI/Web/setupJest.ts create mode 100644 UI/Web/src/app/_guards/admin.guard.ts create mode 100644 UI/Web/src/app/_guards/auth.guard.ts create mode 100644 UI/Web/src/app/_guards/library-access.guard.ts create mode 100644 UI/Web/src/app/_interceptors/error.interceptor.ts create mode 100644 UI/Web/src/app/_interceptors/jwt.interceptor.ts create mode 100644 UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.html create mode 100644 UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.scss create mode 100644 UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.ts create mode 100644 UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html create mode 100644 UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.scss create mode 100644 UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.ts create mode 100644 UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.html create mode 100644 UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.scss create mode 100644 UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.ts create mode 100644 UI/Web/src/app/_models/bookmark.ts create mode 100644 UI/Web/src/app/_models/chapter.ts create mode 100644 UI/Web/src/app/_models/client-info.ts create mode 100644 UI/Web/src/app/_models/collection-tag.ts create mode 100644 UI/Web/src/app/_models/details-version.ts create mode 100644 UI/Web/src/app/_models/in-progress-chapter.ts create mode 100644 UI/Web/src/app/_models/library.ts create mode 100644 UI/Web/src/app/_models/manga-file.ts create mode 100644 UI/Web/src/app/_models/manga-format.ts create mode 100644 UI/Web/src/app/_models/member.ts create mode 100644 UI/Web/src/app/_models/pagination.ts create mode 100644 UI/Web/src/app/_models/person.ts create mode 100644 UI/Web/src/app/_models/preferences/page-split-option.ts create mode 100644 UI/Web/src/app/_models/preferences/preferences.ts create mode 100644 UI/Web/src/app/_models/preferences/reader-mode.ts create mode 100644 UI/Web/src/app/_models/preferences/reading-direction.ts create mode 100644 UI/Web/src/app/_models/preferences/scaling-option.ts create mode 100644 UI/Web/src/app/_models/search-result.ts create mode 100644 UI/Web/src/app/_models/series-metadata.ts create mode 100644 UI/Web/src/app/_models/series.ts create mode 100644 UI/Web/src/app/_models/user.ts create mode 100644 UI/Web/src/app/_models/volume.ts create mode 100644 UI/Web/src/app/_services/account.service.ts create mode 100644 UI/Web/src/app/_services/action-factory.service.ts create mode 100644 UI/Web/src/app/_services/action.service.ts create mode 100644 UI/Web/src/app/_services/collection-tag.service.ts create mode 100644 UI/Web/src/app/_services/image.service.ts create mode 100644 UI/Web/src/app/_services/library.service.ts create mode 100644 UI/Web/src/app/_services/member.service.ts create mode 100644 UI/Web/src/app/_services/nav.service.ts create mode 100644 UI/Web/src/app/_services/reader.service.ts create mode 100644 UI/Web/src/app/_services/series.service.ts create mode 100644 UI/Web/src/app/_services/server.service.ts create mode 100644 UI/Web/src/app/_services/stats.service.ts create mode 100644 UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html create mode 100644 UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.scss create mode 100644 UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts create mode 100644 UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.html create mode 100644 UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.scss create mode 100644 UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts create mode 100644 UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.html create mode 100644 UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.scss create mode 100644 UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.ts create mode 100644 UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.html create mode 100644 UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.scss create mode 100644 UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.ts create mode 100644 UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.html create mode 100644 UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.scss create mode 100644 UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.ts create mode 100644 UI/Web/src/app/admin/_models/server-info.ts create mode 100644 UI/Web/src/app/admin/_models/server-settings.ts create mode 100644 UI/Web/src/app/admin/admin-routing.module.ts create mode 100644 UI/Web/src/app/admin/admin.module.ts create mode 100644 UI/Web/src/app/admin/dashboard/dashboard.component.html create mode 100644 UI/Web/src/app/admin/dashboard/dashboard.component.scss create mode 100644 UI/Web/src/app/admin/dashboard/dashboard.component.ts create mode 100644 UI/Web/src/app/admin/filter.pipe.ts create mode 100644 UI/Web/src/app/admin/manage-library/manage-library.component.html create mode 100644 UI/Web/src/app/admin/manage-library/manage-library.component.scss create mode 100644 UI/Web/src/app/admin/manage-library/manage-library.component.ts create mode 100644 UI/Web/src/app/admin/manage-settings/manage-settings.component.html create mode 100644 UI/Web/src/app/admin/manage-settings/manage-settings.component.scss create mode 100644 UI/Web/src/app/admin/manage-settings/manage-settings.component.ts create mode 100644 UI/Web/src/app/admin/manage-system/manage-system.component.html create mode 100644 UI/Web/src/app/admin/manage-system/manage-system.component.scss create mode 100644 UI/Web/src/app/admin/manage-system/manage-system.component.ts create mode 100644 UI/Web/src/app/admin/manage-users/manage-users.component.html create mode 100644 UI/Web/src/app/admin/manage-users/manage-users.component.scss create mode 100644 UI/Web/src/app/admin/manage-users/manage-users.component.ts create mode 100644 UI/Web/src/app/admin/settings.service.ts create mode 100644 UI/Web/src/app/all-collections/all-collections.component.html create mode 100644 UI/Web/src/app/all-collections/all-collections.component.scss create mode 100644 UI/Web/src/app/all-collections/all-collections.component.ts create mode 100644 UI/Web/src/app/app-routing.module.ts create mode 100644 UI/Web/src/app/app.component.html create mode 100644 UI/Web/src/app/app.component.scss create mode 100644 UI/Web/src/app/app.component.ts create mode 100644 UI/Web/src/app/app.module.ts create mode 100644 UI/Web/src/app/book-reader/_models/book-chapter-item.ts create mode 100644 UI/Web/src/app/book-reader/book-reader.module.ts create mode 100644 UI/Web/src/app/book-reader/book-reader.router.module.ts create mode 100644 UI/Web/src/app/book-reader/book-reader/book-reader.component.html create mode 100644 UI/Web/src/app/book-reader/book-reader/book-reader.component.scss create mode 100644 UI/Web/src/app/book-reader/book-reader/book-reader.component.ts create mode 100644 UI/Web/src/app/book-reader/book.service.ts create mode 100644 UI/Web/src/app/book-reader/safe-style.pipe.ts create mode 100644 UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.html create mode 100644 UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.scss create mode 100644 UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.ts create mode 100644 UI/Web/src/app/carousel/carousel.module.ts create mode 100644 UI/Web/src/app/home/home.component.html create mode 100644 UI/Web/src/app/home/home.component.scss create mode 100644 UI/Web/src/app/home/home.component.ts create mode 100644 UI/Web/src/app/library-detail/library-detail.component.html create mode 100644 UI/Web/src/app/library-detail/library-detail.component.scss create mode 100644 UI/Web/src/app/library-detail/library-detail.component.ts create mode 100644 UI/Web/src/app/library/library.component.html create mode 100644 UI/Web/src/app/library/library.component.scss create mode 100644 UI/Web/src/app/library/library.component.ts create mode 100644 UI/Web/src/app/manga-reader/_models/chapter-info.ts create mode 100644 UI/Web/src/app/manga-reader/_models/reader-enums.ts create mode 100644 UI/Web/src/app/manga-reader/_models/webtoon-image.ts create mode 100644 UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html create mode 100644 UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.scss create mode 100644 UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts create mode 100644 UI/Web/src/app/manga-reader/manga-reader.component.html create mode 100644 UI/Web/src/app/manga-reader/manga-reader.component.scss create mode 100644 UI/Web/src/app/manga-reader/manga-reader.component.ts create mode 100644 UI/Web/src/app/manga-reader/manga-reader.module.ts create mode 100644 UI/Web/src/app/manga-reader/manga-reader.router.module.ts create mode 100644 UI/Web/src/app/nav-header/nav-header.component.html create mode 100644 UI/Web/src/app/nav-header/nav-header.component.scss create mode 100644 UI/Web/src/app/nav-header/nav-header.component.ts create mode 100644 UI/Web/src/app/not-connected/not-connected.component.html create mode 100644 UI/Web/src/app/not-connected/not-connected.component.scss create mode 100644 UI/Web/src/app/not-connected/not-connected.component.ts create mode 100644 UI/Web/src/app/person-badge/person-badge.component.html create mode 100644 UI/Web/src/app/person-badge/person-badge.component.scss create mode 100644 UI/Web/src/app/person-badge/person-badge.component.ts create mode 100644 UI/Web/src/app/recently-added/recently-added.component.html create mode 100644 UI/Web/src/app/recently-added/recently-added.component.scss create mode 100644 UI/Web/src/app/recently-added/recently-added.component.ts create mode 100644 UI/Web/src/app/series-detail/series-detail.component.html create mode 100644 UI/Web/src/app/series-detail/series-detail.component.scss create mode 100644 UI/Web/src/app/series-detail/series-detail.component.ts create mode 100644 UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.html create mode 100644 UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.scss create mode 100644 UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts create mode 100644 UI/Web/src/app/shared/_services/dom-helper.service.ts create mode 100644 UI/Web/src/app/shared/_services/download.service.ts create mode 100644 UI/Web/src/app/shared/_services/natural-sort.service.ts create mode 100644 UI/Web/src/app/shared/_services/utility.service.ts create mode 100644 UI/Web/src/app/shared/a11y-click.directive.ts create mode 100644 UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.html create mode 100644 UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.scss create mode 100644 UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.ts create mode 100644 UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.html create mode 100644 UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.scss create mode 100644 UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.ts create mode 100644 UI/Web/src/app/shared/card-item/card-item.component.html create mode 100644 UI/Web/src/app/shared/card-item/card-item.component.scss create mode 100644 UI/Web/src/app/shared/card-item/card-item.component.ts create mode 100644 UI/Web/src/app/shared/confirm-dialog/_models/confirm-button.ts create mode 100644 UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts create mode 100644 UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html create mode 100644 UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.scss create mode 100644 UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.ts create mode 100644 UI/Web/src/app/shared/confirm.service.ts create mode 100644 UI/Web/src/app/shared/data-structures/circular-array.ts create mode 100644 UI/Web/src/app/shared/data-structures/queue.ts create mode 100644 UI/Web/src/app/shared/data-structures/stack.ts create mode 100644 UI/Web/src/app/shared/drawer/drawer.component.html create mode 100644 UI/Web/src/app/shared/drawer/drawer.component.scss create mode 100644 UI/Web/src/app/shared/drawer/drawer.component.ts create mode 100644 UI/Web/src/app/shared/library-card/library-card.component.html create mode 100644 UI/Web/src/app/shared/library-card/library-card.component.scss create mode 100644 UI/Web/src/app/shared/library-card/library-card.component.ts create mode 100644 UI/Web/src/app/shared/read-more/read-more.component.html create mode 100644 UI/Web/src/app/shared/read-more/read-more.component.scss create mode 100644 UI/Web/src/app/shared/read-more/read-more.component.ts create mode 100644 UI/Web/src/app/shared/register-member/register-member.component.html create mode 100644 UI/Web/src/app/shared/register-member/register-member.component.scss create mode 100644 UI/Web/src/app/shared/register-member/register-member.component.ts create mode 100644 UI/Web/src/app/shared/safe-html.pipe.ts create mode 100644 UI/Web/src/app/shared/series-card/series-card.component.html create mode 100644 UI/Web/src/app/shared/series-card/series-card.component.scss create mode 100644 UI/Web/src/app/shared/series-card/series-card.component.ts create mode 100644 UI/Web/src/app/shared/shared.module.ts create mode 100644 UI/Web/src/app/shared/show-if-scrollbar.directive.ts create mode 100644 UI/Web/src/app/shared/tag-badge/tag-badge.component.html create mode 100644 UI/Web/src/app/shared/tag-badge/tag-badge.component.scss create mode 100644 UI/Web/src/app/shared/tag-badge/tag-badge.component.ts create mode 100644 UI/Web/src/app/shared/utils/clientUtils.ts create mode 100644 UI/Web/src/app/typeahead/typeahead-settings.ts create mode 100644 UI/Web/src/app/typeahead/typeahead.component.html create mode 100644 UI/Web/src/app/typeahead/typeahead.component.scss create mode 100644 UI/Web/src/app/typeahead/typeahead.component.ts create mode 100644 UI/Web/src/app/typeahead/typeahead.module.ts create mode 100644 UI/Web/src/app/user-login/user-login.component.html create mode 100644 UI/Web/src/app/user-login/user-login.component.scss create mode 100644 UI/Web/src/app/user-login/user-login.component.spec.ts create mode 100644 UI/Web/src/app/user-login/user-login.component.ts create mode 100644 UI/Web/src/app/user-preferences/user-preferences.component.html create mode 100644 UI/Web/src/app/user-preferences/user-preferences.component.scss create mode 100644 UI/Web/src/app/user-preferences/user-preferences.component.ts create mode 100644 UI/Web/src/assets/.gitkeep create mode 100644 UI/Web/src/assets/fonts/EBGarmond/EBGaramond-Italic-VariableFont_wght.ttf create mode 100644 UI/Web/src/assets/fonts/EBGarmond/EBGaramond-VariableFont_wght.ttf create mode 100644 UI/Web/src/assets/fonts/EBGarmond/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Black.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-BlackItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Bold.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-BoldItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-ExtraBold.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-ExtraBoldItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-ExtraLight.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-ExtraLightItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Italic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Light.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-LightItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Medium.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-MediumItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-SemiBold.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-SemiBoldItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Thin.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/FiraSans-ThinItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Fira_Sans/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-Black.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-BlackItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-Bold.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-BoldItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-Italic.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-Light.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-LightItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-Thin.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/Lato-ThinItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Lato/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Libre_Baskerville/LibreBaskerville-Bold.ttf create mode 100644 UI/Web/src/assets/fonts/Libre_Baskerville/LibreBaskerville-Italic.ttf create mode 100644 UI/Web/src/assets/fonts/Libre_Baskerville/LibreBaskerville-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Libre_Baskerville/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Libre_Caslon/LibreCaslonText-Bold.ttf create mode 100644 UI/Web/src/assets/fonts/Libre_Caslon/LibreCaslonText-Italic.ttf create mode 100644 UI/Web/src/assets/fonts/Libre_Caslon/LibreCaslonText-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Libre_Caslon/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-Black.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-BlackItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-Bold.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-BoldItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-Italic.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-Light.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-LightItalic.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/Merriweather-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Merriweather/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Nanum_Gothic/NanumGothic-Bold.ttf create mode 100644 UI/Web/src/assets/fonts/Nanum_Gothic/NanumGothic-ExtraBold.ttf create mode 100644 UI/Web/src/assets/fonts/Nanum_Gothic/NanumGothic-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Nanum_Gothic/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Oswald/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Oswald/Oswald-VariableFont_wght.ttf create mode 100644 UI/Web/src/assets/fonts/Oswald/README.txt create mode 100644 UI/Web/src/assets/fonts/Oswald/static/Oswald-Bold.ttf create mode 100644 UI/Web/src/assets/fonts/Oswald/static/Oswald-ExtraLight.ttf create mode 100644 UI/Web/src/assets/fonts/Oswald/static/Oswald-Light.ttf create mode 100644 UI/Web/src/assets/fonts/Oswald/static/Oswald-Medium.ttf create mode 100644 UI/Web/src/assets/fonts/Oswald/static/Oswald-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Oswald/static/Oswald-SemiBold.ttf create mode 100644 UI/Web/src/assets/fonts/RocknRoll_One/OFL.txt create mode 100644 UI/Web/src/assets/fonts/RocknRoll_One/RocknRollOne-Regular.ttf create mode 100644 UI/Web/src/assets/fonts/Spartan/OFL.txt create mode 100644 UI/Web/src/assets/fonts/Spartan/Spartan-VariableFont_wght.ttf create mode 100644 UI/Web/src/assets/icons/android-chrome-192x192.png create mode 100644 UI/Web/src/assets/icons/android-chrome-256x256.png create mode 100644 UI/Web/src/assets/icons/apple-touch-icon.png create mode 100644 UI/Web/src/assets/icons/browserconfig.xml create mode 100644 UI/Web/src/assets/icons/favicon-16x16.png create mode 100644 UI/Web/src/assets/icons/favicon-32x32.png create mode 100644 UI/Web/src/assets/icons/favicon.ico create mode 100644 UI/Web/src/assets/icons/mstile-150x150.png create mode 100644 UI/Web/src/assets/images/error-placeholder-min.png create mode 100644 UI/Web/src/assets/images/error-placeholder.png create mode 100644 UI/Web/src/assets/images/error-placeholder2-min.png create mode 100644 UI/Web/src/assets/images/error-placeholder2.dark-min.png create mode 100644 UI/Web/src/assets/images/error-placeholder2.dark.png create mode 100644 UI/Web/src/assets/images/error-placeholder2.png create mode 100644 UI/Web/src/assets/images/image-placeholder-min.png create mode 100644 UI/Web/src/assets/images/image-placeholder.dark-min.png create mode 100644 UI/Web/src/assets/images/image-placeholder.dark.png create mode 100644 UI/Web/src/assets/images/image-placeholder.png create mode 100644 UI/Web/src/assets/images/kavita-book-cropped.png create mode 100644 UI/Web/src/assets/images/login-bg.jpg create mode 100644 UI/Web/src/assets/images/logo.png create mode 100644 UI/Web/src/assets/images/preset-light.png create mode 100644 UI/Web/src/assets/themes/dark.scss create mode 100644 UI/Web/src/environments/environment.prod.ts create mode 100644 UI/Web/src/environments/environment.ts create mode 100644 UI/Web/src/index.html create mode 100644 UI/Web/src/main.ts create mode 100644 UI/Web/src/polyfills.ts create mode 100644 UI/Web/src/site.webmanifest create mode 100644 UI/Web/src/styles.scss create mode 100644 UI/Web/src/theme/_colors.scss create mode 100644 UI/Web/src/theme/_toastr.scss create mode 100644 UI/Web/tsconfig.app.json create mode 100644 UI/Web/tsconfig.json create mode 100644 UI/Web/tsconfig.spec.json create mode 100644 UI/Web/tslint.json rename action-build.sh => action-build.sh.OLD (100%) mode change 100755 => 100644 mode change 100644 => 100755 build.sh mode change 100644 => 100755 docker-build.sh mode change 100644 => 100755 entrypoint.sh create mode 100755 monorepo-build.sh diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 000000000..427441dc9 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,17 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR +not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..23e3b61fc --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.cs] +indent_size = 3 + +[*.ts] +quote_type = single +indent_size = 2 + + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fc6133f9e..231622b99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,4 +57,4 @@ jobs: dotnet build --configuration Release .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" - name: Test - run: dotnet test --no-restore --verbosity normal \ No newline at end of file + run: dotnet test --no-restore --verbosity normal diff --git a/.github/workflows/monorepo-test.yml b/.github/workflows/monorepo-test.yml new file mode 100644 index 000000000..0408c0956 --- /dev/null +++ b/.github/workflows/monorepo-test.yml @@ -0,0 +1,38 @@ +name: Monorepo Build Test + +on: + push: + branches: + - 'feature/monorepo' + +jobs: + docker: + runs-on: ubuntu-latest + steps: + + - name: Check Out Repo + uses: actions/checkout@v2 + + - name: NodeJS to Compile WebUI + uses: actions/setup-node@v2.1.5 + with: + node-version: '14' + - run: | + + cd UI/Web || exit + echo 'Installing web dependencies' + npm install + + echo 'Building UI' + npm run prod + + echo 'Copying back to Kavita wwwroot' + rsync -a dist/ ../../API/wwwroot/ + + cd ../ || exit + + - name: Compile dotnet app + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '5.0.x' + - run: ./monorepo-build.sh diff --git a/.github/workflows/nightly-docker.yml b/.github/workflows/nightly-docker.yml index c39180b0c..8f36afd82 100644 --- a/.github/workflows/nightly-docker.yml +++ b/.github/workflows/nightly-docker.yml @@ -13,20 +13,13 @@ jobs: - name: Check Out Repo uses: actions/checkout@v2 - - name: Check Out WebUI - uses: actions/checkout@v2 - with: - repository: Kareadita/Kavita-webui - ref: develop - path: Kavita-webui/ - - name: NodeJS to Compile WebUI uses: actions/setup-node@v2.1.5 with: node-version: '14' - run: | - cd Kavita-webui/ || exit + cd UI/Web || exit echo 'Installing web dependencies' npm install @@ -34,7 +27,7 @@ jobs: npm run prod echo 'Copying back to Kavita wwwroot' - rsync -a dist/ ../API/wwwroot/ + rsync -a dist/ ../../API/wwwroot/ cd ../ || exit @@ -42,8 +35,8 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: '5.0.x' - - run: ./action-build.sh - + - run: ./monorepo-build.sh + - name: Login to Docker Hub uses: docker/login-action@v1 with: diff --git a/.github/workflows/sentry-release.yml b/.github/workflows/sentry-release.yml new file mode 100644 index 000000000..990dbc444 --- /dev/null +++ b/.github/workflows/sentry-release.yml @@ -0,0 +1,42 @@ +name: Sentry Release +on: + push: + branches: [ main, develop, feature/sentry-release ] + +jobs: + build: + name: Setup Sentry CLI + runs-on: ubuntu-latest + steps: + - uses: mathieu-bour/setup-sentry-cli@1.2.0 + with: + version: latest + token: ${{ SECRETS.SENTRY_TOKEN }} + organization: kavita-7n + project: angular + - name: Checkout + uses: actions/checkout@v2 + - name: Install NodeJS + uses: actions/setup-node@v2 + with: + node-version: '12' + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install Dependencies + run: npm install + - name: Build Angular + run: npm run prod + - name: get-npm-version + id: package-version + uses: martinbeentjes/npm-get-version-action@master + - name: Create Release + run: sentry-cli releases new ${{ steps.package-version.outputs.current-version }} + - name: Upload Source Maps + run: sentry-cli releases files ${{ steps.package-version.outputs.current-version }} upload-sourcemaps ./dist + - name: Finalize Release + run: sentry-cli releases finalize ${{ steps.package-version.outputs.current-version }} diff --git a/.github/workflows/stable-docker.yml b/.github/workflows/stable-docker.yml index 3ac5b818f..daeae851d 100644 --- a/.github/workflows/stable-docker.yml +++ b/.github/workflows/stable-docker.yml @@ -13,20 +13,13 @@ jobs: - name: Check Out Repo uses: actions/checkout@v2 - - name: Check Out WebUI - uses: actions/checkout@v2 - with: - repository: Kareadita/Kavita-webui - ref: main - path: Kavita-webui/ - - name: NodeJS to Compile WebUI uses: actions/setup-node@v2.1.5 with: node-version: '14' - run: | - cd Kavita-webui/ || exit + cd UI/Web || exit echo 'Installing web dependencies' npm install @@ -34,7 +27,7 @@ jobs: npm run prod echo 'Copying back to Kavita wwwroot' - rsync -a dist/ ../API/wwwroot/ + rsync -a dist/ ../../API/wwwroot/ cd ../ || exit @@ -42,7 +35,7 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: '5.0.x' - - run: ./action-build.sh + - run: ./monorepo-build.sh - name: Login to Docker Hub uses: docker/login-action@v1 diff --git a/.gitignore b/.gitignore index 8db0960dc..2e5f40f53 100644 --- a/.gitignore +++ b/.gitignore @@ -435,11 +435,54 @@ $RECYCLE.BIN/ ## ## Visual Studio Code ## +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/UI/Web/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + +ssl/ # App specific appsettings.json @@ -454,4 +497,5 @@ cache/ /API/temp/ _temp/ _output/ -stats/ \ No newline at end of file +stats/ +UI/Web/dist/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..017eebcf1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,50 @@ +{ + "better-comments.tags": [ + + { + "tag": "note", + "color": "#FF2D00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": true, + "italic": false + }, + { + "tag": "?", + "color": "#3498DB", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "//", + "color": "#474747", + "strikethrough": true, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + }, + { + "tag": "todo", + "color": "#FF8C00", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": true, + "italic": false + }, + { + "tag": "*", + "color": "#98C379", + "strikethrough": false, + "underline": false, + "backgroundColor": "transparent", + "bold": false, + "italic": false + } + ] +} \ No newline at end of file diff --git a/API.Tests/Extensions/SeriesExtensionsTests.cs b/API.Tests/Extensions/SeriesExtensionsTests.cs index 6631757d6..35054770b 100644 --- a/API.Tests/Extensions/SeriesExtensionsTests.cs +++ b/API.Tests/Extensions/SeriesExtensionsTests.cs @@ -1,5 +1,6 @@ using API.Entities; using API.Extensions; +using API.Parser; using Xunit; namespace API.Tests.Extensions @@ -15,6 +16,7 @@ namespace API.Tests.Extensions [InlineData(new [] {"Salem's Lot", "Salem's Lot", "Salem's Lot"}, new [] {"salem's lot"}, true)] // Different normalizations pass as we check normalization against an on-the-fly calculation so we don't delete series just because we change how normalization works [InlineData(new [] {"Salem's Lot", "Salem's Lot", "Salem's Lot", "salems lot"}, new [] {"salem's lot"}, true)] + [InlineData(new [] {"Rent-a-Girlfriend", "Rent-a-Girlfriend", "Kanojo, Okarishimasu", "rentagirlfriend"}, new [] {"Kanojo, Okarishimasu"}, true)] public void NameInListTest(string[] seriesInput, string[] list, bool expected) { var series = new Series() @@ -25,8 +27,30 @@ namespace API.Tests.Extensions NormalizedName = seriesInput.Length == 4 ? seriesInput[3] : API.Parser.Parser.Normalize(seriesInput[0]), Metadata = new SeriesMetadata() }; - + Assert.Equal(expected, series.NameInList(list)); } + + [Theory] + [InlineData(new [] {"Darker than Black", "Darker Than Black", "Darker than Black"}, "Darker than Black", true)] + [InlineData(new [] {"Rent-a-Girlfriend", "Rent-a-Girlfriend", "Kanojo, Okarishimasu", "rentagirlfriend"}, "Kanojo, Okarishimasu", true)] + [InlineData(new [] {"Rent-a-Girlfriend", "Rent-a-Girlfriend", "Kanojo, Okarishimasu", "rentagirlfriend"}, "Rent", false)] + public void NameInParserInfoTest(string[] seriesInput, string parserSeries, bool expected) + { + var series = new Series() + { + Name = seriesInput[0], + LocalizedName = seriesInput[1], + OriginalName = seriesInput[2], + NormalizedName = seriesInput.Length == 4 ? seriesInput[3] : API.Parser.Parser.Normalize(seriesInput[0]), + Metadata = new SeriesMetadata() + }; + var info = new ParserInfo(); + info.Series = parserSeries; + + Assert.Equal(expected, series.NameInParserInfo(info)); + } + + } -} \ No newline at end of file +} diff --git a/API.Tests/Parser/MangaParserTests.cs b/API.Tests/Parser/MangaParserTests.cs index 1123404b0..b03fda33a 100644 --- a/API.Tests/Parser/MangaParserTests.cs +++ b/API.Tests/Parser/MangaParserTests.cs @@ -9,7 +9,7 @@ namespace API.Tests.Parser public class MangaParserTests { private readonly ITestOutputHelper _testOutputHelper; - + public MangaParserTests(ITestOutputHelper testOutputHelper) { _testOutputHelper = testOutputHelper; @@ -68,7 +68,7 @@ namespace API.Tests.Parser { Assert.Equal(expected, API.Parser.Parser.ParseVolume(filename)); } - + [Theory] [InlineData("Killing Bites Vol. 0001 Ch. 0001 - Galactica Scanlations (gb)", "Killing Bites")] [InlineData("My Girlfriend Is Shobitch v01 - ch. 09 - pg. 008.png", "My Girlfriend Is Shobitch")] @@ -146,11 +146,19 @@ namespace API.Tests.Parser [InlineData("Kodoja #001 (March 2016)", "Kodoja")] [InlineData("Boku No Kokoro No Yabai Yatsu - Chapter 054 I Prayed At The Shrine (V0).cbz", "Boku No Kokoro No Yabai Yatsu")] [InlineData("Kiss x Sis - Ch.36 - A Cold Home Visit.cbz", "Kiss x Sis")] + [InlineData("Seraph of the End - Vampire Reign 093 (2020) (Digital) (LuCaZ)", "Seraph of the End - Vampire Reign")] + [InlineData("Grand Blue Dreaming - SP02 Extra (2019) (Digital) (danke-Empire).cbz", "Grand Blue Dreaming")] + [InlineData("Yuusha Ga Shinda! - Vol.tbd Chapter 27.001 V2 Infection ①.cbz", "Yuusha Ga Shinda!")] + [InlineData("Seraph of the End - Vampire Reign 093 (2020) (Digital) (LuCaZ).cbz", "Seraph of the End - Vampire Reign")] + [InlineData("Getsuyoubi no Tawawa - Ch. 001 - Ai-chan, Part 1", "Getsuyoubi no Tawawa")] + [InlineData("Please Go Home, Akutsu-San! - Chapter 038.5 - Volume Announcement.cbz", "Please Go Home, Akutsu-San!")] + [InlineData("Killing Bites - Vol 11 Chapter 050 Save Me, Nunupi!.cbz", "Killing Bites")] + [InlineData("Mad Chimera World - Volume 005 - Chapter 026.cbz", "Mad Chimera World")] public void ParseSeriesTest(string filename, string expected) { Assert.Equal(expected, API.Parser.Parser.ParseSeries(filename)); } - + [Theory] [InlineData("Killing Bites Vol. 0001 Ch. 0001 - Galactica Scanlations (gb)", "1")] [InlineData("My Girlfriend Is Shobitch v01 - ch. 09 - pg. 008.png", "9")] @@ -206,13 +214,14 @@ namespace API.Tests.Parser [InlineData("Kiss x Sis - Ch.00 - Let's Start from 0.cbz", "0")] [InlineData("[Hidoi]_Amaenaideyo_MS_vol01_chp02.rar", "2")] [InlineData("Okusama wa Shougakusei c003 (v01) [bokuwaNEET]", "3")] - [InlineData("Kiss x Sis - Ch.15 - The Angst of a 15 Year Old Boy.cbz", "15")] [InlineData("Tomogui Kyoushitsu - Chapter 006 Game 005 - Fingernails On Right Hand (Part 002).cbz", "6")] [InlineData("Noblesse - Episode 406 (52 Pages).7z", "406")] [InlineData("X-Men v1 #201 (September 2007).cbz", "201")] [InlineData("Kodoja #001 (March 2016)", "1")] [InlineData("Noblesse - Episode 429 (74 Pages).7z", "429")] [InlineData("Boku No Kokoro No Yabai Yatsu - Chapter 054 I Prayed At The Shrine (V0).cbz", "54")] + [InlineData("Ijousha No Ai - Vol.01 Chapter 029 8 Years Ago", "29")] + [InlineData("Kedouin Makoto - Corpse Party Musume, Chapter 09.cbz", "9")] public void ParseChaptersTest(string filename, string expected) { Assert.Equal(expected, API.Parser.Parser.ParseChapter(filename)); @@ -249,7 +258,7 @@ namespace API.Tests.Parser { Assert.Equal(expected, !string.IsNullOrEmpty(API.Parser.Parser.ParseMangaSpecial(input))); } - + [Theory] [InlineData("image.png", MangaFormat.Image)] [InlineData("image.cbz", MangaFormat.Archive)] @@ -266,6 +275,32 @@ namespace API.Tests.Parser Assert.Equal(expected, API.Parser.Parser.ParseMangaSpecial(inputFile)); } + private static ParserInfo CreateParserInfo(string series, string chapter, string volume, bool isSpecial = false) + { + return new ParserInfo() + { + Chapters = chapter, + Volumes = volume, + IsSpecial = isSpecial, + Series = series, + }; + } + + [Theory] + [InlineData("/manga/Btooom!/Vol.1/Chapter 1/1.cbz", "Btooom!~1~1")] + [InlineData("/manga/Btooom!/Vol.1 Chapter 2/1.cbz", "Btooom!~1~2")] + public void ParseFromFallbackFoldersTest(string inputFile, string expectedParseInfo) + { + const string rootDirectory = "/manga/"; + var tokens = expectedParseInfo.Split("~"); + var actual = new ParserInfo {Chapters = "0", Volumes = "0"}; + API.Parser.Parser.ParseFromFallbackFolders(inputFile, rootDirectory, LibraryType.Manga, ref actual); + Assert.Equal(tokens[0], actual.Series); + Assert.Equal(tokens[1], actual.Volumes); + Assert.Equal(tokens[2], actual.Chapters); + + } + [Fact] public void ParseInfoTest() { @@ -278,7 +313,7 @@ namespace API.Tests.Parser Chapters = "76", Filename = "Mujaki no Rakuen Vol12 ch76.cbz", Format = MangaFormat.Archive, FullFilePath = filepath }); - + filepath = @"E:/Manga/Shimoneta to Iu Gainen ga Sonzai Shinai Taikutsu na Sekai Man-hen/Vol 1.cbz"; expected.Add(filepath, new ParserInfo { @@ -286,7 +321,7 @@ namespace API.Tests.Parser Chapters = "0", Filename = "Vol 1.cbz", Format = MangaFormat.Archive, FullFilePath = filepath }); - + filepath = @"E:\Manga\Beelzebub\Beelzebub_01_[Noodles].zip"; expected.Add(filepath, new ParserInfo { @@ -294,7 +329,7 @@ namespace API.Tests.Parser Chapters = "1", Filename = "Beelzebub_01_[Noodles].zip", Format = MangaFormat.Archive, FullFilePath = filepath }); - + filepath = @"E:\Manga\Ichinensei ni Nacchattara\Ichinensei_ni_Nacchattara_v01_ch01_[Taruby]_v1.1.zip"; expected.Add(filepath, new ParserInfo { @@ -309,8 +344,8 @@ namespace API.Tests.Parser Series = "Tenjo Tenge", Volumes = "1", Edition = "Full Contact Edition", Chapters = "0", Filename = "Tenjo Tenge {Full Contact Edition} v01 (2011) (Digital) (ASTC).cbz", Format = MangaFormat.Archive, FullFilePath = filepath - }); - + }); + filepath = @"E:\Manga\Akame ga KILL! ZERO (2016-2019) (Digital) (LuCaZ)\Akame ga KILL! ZERO v01 (2016) (Digital) (LuCaZ).cbz"; expected.Add(filepath, new ParserInfo { @@ -318,7 +353,7 @@ namespace API.Tests.Parser Chapters = "0", Filename = "Akame ga KILL! ZERO v01 (2016) (Digital) (LuCaZ).cbz", Format = MangaFormat.Archive, FullFilePath = filepath }); - + filepath = @"E:\Manga\Dorohedoro\Dorohedoro v01 (2010) (Digital) (LostNerevarine-Empire).cbz"; expected.Add(filepath, new ParserInfo { @@ -326,7 +361,7 @@ namespace API.Tests.Parser Chapters = "0", Filename = "Dorohedoro v01 (2010) (Digital) (LostNerevarine-Empire).cbz", Format = MangaFormat.Archive, FullFilePath = filepath }); - + filepath = @"E:\Manga\APOSIMZ\APOSIMZ 040 (2020) (Digital) (danke-Empire).cbz"; expected.Add(filepath, new ParserInfo { @@ -334,7 +369,7 @@ namespace API.Tests.Parser Chapters = "40", Filename = "APOSIMZ 040 (2020) (Digital) (danke-Empire).cbz", Format = MangaFormat.Archive, FullFilePath = filepath }); - + filepath = @"E:\Manga\Corpse Party Musume\Kedouin Makoto - Corpse Party Musume, Chapter 09.cbz"; expected.Add(filepath, new ParserInfo { @@ -342,7 +377,7 @@ namespace API.Tests.Parser Chapters = "9", Filename = "Kedouin Makoto - Corpse Party Musume, Chapter 09.cbz", Format = MangaFormat.Archive, FullFilePath = filepath }); - + filepath = @"E:\Manga\Goblin Slayer\Goblin Slayer - Brand New Day 006.5 (2019) (Digital) (danke-Empire).cbz"; expected.Add(filepath, new ParserInfo { @@ -351,6 +386,22 @@ namespace API.Tests.Parser FullFilePath = filepath }); + filepath = @"E:\Manga\Summer Time Rendering\Specials\Record 014 (between chapter 083 and ch084) SP11.cbr"; + expected.Add(filepath, new ParserInfo + { + Series = "Summer Time Rendering", Volumes = "0", Edition = "", + Chapters = "0", Filename = "Record 014 (between chapter 083 and ch084) SP11.cbr", Format = MangaFormat.Archive, + FullFilePath = filepath, IsSpecial = true + }); + + filepath = @"E:\Manga\Seraph of the End\Seraph of the End - Vampire Reign 093 (2020) (Digital) (LuCaZ).cbz"; + expected.Add(filepath, new ParserInfo + { + Series = "Seraph of the End - Vampire Reign", Volumes = "0", Edition = "", + Chapters = "93", Filename = "Seraph of the End - Vampire Reign 093 (2020) (Digital) (LuCaZ).cbz", Format = MangaFormat.Archive, + FullFilePath = filepath, IsSpecial = false + }); + foreach (var file in expected.Keys) { @@ -380,4 +431,4 @@ namespace API.Tests.Parser } } } -} \ No newline at end of file +} diff --git a/API.Tests/Services/BookServiceTests.cs b/API.Tests/Services/BookServiceTests.cs index ecc374830..d0cc29040 100644 --- a/API.Tests/Services/BookServiceTests.cs +++ b/API.Tests/Services/BookServiceTests.cs @@ -1,5 +1,5 @@ using System.IO; -using API.Interfaces; +using API.Interfaces.Services; using API.Services; using Microsoft.Extensions.Logging; using NSubstitute; @@ -28,4 +28,4 @@ namespace API.Tests.Services } } -} \ No newline at end of file +} diff --git a/API.Tests/Services/DirectoryServiceTests.cs b/API.Tests/Services/DirectoryServiceTests.cs index 3754e910a..09d4b0556 100644 --- a/API.Tests/Services/DirectoryServiceTests.cs +++ b/API.Tests/Services/DirectoryServiceTests.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Linq; using API.Services; @@ -26,7 +27,7 @@ namespace API.Tests.Services var files = new List(); var fileCount = DirectoryService.TraverseTreeParallelForEach(testDirectory, s => files.Add(s), API.Parser.Parser.ArchiveFileExtensions, _logger); - + Assert.Equal(28, fileCount); } @@ -37,7 +38,7 @@ namespace API.Tests.Services var files = _directoryService.GetFiles(testDirectory, @"file\d*.txt"); Assert.Equal(2, files.Count()); } - + [Fact] public void GetFiles_TopLevel_ShouldBeEmpty_Test() { @@ -45,7 +46,7 @@ namespace API.Tests.Services var files = _directoryService.GetFiles(testDirectory); Assert.Empty(files); } - + [Fact] public void GetFilesWithExtensions_ShouldBeEmpty_Test() { @@ -53,7 +54,7 @@ namespace API.Tests.Services var files = _directoryService.GetFiles(testDirectory, "*.txt"); Assert.Empty(files); } - + [Fact] public void GetFilesWithExtensions_Test() { @@ -61,7 +62,7 @@ namespace API.Tests.Services var files = _directoryService.GetFiles(testDirectory, ".cbz|.rar"); Assert.Equal(3, files.Count()); } - + [Fact] public void GetFilesWithExtensions_BadDirectory_ShouldBeEmpty_Test() { @@ -78,7 +79,7 @@ namespace API.Tests.Services Assert.Contains(dirs, s => s.Contains("regex")); } - + [Fact] public void ListDirectory_NoSubDirectory_Test() { @@ -93,10 +94,21 @@ namespace API.Tests.Services [InlineData("C:/Manga", "C:/Manga/Love Hina/Specials/Omake/", "Omake,Specials,Love Hina")] [InlineData("C:/Manga", @"C:\Manga\Love Hina\Specials\Omake\", "Omake,Specials,Love Hina")] [InlineData(@"/manga/", @"/manga/Love Hina/Specials/Omake/", "Omake,Specials,Love Hina")] + [InlineData(@"/manga/", @"/manga/", "")] + [InlineData(@"E:\test", @"E:\test\Sweet X Trouble\Sweet X Trouble - Chapter 001.cbz", "Sweet X Trouble")] + [InlineData(@"C:\/mount/gdrive/Library/Test Library/Comics/", @"C:\/mount/gdrive/Library/Test Library/Comics\godzilla rivals vs hedorah\vol 1\", "vol 1,godzilla rivals vs hedorah")] + [InlineData(@"/manga/", @"/manga/Btooom!/Vol.1 Chapter 2/1.cbz", "Vol.1 Chapter 2,Btooom!")] + [InlineData(@"C:/", @"C://Btooom!/Vol.1 Chapter 2/1.cbz", "Vol.1 Chapter 2,Btooom!")] + [InlineData(@"C:\\", @"C://Btooom!/Vol.1 Chapter 2/1.cbz", "Vol.1 Chapter 2,Btooom!")] + [InlineData(@"C://mount/gdrive/Library/Test Library/Comics", @"C://mount/gdrive/Library/Test Library/Comics/Dragon Age/Test", "Test,Dragon Age")] public void GetFoldersTillRoot_Test(string rootPath, string fullpath, string expectedArray) { var expected = expectedArray.Split(","); + if (expectedArray.Equals(string.Empty)) + { + expected = Array.Empty(); + } Assert.Equal(expected, DirectoryService.GetFoldersTillRoot(rootPath, fullpath)); } } -} \ No newline at end of file +} diff --git a/API.Tests/Services/ScannerServiceTests.cs b/API.Tests/Services/ScannerServiceTests.cs index 7c3c47355..e8034cdca 100644 --- a/API.Tests/Services/ScannerServiceTests.cs +++ b/API.Tests/Services/ScannerServiceTests.cs @@ -20,24 +20,24 @@ using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.Extensions.Logging; using NSubstitute; using Xunit; -using Xunit.Abstractions; namespace API.Tests.Services { public class ScannerServiceTests : IDisposable { - private readonly ITestOutputHelper _testOutputHelper; private readonly ScannerService _scannerService; private readonly ILogger _logger = Substitute.For>(); private readonly IArchiveService _archiveService = Substitute.For(); private readonly IBookService _bookService = Substitute.For(); + private readonly IImageService _imageService = Substitute.For(); private readonly ILogger _metadataLogger = Substitute.For>(); + private readonly IDirectoryService _directoryService = Substitute.For(); private readonly DbConnection _connection; private readonly DataContext _context; - - public ScannerServiceTests(ITestOutputHelper testOutputHelper) + + public ScannerServiceTests() { var contextOptions = new DbContextOptionsBuilder() .UseSqlite(CreateInMemoryDatabase()) @@ -46,21 +46,20 @@ namespace API.Tests.Services _context = new DataContext(contextOptions); Task.Run(SeedDb).GetAwaiter().GetResult(); - - + + //BackgroundJob.Enqueue is what I need to mock or something (it's static...) - // ICacheService cacheService, ILogger logger, IScannerService scannerService, - // IUnitOfWork unitOfWork, IMetadataService metadataService, IBackupService backupService, ICleanupService cleanupService, + // ICacheService cacheService, ILogger logger, IScannerService scannerService, + // IUnitOfWork unitOfWork, IMetadataService metadataService, IBackupService backupService, ICleanupService cleanupService, // IBackgroundJobClient jobClient //var taskScheduler = new TaskScheduler(Substitute.For(), Substitute.For>(), Substitute.For<) - - + + // Substitute.For>() - Not needed because only for UserService IUnitOfWork unitOfWork = new UnitOfWork(_context, Substitute.For(), null); - - - _testOutputHelper = testOutputHelper; - IMetadataService metadataService = Substitute.For(unitOfWork, _metadataLogger, _archiveService, _bookService); + + + IMetadataService metadataService = Substitute.For(unitOfWork, _metadataLogger, _archiveService, _bookService, _directoryService, _imageService); _scannerService = new ScannerService(unitOfWork, _logger, _archiveService, metadataService, _bookService); } @@ -90,12 +89,12 @@ namespace API.Tests.Services // // var series = _unitOfWork.LibraryRepository.GetLibraryForIdAsync(1).Result.Series; // } - + [Fact] public void FindSeriesNotOnDisk_Should_RemoveNothing_Test() { var infos = new Dictionary>(); - + AddToParsedInfo(infos, new ParserInfo() {Series = "Darker than Black"}); AddToParsedInfo(infos, new ParserInfo() {Series = "Cage of Eden", Volumes = "1"}); AddToParsedInfo(infos, new ParserInfo() {Series = "Cage of Eden", Volumes = "10"}); @@ -140,7 +139,7 @@ namespace API.Tests.Services { Series = parsedInfoName }); - + Assert.Equal(expected, actualName); } @@ -158,7 +157,7 @@ namespace API.Tests.Services EntityFactory.CreateSeries("Darker than Black Vol 1"), }; existingSeries = ScannerService.RemoveMissingSeries(existingSeries, missingSeries, out var removeCount).ToList(); - + Assert.DoesNotContain(missingSeries[0].Name, existingSeries.Select(s => s.Name)); Assert.Equal(missingSeries.Count, removeCount); } @@ -194,12 +193,12 @@ namespace API.Tests.Services collectedSeries[info.Series] = list; } - + } - + } - - + + // [Fact] // public void ExistingOrDefault_Should_BeFromLibrary() @@ -257,7 +256,7 @@ namespace API.Tests.Services // _testOutputHelper.WriteLine(_libraryMock.ToString()); Assert.True(true); } - + private static DbConnection CreateInMemoryDatabase() { var connection = new SqliteConnection("Filename=:memory:"); @@ -269,4 +268,4 @@ namespace API.Tests.Services public void Dispose() => _connection.Dispose(); } -} \ No newline at end of file +} diff --git a/API/API.csproj b/API/API.csproj index 50a464d0b..c912a6b01 100644 --- a/API/API.csproj +++ b/API/API.csproj @@ -16,7 +16,7 @@ Kavita kareadita.github.io - Copyright 2020-$([System.DateTime]::Now.ToString('yyyy')) kareadita.github.io (GNU General Public v3) + Copyright 2020-$([System.DateTime]::Now.ToString('yyyy')) kavitareader.com (GNU General Public v3) 0.4.1 @@ -50,9 +50,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -61,6 +61,12 @@ + + + + + + @@ -207,8 +213,4 @@ <_ContentIncludedByDefault Remove="wwwroot\vendor.6b2a0912ae80e6fd297f.js.map" /> - - - - diff --git a/API/Comparators/ChapterSortComparer.cs b/API/Comparators/ChapterSortComparer.cs index ce7e2f374..a56693fca 100644 --- a/API/Comparators/ChapterSortComparer.cs +++ b/API/Comparators/ChapterSortComparer.cs @@ -15,4 +15,25 @@ namespace API.Comparators return x.CompareTo(y); } } -} \ No newline at end of file + + /// + /// This is a special case comparer used exclusively for sorting chapters within a single Volume for reading order. + /// + /// Volume 10 has "Series - Vol 10" and "Series - Vol 10 Chapter 81". In this case, for reading order, the order is Vol 10, Vol 10 Chapter 81. + /// This is represented by Chapter 0, Chapter 81. + /// + /// + public class ChapterSortComparerZeroFirst : IComparer + { + public int Compare(double x, double y) + { + if (x == 0.0 && y == 0.0) return 0; + // if x is 0, it comes first + if (x == 0.0) return -1; + // if y is 0, it comes first + if (y == 0.0) return 1; + + return x.CompareTo(y); + } + } +} diff --git a/API/Controllers/.editorconfig b/API/Controllers/.editorconfig new file mode 100644 index 000000000..e69de29bb diff --git a/API/Controllers/BookController.cs b/API/Controllers/BookController.cs index e5a980467..84f9338d7 100644 --- a/API/Controllers/BookController.cs +++ b/API/Controllers/BookController.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using API.DTOs; using API.Extensions; using API.Interfaces; +using API.Interfaces.Services; using API.Services; using HtmlAgilityPack; using Microsoft.AspNetCore.Mvc; diff --git a/API/Controllers/LibraryController.cs b/API/Controllers/LibraryController.cs index 352b9f873..4d47e3f06 100644 --- a/API/Controllers/LibraryController.cs +++ b/API/Controllers/LibraryController.cs @@ -25,8 +25,8 @@ namespace API.Controllers private readonly ITaskScheduler _taskScheduler; private readonly IUnitOfWork _unitOfWork; - public LibraryController(IDirectoryService directoryService, - ILogger logger, IMapper mapper, ITaskScheduler taskScheduler, + public LibraryController(IDirectoryService directoryService, + ILogger logger, IMapper mapper, ITaskScheduler taskScheduler, IUnitOfWork unitOfWork) { _directoryService = directoryService; @@ -35,7 +35,7 @@ namespace API.Controllers _taskScheduler = taskScheduler; _unitOfWork = unitOfWork; } - + /// /// Creates a new Library. Upon library creation, adds new library to all Admin accounts. /// @@ -49,7 +49,7 @@ namespace API.Controllers { return BadRequest("Library name already exists. Please choose a unique name to the server."); } - + var library = new Library { Name = createLibraryDto.Name, @@ -58,14 +58,14 @@ namespace API.Controllers }; _unitOfWork.LibraryRepository.Add(library); - + var admins = (await _unitOfWork.UserRepository.GetAdminUsersAsync()).ToList(); foreach (var admin in admins) { admin.Libraries ??= new List(); admin.Libraries.Add(library); } - + if (!await _unitOfWork.CommitAsync()) return BadRequest("There was a critical issue. Please try again."); @@ -92,7 +92,7 @@ namespace API.Controllers return Ok(_directoryService.ListDirectory(path)); } - + [HttpGet] public async Task>> GetLibraries() { @@ -105,10 +105,10 @@ namespace API.Controllers { var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(updateLibraryForUserDto.Username); if (user == null) return BadRequest("Could not validate user"); - + var libraryString = String.Join(",", updateLibraryForUserDto.SelectedLibraries.Select(x => x.Name)); _logger.LogInformation("Granting user {UserName} access to: {Libraries}", updateLibraryForUserDto.Username, libraryString); - + var allLibraries = await _unitOfWork.LibraryRepository.GetLibrariesAsync(); foreach (var library in allLibraries) { @@ -117,16 +117,16 @@ namespace API.Controllers var libraryIsSelected = updateLibraryForUserDto.SelectedLibraries.Any(l => l.Id == library.Id); if (libraryContainsUser && !libraryIsSelected) { - // Remove + // Remove library.AppUsers.Remove(user); } else if (!libraryContainsUser && libraryIsSelected) { library.AppUsers.Add(user); - } - + } + } - + if (!_unitOfWork.HasChanges()) { _logger.LogInformation("Added: {SelectedLibraries} to {Username}",libraryString, updateLibraryForUserDto.Username); @@ -138,8 +138,8 @@ namespace API.Controllers _logger.LogInformation("Added: {SelectedLibraries} to {Username}",libraryString, updateLibraryForUserDto.Username); return Ok(_mapper.Map(user)); } - - + + return BadRequest("There was a critical issue. Please try again."); } @@ -150,7 +150,7 @@ namespace API.Controllers _taskScheduler.ScanLibrary(libraryId); return Ok(); } - + [Authorize(Policy = "RequireAdminRole")] [HttpPost("refresh-metadata")] public ActionResult RefreshMetadata(int libraryId) @@ -164,7 +164,7 @@ namespace API.Controllers { return Ok(await _unitOfWork.LibraryRepository.GetLibraryDtosForUsernameAsync(User.GetUsername())); } - + [Authorize(Policy = "RequireAdminRole")] [HttpDelete("delete")] public async Task> DeleteLibrary(int libraryId) @@ -176,13 +176,25 @@ namespace API.Controllers var chapterIds = await _unitOfWork.SeriesRepository.GetChapterIdsForSeriesAsync(seriesIds); - var result = await _unitOfWork.LibraryRepository.DeleteLibrary(libraryId); - if (result && chapterIds.Any()) + + try { - _taskScheduler.CleanupChapters(chapterIds); + var library = await _unitOfWork.LibraryRepository.GetLibraryForIdAsync(libraryId); + _unitOfWork.LibraryRepository.Delete(library); + await _unitOfWork.CommitAsync(); + + if (chapterIds.Any()) + { + _taskScheduler.CleanupChapters(chapterIds); + } + return Ok(true); + } + catch (Exception ex) + { + _logger.LogError(ex, "There was a critical error trying to delete the library"); + await _unitOfWork.RollbackAsync(); + return Ok(false); } - - return Ok(result); } [Authorize(Policy = "RequireAdminRole")] @@ -204,20 +216,20 @@ namespace API.Controllers { _taskScheduler.ScanLibrary(library.Id, true); } - + return Ok(); } - + [HttpGet("search")] public async Task>> Search(string queryString) { queryString = queryString.Replace(@"%", ""); - + var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); // Get libraries user has access to var libraries = (await _unitOfWork.LibraryRepository.GetLibrariesForUserIdAsync(user.Id)).ToList(); - + if (!libraries.Any()) return BadRequest("User does not have access to any libraries"); var series = await _unitOfWork.SeriesRepository.SearchSeries(libraries.Select(l => l.Id).ToArray(), queryString); @@ -231,4 +243,4 @@ namespace API.Controllers return Ok(await _unitOfWork.LibraryRepository.GetLibraryTypeAsync(libraryId)); } } -} \ No newline at end of file +} diff --git a/API/Controllers/ReaderController.cs b/API/Controllers/ReaderController.cs index b9bc15fb7..bfdacf704 100644 --- a/API/Controllers/ReaderController.cs +++ b/API/Controllers/ReaderController.cs @@ -22,6 +22,7 @@ namespace API.Controllers private readonly ILogger _logger; private readonly IUnitOfWork _unitOfWork; private readonly ChapterSortComparer _chapterSortComparer = new ChapterSortComparer(); + private readonly ChapterSortComparerZeroFirst _chapterSortComparerForInChapterSorting = new ChapterSortComparerZeroFirst(); public ReaderController(IDirectoryService directoryService, ICacheService cacheService, ILogger logger, IUnitOfWork unitOfWork) @@ -44,7 +45,7 @@ namespace API.Controllers var content = await _directoryService.ReadFileAsync(path); var format = Path.GetExtension(path).Replace(".", ""); - + // Calculates SHA1 Hash for byte[] Response.AddCacheHeader(content); @@ -54,6 +55,7 @@ namespace API.Controllers [HttpGet("chapter-info")] public async Task> GetChapterInfo(int chapterId) { + // PERF: Write this in one DB call var chapter = await _cacheService.Ensure(chapterId); if (chapter == null) return BadRequest("Could not find Chapter"); var volume = await _unitOfWork.SeriesRepository.GetVolumeAsync(chapter.VolumeId); @@ -108,7 +110,7 @@ namespace API.Controllers foreach (var chapter in volume.Chapters) { var userProgress = user.Progresses.SingleOrDefault(x => x.ChapterId == chapter.Id && x.AppUserId == user.Id); - if (userProgress == null) // I need to get all chapters and generate new user progresses for them? + if (userProgress == null) // I need to get all chapters and generate new user progresses for them? { user.Progresses.Add(new AppUserProgress { @@ -126,18 +128,18 @@ namespace API.Controllers } } } - + _unitOfWork.UserRepository.Update(user); if (await _unitOfWork.CommitAsync()) { return Ok(); } - - + + return BadRequest("There was an issue saving progress"); } - + [HttpPost("mark-unread")] public async Task MarkUnread(MarkReadDto markReadDto) { @@ -167,15 +169,15 @@ namespace API.Controllers } } } - + _unitOfWork.UserRepository.Update(user); if (await _unitOfWork.CommitAsync()) { return Ok(); } - - + + return BadRequest("There was an issue saving progress"); } @@ -183,8 +185,7 @@ namespace API.Controllers public async Task MarkVolumeAsRead(MarkVolumeReadDto markVolumeReadDto) { var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); - _logger.LogDebug("Saving {UserName} progress for Volume {VolumeID} to read", user.UserName, markVolumeReadDto.VolumeId); - + var chapters = await _unitOfWork.VolumeRepository.GetChaptersAsync(markVolumeReadDto.VolumeId); foreach (var chapter in chapters) { @@ -208,7 +209,7 @@ namespace API.Controllers userProgress.VolumeId = markVolumeReadDto.VolumeId; } } - + _unitOfWork.UserRepository.Update(user); if (await _unitOfWork.CommitAsync()) @@ -217,14 +218,13 @@ namespace API.Controllers } return BadRequest("Could not save progress"); - } + } [HttpPost("bookmark")] public async Task Bookmark(BookmarkDto bookmarkDto) { var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); - _logger.LogDebug("Saving {UserName} progress for Chapter {ChapterId} to page {PageNum}", user.UserName, bookmarkDto.ChapterId, bookmarkDto.PageNum); - + // Don't let user bookmark past total pages. var chapter = await _unitOfWork.VolumeRepository.GetChapterAsync(bookmarkDto.ChapterId); if (bookmarkDto.PageNum > chapter.Pages) @@ -236,8 +236,8 @@ namespace API.Controllers { return BadRequest("Can't bookmark less than 0"); } - - + + user.Progresses ??= new List(); var userProgress = user.Progresses.SingleOrDefault(x => x.ChapterId == bookmarkDto.ChapterId && x.AppUserId == user.Id); @@ -261,7 +261,7 @@ namespace API.Controllers userProgress.BookScrollId = bookmarkDto.BookScrollId; userProgress.LastModified = DateTime.Now; } - + _unitOfWork.UserRepository.Update(user); if (await _unitOfWork.CommitAsync()) @@ -275,6 +275,9 @@ namespace API.Controllers /// /// Returns the next logical chapter from the series. /// + /// + /// V1 → V2 → V3 chapter 0 → V3 chapter 10 → SP 01 → SP 02 + /// /// /// /// @@ -288,6 +291,7 @@ namespace API.Controllers var currentChapter = await _unitOfWork.VolumeRepository.GetChapterAsync(currentChapterId); if (currentVolume.Number == 0) { + // Handle specials var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer), currentChapter.Number); if (chapterId > 0) return Ok(chapterId); } @@ -295,14 +299,24 @@ namespace API.Controllers foreach (var volume in volumes) { if (volume.Number == currentVolume.Number && volume.Chapters.Count > 1) - { - var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer), currentChapter.Number); + { + // Handle Chapters within current Volume + // In this case, i need 0 first because 0 represents a full volume file. + var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparerForInChapterSorting), currentChapter.Number); if (chapterId > 0) return Ok(chapterId); } - + if (volume.Number == currentVolume.Number + 1) { - return Ok(volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).FirstOrDefault()?.Id); + // Handle Chapters within next Volume + // ! When selecting the chapter for the next volume, we need to make sure a c0 comes before a c1+ + var chapters = volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).ToList(); + if (currentChapter.Number.Equals("0") && chapters.Last().Number.Equals("0")) + { + return chapters.Last().Id; + } + + return Ok(chapters.FirstOrDefault()?.Id); } } return Ok(-1); @@ -311,7 +325,8 @@ namespace API.Controllers private static int GetNextChapterId(IEnumerable chapters, string currentChapterNumber) { var next = false; - foreach (var chapter in chapters) + var chaptersList = chapters.ToList(); + foreach (var chapter in chaptersList) { if (next) { @@ -326,6 +341,9 @@ namespace API.Controllers /// /// Returns the previous logical chapter from the series. /// + /// + /// V1 ← V2 ← V3 chapter 0 ← V3 chapter 10 ← SP 01 ← SP 02 + /// /// /// /// @@ -337,7 +355,7 @@ namespace API.Controllers var volumes = await _unitOfWork.SeriesRepository.GetVolumesDtoAsync(seriesId, user.Id); var currentVolume = await _unitOfWork.SeriesRepository.GetVolumeAsync(volumeId); var currentChapter = await _unitOfWork.VolumeRepository.GetChapterAsync(currentChapterId); - + if (currentVolume.Number == 0) { var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).Reverse(), currentChapter.Number); @@ -348,16 +366,16 @@ namespace API.Controllers { if (volume.Number == currentVolume.Number) { - var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).Reverse(), currentChapter.Number); + var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparerForInChapterSorting).Reverse(), currentChapter.Number); if (chapterId > 0) return Ok(chapterId); } if (volume.Number == currentVolume.Number - 1) { - return Ok(volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).LastOrDefault()?.Id); + return Ok(volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparerForInChapterSorting).LastOrDefault()?.Id); } } return Ok(-1); } } -} \ No newline at end of file +} diff --git a/API/Controllers/SeriesController.cs b/API/Controllers/SeriesController.cs index 3780538ad..a0dba1e6c 100644 --- a/API/Controllers/SeriesController.cs +++ b/API/Controllers/SeriesController.cs @@ -26,24 +26,24 @@ namespace API.Controllers _taskScheduler = taskScheduler; _unitOfWork = unitOfWork; } - + [HttpGet] public async Task>> GetSeriesForLibrary(int libraryId, [FromQuery] UserParams userParams) { var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); var series = await _unitOfWork.SeriesRepository.GetSeriesDtoForLibraryIdAsync(libraryId, user.Id, userParams); - + // Apply progress/rating information (I can't work out how to do this in initial query) if (series == null) return BadRequest("Could not get series for library"); await _unitOfWork.SeriesRepository.AddSeriesModifiers(user.Id, series); - + Response.AddPaginationHeader(series.CurrentPage, series.PageSize, series.TotalCount, series.TotalPages); - + return Ok(series); } - + [HttpGet("{seriesId}")] public async Task> GetSeries(int seriesId) { @@ -59,7 +59,7 @@ namespace API.Controllers var chapterIds = (await _unitOfWork.SeriesRepository.GetChapterIdsForSeriesAsync(new []{seriesId})); _logger.LogInformation("Series {SeriesId} is being deleted by {UserName}", seriesId, username); var result = await _unitOfWork.SeriesRepository.DeleteSeriesAsync(seriesId); - + if (result) { _taskScheduler.CleanupChapters(chapterIds); @@ -78,22 +78,22 @@ namespace API.Controllers var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); return Ok(await _unitOfWork.SeriesRepository.GetVolumesDtoAsync(seriesId, user.Id)); } - + [HttpGet("volume")] public async Task> GetVolume(int volumeId) { var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); return Ok(await _unitOfWork.SeriesRepository.GetVolumeDtoAsync(volumeId, user.Id)); } - + [HttpGet("chapter")] public async Task> GetChapter(int chapterId) { return Ok(await _unitOfWork.VolumeRepository.GetChapterDtoAsync(chapterId)); } - - + + [HttpPost("update-rating")] public async Task UpdateSeriesRating(UpdateSeriesRatingDto updateSeriesRatingDto) @@ -105,13 +105,13 @@ namespace API.Controllers userRating.Rating = updateSeriesRatingDto.UserRating; userRating.Review = updateSeriesRatingDto.UserReview; userRating.SeriesId = updateSeriesRatingDto.SeriesId; - + if (userRating.Id == 0) { user.Ratings ??= new List(); user.Ratings.Add(userRating); } - + _unitOfWork.UserRepository.Update(user); if (!await _unitOfWork.CommitAsync()) return BadRequest("There was a critical error."); @@ -127,7 +127,7 @@ namespace API.Controllers var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(updateSeries.Id); if (series == null) return BadRequest("Series does not exist"); - + if (series.Name != updateSeries.Name && await _unitOfWork.SeriesRepository.DoesSeriesNameExistInLibrary(updateSeries.Name)) { return BadRequest("A series already exists in this library with this name. Series Names must be unique to a library."); @@ -143,7 +143,7 @@ namespace API.Controllers { return Ok(); } - + return BadRequest("There was an error with updating the series"); } @@ -180,13 +180,21 @@ namespace API.Controllers return Ok(); } + [Authorize(Policy = "RequireAdminRole")] + [HttpPost("scan")] + public ActionResult ScanSeries(RefreshSeriesDto refreshSeriesDto) + { + _taskScheduler.ScanSeries(refreshSeriesDto.LibraryId, refreshSeriesDto.SeriesId); + return Ok(); + } + [HttpGet("metadata")] public async Task> GetSeriesMetadata(int seriesId) { var metadata = await _unitOfWork.SeriesRepository.GetSeriesMetadata(seriesId); return Ok(metadata); } - + [HttpPost("metadata")] public async Task UpdateSeriesMetadata(UpdateSeriesMetadataDto updateSeriesMetadataDto) { @@ -221,7 +229,7 @@ namespace API.Controllers var existingTag = series.Metadata.CollectionTags.SingleOrDefault(t => t.Title == tag.Title); if (existingTag != null) { - // Update existingTag + // Update existingTag existingTag.Promoted = tag.Promoted; existingTag.Title = tag.Title; existingTag.NormalizedTitle = Parser.Parser.Normalize(tag.Title).ToUpper(); @@ -263,17 +271,17 @@ namespace API.Controllers var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); var series = await _unitOfWork.SeriesRepository.GetSeriesDtoForCollectionAsync(collectionId, user.Id, userParams); - + // Apply progress/rating information (I can't work out how to do this in initial query) if (series == null) return BadRequest("Could not get series for collection"); await _unitOfWork.SeriesRepository.AddSeriesModifiers(user.Id, series); - + Response.AddPaginationHeader(series.CurrentPage, series.PageSize, series.TotalCount, series.TotalPages); - + return Ok(series); } - - + + } -} \ No newline at end of file +} diff --git a/API/Controllers/ServerController.cs b/API/Controllers/ServerController.cs index 398de3efc..c68416ba9 100644 --- a/API/Controllers/ServerController.cs +++ b/API/Controllers/ServerController.cs @@ -1,9 +1,12 @@ using System; using System.IO; using System.Threading.Tasks; +using API.DTOs; using API.Extensions; using API.Interfaces.Services; +using API.Services; using Kavita.Common; +using Kavita.Common.EnvironmentInfo; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; @@ -30,16 +33,26 @@ namespace API.Controllers _backupService = backupService; _archiveService = archiveService; } - + [HttpPost("restart")] public ActionResult RestartServer() { _logger.LogInformation("{UserName} is restarting server from admin dashboard", User.GetUsername()); - + _applicationLifetime.StopApplication(); return Ok(); } + /// + /// Returns non-sensitive information about the current system + /// + /// + [HttpGet("server-info")] + public ActionResult GetVersion() + { + return Ok(StatsService.GetServerInfo()); + } + [HttpGet("logs")] public async Task GetLogs() { @@ -47,14 +60,14 @@ namespace API.Controllers try { var (fileBytes, zipPath) = await _archiveService.CreateZipForDownload(files, "logs"); - return File(fileBytes, "application/zip", Path.GetFileName(zipPath)); + return File(fileBytes, "application/zip", Path.GetFileName(zipPath)); } catch (KavitaException ex) { return BadRequest(ex.Message); } } - - + + } -} \ No newline at end of file +} diff --git a/API/Controllers/SettingsController.cs b/API/Controllers/SettingsController.cs index 8677074ab..2ead0916c 100644 --- a/API/Controllers/SettingsController.cs +++ b/API/Controllers/SettingsController.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading.Tasks; using API.Data; using API.DTOs; @@ -9,6 +10,7 @@ using API.Extensions; using API.Helpers.Converters; using API.Interfaces; using Kavita.Common; +using Kavita.Common.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; @@ -31,7 +33,7 @@ namespace API.Controllers _taskScheduler = taskScheduler; _configuration = configuration; } - + [HttpGet("")] public async Task> GetSettings() { @@ -40,7 +42,7 @@ namespace API.Controllers settingsDto.LoggingLevel = Configuration.GetLogLevel(Program.GetAppSettingFilename()); return Ok(settingsDto); } - + [HttpPost("")] public async Task> UpdateSettings(ServerSettingDto updateSettingsDto) { @@ -58,7 +60,7 @@ namespace API.Controllers // We do not allow CacheDirectory changes, so we will ignore. var currentSettings = await _unitOfWork.SettingsRepository.GetSettingsAsync(); - + var logLevelOptions = new LogLevelOptions(); _configuration.GetSection("Logging:LogLevel").Bind(logLevelOptions); @@ -75,7 +77,7 @@ namespace API.Controllers setting.Value = updateSettingsDto.TaskScan; _unitOfWork.SettingsRepository.Update(setting); } - + if (setting.Key == ServerSettingKey.Port && updateSettingsDto.Port + "" != setting.Value) { setting.Value = updateSettingsDto.Port + ""; @@ -83,14 +85,14 @@ namespace API.Controllers Configuration.UpdatePort(Program.GetAppSettingFilename(), updateSettingsDto.Port); _unitOfWork.SettingsRepository.Update(setting); } - + if (setting.Key == ServerSettingKey.LoggingLevel && updateSettingsDto.LoggingLevel + "" != setting.Value) { setting.Value = updateSettingsDto.LoggingLevel + ""; Configuration.UpdateLogLevel(Program.GetAppSettingFilename(), updateSettingsDto.LoggingLevel); _unitOfWork.SettingsRepository.Update(setting); } - + if (setting.Key == ServerSettingKey.AllowStatCollection && updateSettingsDto.AllowStatCollection + "" != setting.Value) { setting.Value = updateSettingsDto.AllowStatCollection + ""; @@ -105,7 +107,7 @@ namespace API.Controllers } } } - + _configuration.GetSection("Logging:LogLevel:Default").Value = updateSettingsDto.LoggingLevel + ""; if (!_unitOfWork.HasChanges()) return Ok("Nothing was updated"); @@ -119,23 +121,23 @@ namespace API.Controllers _taskScheduler.ScheduleTasks(); return Ok(updateSettingsDto); } - + [HttpGet("task-frequencies")] public ActionResult> GetTaskFrequencies() { return Ok(CronConverter.Options); } - + [HttpGet("library-types")] public ActionResult> GetLibraryTypes() { - return Ok(Enum.GetNames(typeof(LibraryType))); + return Ok(Enum.GetValues().Select(t => t.ToDescription())); } - + [HttpGet("log-levels")] public ActionResult> GetLogLevels() { return Ok(new [] {"Trace", "Debug", "Information", "Warning", "Critical"}); } } -} \ No newline at end of file +} diff --git a/API/Data/LibraryRepository.cs b/API/Data/LibraryRepository.cs index 0af1f6760..23ad6ea76 100644 --- a/API/Data/LibraryRepository.cs +++ b/API/Data/LibraryRepository.cs @@ -21,7 +21,7 @@ namespace API.Data _context = context; _mapper = mapper; } - + public void Add(Library library) { _context.Library.Add(library); @@ -32,6 +32,11 @@ namespace API.Data _context.Entry(library).State = EntityState.Modified; } + public void Delete(Library library) + { + _context.Library.Remove(library); + } + public async Task> GetLibraryDtosForUsernameAsync(string userName) { return await _context.Library @@ -43,7 +48,7 @@ namespace API.Data .AsSingleQuery() .ToListAsync(); } - + public async Task> GetLibrariesAsync() { return await _context.Library @@ -101,7 +106,7 @@ namespace API.Data /// public async Task GetFullLibraryForIdAsync(int libraryId) { - + return await _context.Library .Where(x => x.Id == libraryId) .Include(f => f.Folders) @@ -114,7 +119,29 @@ namespace API.Data .AsSplitQuery() .SingleAsync(); } - + + /// + /// This is a heavy call, pulls all entities for a Library, except this version only grabs for one series id + /// + /// + /// + /// + public async Task GetFullLibraryForIdAsync(int libraryId, int seriesId) + { + + return await _context.Library + .Where(x => x.Id == libraryId) + .Include(f => f.Folders) + .Include(l => l.Series.Where(s => s.Id == seriesId)) + .ThenInclude(s => s.Metadata) + .Include(l => l.Series.Where(s => s.Id == seriesId)) + .ThenInclude(s => s.Volumes) + .ThenInclude(v => v.Chapters) + .ThenInclude(c => c.Files) + .AsSplitQuery() + .SingleAsync(); + } + public async Task LibraryExists(string libraryName) { return await _context.Library @@ -131,7 +158,7 @@ namespace API.Data .ProjectTo(_mapper.ConfigurationProvider) .ToListAsync(); } - - + + } -} \ No newline at end of file +} diff --git a/API/Entities/Enums/LibraryType.cs b/API/Entities/Enums/LibraryType.cs index ea91e16f3..baaceb9ca 100644 --- a/API/Entities/Enums/LibraryType.cs +++ b/API/Entities/Enums/LibraryType.cs @@ -9,6 +9,10 @@ namespace API.Entities.Enums [Description("Comic")] Comic = 1, [Description("Book")] - Book = 2 + Book = 2, + [Description("Images (Manga)")] + MangaImages = 3, + [Description("Images (Comic)")] + ComicImages = 4 } -} \ No newline at end of file +} diff --git a/API/Entities/Enums/ReaderMode.cs b/API/Entities/Enums/ReaderMode.cs index 04156df24..01ff7878f 100644 --- a/API/Entities/Enums/ReaderMode.cs +++ b/API/Entities/Enums/ReaderMode.cs @@ -5,10 +5,13 @@ namespace API.Entities.Enums public enum ReaderMode { [Description("Left and Right")] + // ReSharper disable once InconsistentNaming MANGA_LR = 0, [Description("Up and Down")] + // ReSharper disable once InconsistentNaming MANGA_UP = 1, [Description("Webtoon")] + // ReSharper disable once InconsistentNaming WEBTOON = 2 } -} \ No newline at end of file +} diff --git a/API/Entities/Genre.cs b/API/Entities/Genre.cs index 743c2b793..51d9a9dbc 100644 --- a/API/Entities/Genre.cs +++ b/API/Entities/Genre.cs @@ -7,7 +7,7 @@ namespace API.Entities { public int Id { get; set; } public string Name { get; set; } - // TODO: MetadataUpdate add ProviderId + // MetadataUpdate add ProviderId [ConcurrencyCheck] public uint RowVersion { get; set; } @@ -17,4 +17,4 @@ namespace API.Entities RowVersion++; } } -} \ No newline at end of file +} diff --git a/API/Entities/SeriesMetadata.cs b/API/Entities/SeriesMetadata.cs index e848c696e..ec8955e1e 100644 --- a/API/Entities/SeriesMetadata.cs +++ b/API/Entities/SeriesMetadata.cs @@ -9,17 +9,13 @@ namespace API.Entities public class SeriesMetadata : IHasConcurrencyToken { public int Id { get; set; } - /// - /// Publisher of book or manga/comic - /// - //public string Publisher { get; set; } - + public ICollection CollectionTags { get; set; } - + // Relationship public Series Series { get; set; } public int SeriesId { get; set; } - + [ConcurrencyCheck] public uint RowVersion { get; set; } @@ -28,4 +24,4 @@ namespace API.Entities RowVersion++; } } -} \ No newline at end of file +} diff --git a/API/Extensions/ApplicationServiceExtensions.cs b/API/Extensions/ApplicationServiceExtensions.cs index e713acbe1..0a43db49e 100644 --- a/API/Extensions/ApplicationServiceExtensions.cs +++ b/API/Extensions/ApplicationServiceExtensions.cs @@ -16,7 +16,7 @@ namespace API.Extensions { public static class ApplicationServiceExtensions { - public static IServiceCollection AddApplicationServices(this IServiceCollection services, IConfiguration config, IWebHostEnvironment env) + public static void AddApplicationServices(this IServiceCollection services, IConfiguration config, IWebHostEnvironment env) { services.AddAutoMapper(typeof(AutoMapperProfiles).Assembly); services.AddScoped(); @@ -31,19 +31,13 @@ namespace API.Extensions services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddSqLite(config, env); - - services.AddLogging(loggingBuilder => - { - var loggingSection = config.GetSection("Logging"); - loggingBuilder.AddFile(loggingSection); - }); - - return services; + services.AddLogging(config); } - private static IServiceCollection AddSqLite(this IServiceCollection services, IConfiguration config, + private static void AddSqLite(this IServiceCollection services, IConfiguration config, IWebHostEnvironment env) { services.AddDbContext(options => @@ -51,8 +45,15 @@ namespace API.Extensions options.UseSqlite(config.GetConnectionString("DefaultConnection")); options.EnableSensitiveDataLogging(env.IsDevelopment() || Configuration.GetLogLevel(Program.GetAppSettingFilename()).Equals("Debug")); }); + } - return services; + private static void AddLogging(this IServiceCollection services, IConfiguration config) + { + services.AddLogging(loggingBuilder => + { + var loggingSection = config.GetSection("Logging"); + loggingBuilder.AddFile(loggingSection); + }); } } -} \ No newline at end of file +} diff --git a/API/Extensions/DirectoryInfoExtensions.cs b/API/Extensions/DirectoryInfoExtensions.cs index 0eaf6c00a..892c690b3 100644 --- a/API/Extensions/DirectoryInfoExtensions.cs +++ b/API/Extensions/DirectoryInfoExtensions.cs @@ -9,14 +9,26 @@ namespace API.Extensions private static readonly NaturalSortComparer Comparer = new NaturalSortComparer(); public static void Empty(this DirectoryInfo directory) { - foreach(FileInfo file in directory.EnumerateFiles()) file.Delete(); - foreach(DirectoryInfo subDirectory in directory.EnumerateDirectories()) subDirectory.Delete(true); + // NOTE: We have this in DirectoryService.Empty(), do we need this here? + foreach(FileInfo file in directory.EnumerateFiles()) file.Delete(); + foreach(DirectoryInfo subDirectory in directory.EnumerateDirectories()) subDirectory.Delete(true); + } + + public static void RemoveNonImages(this DirectoryInfo directory) + { + foreach (var file in directory.EnumerateFiles()) + { + if (!Parser.Parser.IsImage(file.FullName)) + { + file.Delete(); + } + } } /// /// Flattens all files in subfolders to the passed directory recursively. - /// - /// + /// + /// /// foo /// ├── 1.txt /// ├── 2.txt @@ -26,7 +38,7 @@ namespace API.Extensions /// ├── 1.txt /// ├── 2.txt /// └── 5.txt - /// + /// /// becomes: /// foo /// ├── 1.txt @@ -49,7 +61,7 @@ namespace API.Extensions if (!root.FullName.Equals(directory.FullName)) { var fileIndex = 1; - + foreach (var file in directory.EnumerateFiles().OrderBy(file => file.FullName, Comparer)) { if (file.Directory == null) continue; @@ -63,11 +75,11 @@ namespace API.Extensions directoryIndex++; } - + foreach (var subDirectory in directory.EnumerateDirectories()) { FlattenDirectory(root, subDirectory, ref directoryIndex); } } } -} \ No newline at end of file +} diff --git a/API/Extensions/SeriesExtensions.cs b/API/Extensions/SeriesExtensions.cs index 29f495d76..376abc525 100644 --- a/API/Extensions/SeriesExtensions.cs +++ b/API/Extensions/SeriesExtensions.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using API.Entities; +using API.Parser; namespace API.Extensions { @@ -14,7 +15,21 @@ namespace API.Extensions /// public static bool NameInList(this Series series, IEnumerable list) { - return list.Any(name => Parser.Parser.Normalize(name) == series.NormalizedName || Parser.Parser.Normalize(name) == Parser.Parser.Normalize(series.Name) || name == series.Name || name == series.LocalizedName || name == series.OriginalName); + return list.Any(name => Parser.Parser.Normalize(name) == series.NormalizedName || Parser.Parser.Normalize(name) == Parser.Parser.Normalize(series.Name) + || name == series.Name || name == series.LocalizedName || name == series.OriginalName || Parser.Parser.Normalize(name) == Parser.Parser.Normalize(series.OriginalName)); + } + + /// + /// Checks against all the name variables of the Series if it matches the + /// + /// + /// + /// + public static bool NameInParserInfo(this Series series, ParserInfo info) + { + if (info == null) return false; + return Parser.Parser.Normalize(info.Series) == series.NormalizedName || Parser.Parser.Normalize(info.Series) == Parser.Parser.Normalize(series.Name) + || info.Series == series.Name || info.Series == series.LocalizedName || info.Series == series.OriginalName || Parser.Parser.Normalize(info.Series) == Parser.Parser.Normalize(series.OriginalName); } } -} \ No newline at end of file +} diff --git a/API/Extensions/ServiceCollectionExtensions.cs b/API/Extensions/ServiceCollectionExtensions.cs index 3559f3856..903ed5b88 100644 --- a/API/Extensions/ServiceCollectionExtensions.cs +++ b/API/Extensions/ServiceCollectionExtensions.cs @@ -1,5 +1,4 @@ -using System; -using API.Interfaces.Services; +using API.Interfaces.Services; using API.Services.Clients; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -22,4 +21,4 @@ namespace API.Extensions return services; } } -} \ No newline at end of file +} diff --git a/API/Interfaces/ILibraryRepository.cs b/API/Interfaces/ILibraryRepository.cs index f8cedce90..4977d38d5 100644 --- a/API/Interfaces/ILibraryRepository.cs +++ b/API/Interfaces/ILibraryRepository.cs @@ -10,14 +10,16 @@ namespace API.Interfaces { void Add(Library library); void Update(Library library); + void Delete(Library library); Task> GetLibraryDtosAsync(); Task LibraryExists(string libraryName); Task GetLibraryForIdAsync(int libraryId); Task GetFullLibraryForIdAsync(int libraryId); + Task GetFullLibraryForIdAsync(int libraryId, int seriesId); Task> GetLibraryDtosForUsernameAsync(string userName); Task> GetLibrariesAsync(); Task DeleteLibrary(int libraryId); Task> GetLibrariesForUserIdAsync(int userId); Task GetLibraryTypeAsync(int libraryId); } -} \ No newline at end of file +} diff --git a/API/Interfaces/ITaskScheduler.cs b/API/Interfaces/ITaskScheduler.cs index 4f3aba6f8..e02ba80b8 100644 --- a/API/Interfaces/ITaskScheduler.cs +++ b/API/Interfaces/ITaskScheduler.cs @@ -11,7 +11,8 @@ void RefreshMetadata(int libraryId, bool forceUpdate = true); void CleanupTemp(); void RefreshSeriesMetadata(int libraryId, int seriesId); + void ScanSeries(int libraryId, int seriesId, bool forceUpdate = false); void ScheduleStatsTasks(); void CancelStatsTasks(); } -} \ No newline at end of file +} diff --git a/API/Interfaces/Services/IArchiveService.cs b/API/Interfaces/Services/IArchiveService.cs index 18869b7cd..07c1e287d 100644 --- a/API/Interfaces/Services/IArchiveService.cs +++ b/API/Interfaces/Services/IArchiveService.cs @@ -17,4 +17,4 @@ namespace API.Interfaces.Services bool ArchiveNeedsFlattening(ZipArchive archive); Task> CreateZipForDownload(IEnumerable files, string tempFolder); } -} \ No newline at end of file +} diff --git a/API/Interfaces/IBookService.cs b/API/Interfaces/Services/IBookService.cs similarity index 96% rename from API/Interfaces/IBookService.cs rename to API/Interfaces/Services/IBookService.cs index 297bef3aa..63d0aa712 100644 --- a/API/Interfaces/IBookService.cs +++ b/API/Interfaces/Services/IBookService.cs @@ -3,7 +3,7 @@ using System.Threading.Tasks; using API.Parser; using VersOne.Epub; -namespace API.Interfaces +namespace API.Interfaces.Services { public interface IBookService { @@ -23,4 +23,4 @@ namespace API.Interfaces string GetSummaryInfo(string filePath); ParserInfo ParseInfo(string filePath); } -} \ No newline at end of file +} diff --git a/API/Interfaces/Services/IDirectoryService.cs b/API/Interfaces/Services/IDirectoryService.cs index f9e8345bd..638d8eb71 100644 --- a/API/Interfaces/Services/IDirectoryService.cs +++ b/API/Interfaces/Services/IDirectoryService.cs @@ -25,5 +25,8 @@ namespace API.Interfaces.Services IEnumerable GetFiles(string path, string searchPatternExpression = "", SearchOption searchOption = SearchOption.TopDirectoryOnly); + + void CopyFileToDirectory(string fullFilePath, string targetDirectory); + public bool CopyDirectoryToDirectory(string sourceDirName, string destDirName); } -} \ No newline at end of file +} diff --git a/API/Interfaces/Services/IImageService.cs b/API/Interfaces/Services/IImageService.cs new file mode 100644 index 000000000..963e0b904 --- /dev/null +++ b/API/Interfaces/Services/IImageService.cs @@ -0,0 +1,10 @@ +using API.Entities; + +namespace API.Interfaces.Services +{ + public interface IImageService + { + byte[] GetCoverImage(string path, bool createThumbnail = false); + string GetCoverFile(MangaFile file); + } +} diff --git a/API/Interfaces/Services/IScannerService.cs b/API/Interfaces/Services/IScannerService.cs index dc9c44623..d235adfb5 100644 --- a/API/Interfaces/Services/IScannerService.cs +++ b/API/Interfaces/Services/IScannerService.cs @@ -1,4 +1,7 @@  +using System.Threading; +using System.Threading.Tasks; + namespace API.Interfaces.Services { public interface IScannerService @@ -11,5 +14,6 @@ namespace API.Interfaces.Services /// Force overwriting for cover images void ScanLibrary(int libraryId, bool forceUpdate); void ScanLibraries(); + Task ScanSeries(int libraryId, int seriesId, bool forceUpdate, CancellationToken token); } -} \ No newline at end of file +} diff --git a/API/Parser/Parser.cs b/API/Parser/Parser.cs index 5bfe954e8..2bc120700 100644 --- a/API/Parser/Parser.cs +++ b/API/Parser/Parser.cs @@ -12,7 +12,7 @@ namespace API.Parser public const string DefaultChapter = "0"; public const string DefaultVolume = "0"; - public const string ArchiveFileExtensions = @"\.cbz|\.zip|\.rar|\.cbr|\.tar.gz|\.7zip|\.7z|.cb7"; + public const string ArchiveFileExtensions = @"\.cbz|\.zip|\.rar|\.cbr|\.tar.gz|\.7zip|\.7z|\.cb7|\.cbt"; public const string BookFileExtensions = @"\.epub"; public const string ImageFileExtensions = @"^(\.png|\.jpeg|\.jpg)"; public static readonly Regex FontSrcUrlRegex = new Regex(@"(src:url\(.{1})" + "([^\"']*)" + @"(.{1}\))", RegexOptions.IgnoreCase | RegexOptions.Compiled); @@ -24,7 +24,7 @@ namespace API.Parser private static readonly Regex XmlRegex = new Regex(XmlRegexExtensions, RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex BookFileRegex = new Regex(BookFileExtensions, RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex CoverImageRegex = new Regex(@"(?\d+)", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Tower Of God S01 014 (CBT) (digital).cbz - new Regex( + new Regex( @"(?.*)(\b|_|)(S(?\d+))", RegexOptions.IgnoreCase | RegexOptions.Compiled), }; private static readonly Regex[] MangaSeriesRegex = new[] { - // [SugoiSugoi]_NEEDLESS_Vol.2_-_Disk_The_Informant_5_[ENG].rar + // Grand Blue Dreaming - SP02 new Regex( - @"^(?.*)( |_)Vol\.?\d+", + @"(?.*)(\b|_|-|\s)(?:sp)\d", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + // [SugoiSugoi]_NEEDLESS_Vol.2_-_Disk_The_Informant_5_[ENG].rar, Yuusha Ga Shinda! - Vol.tbd Chapter 27.001 V2 Infection ①.cbz + new Regex( + @"^(?.*)( |_)Vol\.?(\d+|tbd)", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Ichiban_Ushiro_no_Daimaou_v04_ch34_[VISCANS].zip, VanDread-v01-c01.zip new Regex( - @"(?.*)(\b|_)v(?\d+-?\d*)( |_|-)", + @"(?.*)(\b|_)v(?\d+-?\d*)(\s|_|-)", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Gokukoku no Brynhildr - c001-008 (v01) [TrinityBAKumA], Black Bullet - v4 c17 [batoto] new Regex( @"(?.*)( - )(?:v|vo|c)\d", RegexOptions.IgnoreCase | RegexOptions.Compiled), - // [dmntsf.net] One Piece - Digital Colored Comics Vol. 20 Ch. 177 - 30 Million vs 81 Million.cbz - new Regex( - @"(?.*) (\b|_|-)(vol)\.?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), - // Kedouin Makoto - Corpse Party Musume, Chapter 19 [Dametrans].zip new Regex( @"(?.*)(?:, Chapter )(?\d+)", RegexOptions.IgnoreCase | RegexOptions.Compiled), + // Mad Chimera World - Volume 005 - Chapter 026.cbz (couldn't figure out how to get Volume negative lookaround working on below regex) + new Regex( + @"(?.*)(\s|_|-)(?:Volume(\s|_|-)+\d+)(\s|_|-)+(?:Chapter)(\s|_|-)(?\d+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + // Please Go Home, Akutsu-San! - Chapter 038.5 - Volume Announcement.cbz + new Regex( + @"(?.*)(\s|_|-)(?!Vol)(\s|_|-)(?:Chapter)(\s|_|-)(?\d+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + // [dmntsf.net] One Piece - Digital Colored Comics Vol. 20 Ch. 177 - 30 Million vs 81 Million.cbz + new Regex( + @"(?.*) (\b|_|-)(vol)\.?", + RegexOptions.IgnoreCase | RegexOptions.Compiled), //Knights of Sidonia c000 (S2 LE BD Omake - BLAME!) [Habanero Scans] new Regex( @"(?.*)(\bc\d+\b)", @@ -89,9 +100,9 @@ namespace API.Parser new Regex( @"(?.*)(?: _|-|\[|\()\s?vol(ume)?", RegexOptions.IgnoreCase | RegexOptions.Compiled), - // Momo The Blood Taker - Chapter 027 Violent Emotion.cbz + // Momo The Blood Taker - Chapter 027 Violent Emotion.cbz, Grand Blue Dreaming - SP02 Extra (2019) (Digital) (danke-Empire).cbz new Regex( - @"(?.*)(\b|_|-|\s)(?:chapter)(\b|_|-|\s)\d", + @"(?.*)(\b|_|-|\s)(?:(chapter(\b|_|-|\s))|sp)\d", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Historys Strongest Disciple Kenichi_v11_c90-98.zip, Killing Bites Vol. 0001 Ch. 0001 - Galactica Scanlations (gb) new Regex( @@ -108,7 +119,7 @@ namespace API.Parser RegexOptions.IgnoreCase | RegexOptions.Compiled), // Hinowa ga CRUSH! 018 (2019) (Digital) (LuCaZ).cbz new Regex( - @"(?.*) (?\d+) (?:\(\d{4}\)) ", + @"(?.*) (?\d+) (?:\(\d{4}\)) ", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Goblin Slayer - Brand New Day 006.5 (2019) (Digital) (danke-Empire) new Regex( @@ -142,25 +153,25 @@ namespace API.Parser new Regex( @"^(?!Vol)(?.*)( |_)Chapter( |_)(\d+)", RegexOptions.IgnoreCase | RegexOptions.Compiled), - + // Fullmetal Alchemist chapters 101-108.cbz new Regex( @"^(?!vol)(?.*)( |_)(chapters( |_)?)\d+-?\d*", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Umineko no Naku Koro ni - Episode 1 - Legend of the Golden Witch #1 new Regex( - @"^(?!Vol\.?)(?.*)( |_|-)(?.*)( |_|-)(?.*)ch\d+-?\d?", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Magi - Ch.252-005.cbz new Regex( - @"(?.*)( ?- ?)Ch\.\d+-?\d*", + @"(?.*)( ?- ?)Ch\.\d+-?\d*", RegexOptions.IgnoreCase | RegexOptions.Compiled), - // [BAA]_Darker_than_Black_Omake-1.zip + // [BAA]_Darker_than_Black_Omake-1.zip new Regex( @"^(?!Vol)(?.*)(-)\d+-?\d*", // This catches a lot of stuff ^(?!Vol)(?.*)( |_)(\d+) RegexOptions.IgnoreCase | RegexOptions.Compiled), @@ -177,7 +188,7 @@ namespace API.Parser @"^(?!Vol)(?.*)( |_|-)(ch?)\d+", RegexOptions.IgnoreCase | RegexOptions.Compiled), }; - + private static readonly Regex[] ComicSeriesRegex = new[] { // Invincible Vol 01 Family matters (2005) (Digital) @@ -229,7 +240,7 @@ namespace API.Parser @"^(?.*)", RegexOptions.IgnoreCase | RegexOptions.Compiled), }; - + private static readonly Regex[] ComicVolumeRegex = new[] { // 04 - Asterix the Gladiator (1964) (Digital-Empire) (WebP by Doc MaKS) @@ -261,18 +272,10 @@ namespace API.Parser @"^(?.*)(?: |_)#(?\d+)", RegexOptions.IgnoreCase | RegexOptions.Compiled), }; - + private static readonly Regex[] ComicChapterRegex = new[] { - // // 04 - Asterix the Gladiator (1964) (Digital-Empire) (WebP by Doc MaKS) - // new Regex( - // @"^(?\d+) (- |_)?(?.*(\d{4})?)( |_)(\(|\d+)", - // RegexOptions.IgnoreCase | RegexOptions.Compiled), - // // 01 Spider-Man & Wolverine 01.cbr - // new Regex( - // @"^(?\d+) (?:- )?(?.*) (\d+)?", // NOTE: WHy is this here without a capture group - // RegexOptions.IgnoreCase | RegexOptions.Compiled), - // Batman & Wildcat (1 of 3) + // Batman & Wildcat (1 of 3) new Regex( @"(?.*(\d{4})?)( |_)(?:\((?\d+) of \d+)", RegexOptions.IgnoreCase | RegexOptions.Compiled), @@ -307,7 +310,7 @@ namespace API.Parser // [TrinityBAKumA Finella&anon], [BAA]_, [SlowManga&OverloadScans], [batoto] new Regex(@"(?:\[(?(?!\s).+?(?(?!\s).+?(?\d+(?:.\d+|-\d+)?)", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Umineko no Naku Koro ni - Episode 3 - Banquet of the Golden Witch #02.cbz (Rare case, if causes issue remove) - new Regex( + new Regex( @"^(?.*)(?: |_)#(?\d+)", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Green Worldz - Chapter 027 new Regex( - @"^(?!Vol)(?.*)\s?(?\d+(?:.\d+|-\d+)?)", + @"^(?!Vol)(?.*)\s?(?\d+(?:\.?[\d-])?)", RegexOptions.IgnoreCase | RegexOptions.Compiled), - // Hinowa ga CRUSH! 018 (2019) (Digital) (LuCaZ).cbz, Hinowa ga CRUSH! 018.5 (2019) (Digital) (LuCaZ).cbz + // Hinowa ga CRUSH! 018 (2019) (Digital) (LuCaZ).cbz, Hinowa ga CRUSH! 018.5 (2019) (Digital) (LuCaZ).cbz new Regex( - @"^(?!Vol)(?.*) (?\d+(?:.\d+|-\d+)?)(?: \(\d{4}\))?(\b|_|-)", + @"^(?!Vol)(?.*)\s(?\d+(?:.\d+|-\d+)?)(?:\s\(\d{4}\))?(\b|_|-)", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Tower Of God S01 014 (CBT) (digital).cbz new Regex( - @"(?.*) S(?\d+) (?\d+(?:.\d+|-\d+)?)", + @"(?.*)\sS(?\d+)\s(?\d+(?:.\d+|-\d+)?)", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Beelzebub_01_[Noodles].zip, Beelzebub_153b_RHS.zip new Regex( - @"^((?!v|vo|vol|Volume).)*( |_)(?\.?\d+(?:.\d+|-\d+)?)(?b)?( |_|\[|\()", + @"^((?!v|vo|vol|Volume).)*(\s|_)(?\.?\d+(?:.\d+|-\d+)?)(?b)?(\s|_|\[|\()", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Yumekui-Merry_DKThias_Chapter21.zip new Regex( @@ -348,14 +351,18 @@ namespace API.Parser RegexOptions.IgnoreCase | RegexOptions.Compiled), // [Hidoi]_Amaenaideyo_MS_vol01_chp02.rar new Regex( - @"(?.*)( |_)(vol\d+)?( |_)Chp\.? ?(?\d+)", + @"(?.*)(\s|_)(vol\d+)?(\s|_)Chp\.? ?(?\d+)", RegexOptions.IgnoreCase | RegexOptions.Compiled), + // Vol 1 Chapter 2 + new Regex( + @"(?((vol|volume|v))?(\s|_)?\.?\d+)(\s|_)(Chp|Chapter)\.?(\s|_)?(?\d+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), }; private static readonly Regex[] MangaEditionRegex = { // Tenjo Tenge {Full Contact Edition} v01 (2011) (Digital) (ASTC).cbz new Regex( - @"(?({|\(|\[).* Edition(}|\)|\]))", + @"(?({|\(|\[).* Edition(}|\)|\]))", RegexOptions.IgnoreCase | RegexOptions.Compiled), // Tenjo Tenge {Full Contact Edition} v01 (2011) (Digital) (ASTC).cbz new Regex( @@ -441,31 +448,18 @@ namespace API.Parser }; } - if (ret.Series == string.Empty) + if (type is LibraryType.ComicImages or LibraryType.MangaImages) + { + // Reset Chapters, Volumes, and Series as images are not good to parse information out of. Better to use folders. + ret.Volumes = DefaultVolume; + ret.Chapters = DefaultChapter; + ret.Series = string.Empty; + } + + if (ret.Series == string.Empty || (type is LibraryType.ComicImages or LibraryType.MangaImages)) { // Try to parse information out of each folder all the way to rootPath - var fallbackFolders = DirectoryService.GetFoldersTillRoot(rootPath, Path.GetDirectoryName(filePath)).ToList(); - for (var i = 0; i < fallbackFolders.Count; i++) - { - var folder = fallbackFolders[i]; - if (!string.IsNullOrEmpty(ParseMangaSpecial(folder))) continue; - if (ParseVolume(folder) != DefaultVolume || ParseChapter(folder) != DefaultChapter) continue; - - var series = ParseSeries(folder); - - if ((string.IsNullOrEmpty(series) && i == fallbackFolders.Count - 1)) - { - ret.Series = CleanTitle(folder); - break; - } - - if (!string.IsNullOrEmpty(series)) - { - ret.Series = series; - break; - } - } - + ParseFromFallbackFolders(filePath, rootPath, type, ref ret); } var edition = ParseEdition(fileName); @@ -476,7 +470,7 @@ namespace API.Parser } var isSpecial = ParseMangaSpecial(fileName); - // We must ensure that we can only parse a special out. As some files will have v20 c171-180+Omake and that + // We must ensure that we can only parse a special out. As some files will have v20 c171-180+Omake and that // could cause a problem as Omake is a special term, but there is valid volume/chapter information. if (ret.Chapters == DefaultChapter && ret.Volumes == DefaultVolume && !string.IsNullOrEmpty(isSpecial)) { @@ -488,7 +482,11 @@ namespace API.Parser ret.IsSpecial = true; ret.Chapters = DefaultChapter; ret.Volumes = DefaultVolume; + + ParseFromFallbackFolders(filePath, rootPath, type, ref ret); } + // here is the issue. If we are a special with marker, we need to ensure we use the correct series name. + // we can do this by falling back if (string.IsNullOrEmpty(ret.Series)) { @@ -498,6 +496,54 @@ namespace API.Parser return ret.Series == string.Empty ? null : ret; } + /// + /// + /// + /// + /// + /// + /// Expects a non-null ParserInfo which this method will populate + public static void ParseFromFallbackFolders(string filePath, string rootPath, LibraryType type, ref ParserInfo ret) + { + var fallbackFolders = DirectoryService.GetFoldersTillRoot(rootPath, filePath).ToList(); + for (var i = 0; i < fallbackFolders.Count; i++) + { + var folder = fallbackFolders[i]; + if (!string.IsNullOrEmpty(ParseMangaSpecial(folder))) continue; + + var parsedVolume = (type is LibraryType.Manga or LibraryType.MangaImages) ? ParseVolume(folder) : ParseComicVolume(folder); + var parsedChapter = (type is LibraryType.Manga or LibraryType.MangaImages) ? ParseChapter(folder) : ParseComicChapter(folder); + + if (!parsedVolume.Equals(DefaultVolume) || !parsedChapter.Equals(DefaultChapter)) + { + if ((ret.Volumes.Equals(DefaultVolume) || string.IsNullOrEmpty(ret.Volumes)) && !parsedVolume.Equals(DefaultVolume)) + { + ret.Volumes = parsedVolume; + } + if ((ret.Chapters.Equals(DefaultChapter) || string.IsNullOrEmpty(ret.Chapters)) && !parsedChapter.Equals(DefaultChapter)) + { + ret.Chapters = parsedChapter; + } + + continue; + } + + var series = ParseSeries(folder); + + if ((string.IsNullOrEmpty(series) && i == fallbackFolders.Count - 1)) + { + ret.Series = CleanTitle(folder); + break; + } + + if (!string.IsNullOrEmpty(series)) + { + ret.Series = series; + break; + } + } + } + public static MangaFormat ParseFormat(string filePath) { if (IsArchive(filePath)) return MangaFormat.Archive; @@ -517,17 +563,17 @@ namespace API.Parser { var edition = match.Groups["Edition"].Value.Replace("{", "").Replace("}", "") .Replace("[", "").Replace("]", "").Replace("(", "").Replace(")", ""); - + return edition; } } } - + return string.Empty; } - + /// - /// If the file has SP marker. + /// If the file has SP marker. /// /// /// @@ -541,10 +587,10 @@ namespace API.Parser return true; } } - + return false; } - + public static string ParseMangaSpecial(string filePath) { foreach (var regex in MangaSpecialRegex) @@ -558,10 +604,10 @@ namespace API.Parser } } } - + return string.Empty; } - + public static string ParseSeries(string filename) { foreach (var regex in MangaSeriesRegex) @@ -575,7 +621,7 @@ namespace API.Parser } } } - + return string.Empty; } public static string ParseComicSeries(string filename) @@ -591,7 +637,7 @@ namespace API.Parser } } } - + return string.Empty; } @@ -603,7 +649,7 @@ namespace API.Parser foreach (Match match in matches) { if (!match.Groups["Volume"].Success || match.Groups["Volume"] == Match.Empty) continue; - + var value = match.Groups["Volume"].Value; if (!value.Contains("-")) return RemoveLeadingZeroes(match.Groups["Volume"].Value); var tokens = value.Split("-"); @@ -613,7 +659,7 @@ namespace API.Parser } } - + return DefaultVolume; } @@ -625,7 +671,7 @@ namespace API.Parser foreach (Match match in matches) { if (!match.Groups["Volume"].Success || match.Groups["Volume"] == Match.Empty) continue; - + var value = match.Groups["Volume"].Value; if (!value.Contains("-")) return RemoveLeadingZeroes(match.Groups["Volume"].Value); var tokens = value.Split("-"); @@ -635,7 +681,7 @@ namespace API.Parser } } - + return DefaultVolume; } @@ -647,7 +693,7 @@ namespace API.Parser foreach (Match match in matches) { if (!match.Groups["Chapter"].Success || match.Groups["Chapter"] == Match.Empty) continue; - + var value = match.Groups["Chapter"].Value; var hasChapterPart = match.Groups["ChapterPart"].Success; @@ -655,7 +701,7 @@ namespace API.Parser { return RemoveLeadingZeroes(hasChapterPart ? AddChapterPart(value) : value); } - + var tokens = value.Split("-"); var from = RemoveLeadingZeroes(tokens[0]); var to = RemoveLeadingZeroes(hasChapterPart ? AddChapterPart(tokens[1]) : tokens[1]); @@ -676,7 +722,7 @@ namespace API.Parser return $"{value}.5"; } - + public static string ParseComicChapter(string filename) { foreach (var regex in ComicChapterRegex) @@ -718,7 +764,7 @@ namespace API.Parser } } } - + foreach (var regex in MangaEditionRegex) { var matches = regex.Matches(title); @@ -733,7 +779,7 @@ namespace API.Parser return title; } - + private static string RemoveSpecialTags(string title) { foreach (var regex in MangaSpecialRegex) @@ -750,9 +796,9 @@ namespace API.Parser return title; } - - - + + + /// /// Translates _ -> spaces, trims front and back of string, removes release groups /// @@ -820,13 +866,13 @@ namespace API.Parser _ => number }; } - + public static string RemoveLeadingZeroes(string title) { var ret = title.TrimStart(new[] { '0' }); return ret == string.Empty ? "0" : ret; } - + public static bool IsArchive(string filePath) { return ArchiveFileRegex.IsMatch(Path.GetExtension(filePath)); @@ -841,12 +887,12 @@ namespace API.Parser if (filePath.StartsWith(".") || (!suppressExtraChecks && filePath.StartsWith("!"))) return false; return ImageRegex.IsMatch(Path.GetExtension(filePath)); } - + public static bool IsXml(string filePath) { return XmlRegex.IsMatch(Path.GetExtension(filePath)); } - + public static float MinimumNumberFromRange(string range) { try @@ -891,4 +937,4 @@ namespace API.Parser return Path.GetExtension(filePath).ToLower() == ".epub"; } } -} \ No newline at end of file +} diff --git a/API/Program.cs b/API/Program.cs index fc906cca1..238036960 100644 --- a/API/Program.cs +++ b/API/Program.cs @@ -5,7 +5,6 @@ using System.Threading; using System.Threading.Tasks; using API.Data; using API.Entities; -using API.Services.HostedServices; using Kavita.Common; using Kavita.Common.EnvironmentInfo; using Microsoft.AspNetCore.Hosting; @@ -26,14 +25,14 @@ namespace API protected Program() { } - + public static string GetAppSettingFilename() { var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var isDevelopment = environment == Environments.Development; return "appsettings" + (isDevelopment ? ".Development" : "") + ".json"; } - + public static async Task Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; @@ -47,7 +46,7 @@ namespace API var base64 = Convert.ToBase64String(rBytes).Replace("/", ""); Configuration.UpdateJwtToken(GetAppSettingFilename(), base64); } - + // Get HttpPort from Config _httpPort = Configuration.GetPort(GetAppSettingFilename()); @@ -86,7 +85,7 @@ namespace API options.Protocols = HttpProtocols.Http1AndHttp2; }); }); - + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); if (environment != Environments.Development) { @@ -125,7 +124,7 @@ namespace API sentryEvent.ServerName = null; // Never send Server Name to Sentry return sentryEvent; }; - + options.ConfigureScope(scope => { scope.User = new User() @@ -143,7 +142,7 @@ namespace API }); } - + webBuilder.UseStartup(); }); } diff --git a/API/Services/ArchiveService.cs b/API/Services/ArchiveService.cs index a90d429ed..af43381fa 100644 --- a/API/Services/ArchiveService.cs +++ b/API/Services/ArchiveService.cs @@ -28,7 +28,6 @@ namespace API.Services { private readonly ILogger _logger; private readonly IDirectoryService _directoryService; - private const int ThumbnailWidth = 320; // 153w x 230h private static readonly RecyclableMemoryStreamManager StreamManager = new(); private readonly NaturalSortComparer _comparer; @@ -38,7 +37,7 @@ namespace API.Services _directoryService = directoryService; _comparer = new NaturalSortComparer(); } - + /// /// Checks if a File can be opened. Requires up to 2 opens of the filestream. /// @@ -47,7 +46,7 @@ namespace API.Services public virtual ArchiveLibrary CanOpen(string archivePath) { if (!(File.Exists(archivePath) && Parser.Parser.IsArchive(archivePath) || Parser.Parser.IsEpub(archivePath))) return ArchiveLibrary.NotSupported; - + try { using var a2 = ZipFile.OpenRead(archivePath); @@ -90,7 +89,7 @@ namespace API.Services { _logger.LogDebug("Using SharpCompress compression handling"); using var archive = ArchiveFactory.Open(archivePath); - return archive.Entries.Count(entry => !entry.IsDirectory && + return archive.Entries.Count(entry => !entry.IsDirectory && !Parser.Parser.HasBlacklistedFolderInPath(Path.GetDirectoryName(entry.Key) ?? string.Empty) && Parser.Parser.IsImage(entry.Key)); } @@ -133,10 +132,10 @@ namespace API.Services var result = entryFullNames.OrderBy(Path.GetFileName, _comparer) .FirstOrDefault(x => !Parser.Parser.HasBlacklistedFolderInPath(x) && Parser.Parser.IsImage(x)); - + return string.IsNullOrEmpty(result) ? null : result; } - + /// /// Generates byte array of cover image. @@ -173,14 +172,14 @@ namespace API.Services _logger.LogDebug("Using SharpCompress compression handling"); using var archive = ArchiveFactory.Open(archivePath); var entryNames = archive.Entries.Where(archiveEntry => !archiveEntry.IsDirectory).Select(e => e.Key).ToList(); - + var entryName = FindFolderEntry(entryNames) ?? FirstFileEntry(entryNames); var entry = archive.Entries.Single(e => e.Key == entryName); - + using var ms = StreamManager.GetStream(); entry.WriteTo(ms); ms.Position = 0; - + return createThumbnail ? CreateThumbnail(entry.Key, ms, Path.GetExtension(entry.Key)) : ms.ToArray(); } case ArchiveLibrary.NotSupported: @@ -195,7 +194,7 @@ namespace API.Services { _logger.LogWarning(ex, "[GetCoverImage] There was an exception when reading archive stream: {ArchivePath}. Defaulting to no cover image", archivePath); } - + return Array.Empty(); } @@ -206,7 +205,7 @@ namespace API.Services stream.CopyTo(ms); return ms.ToArray(); } - + /// /// Given an archive stream, will assess whether directory needs to be flattened so that the extracted archive files are directly /// under extract path and not nested in subfolders. See Flatten method. @@ -225,14 +224,14 @@ namespace API.Services { var tempDirectory = Path.Join(Directory.GetCurrentDirectory(), "temp"); var dateString = DateTime.Now.ToShortDateString().Replace("/", "_"); - + var tempLocation = Path.Join(tempDirectory, $"{tempFolder}_{dateString}"); DirectoryService.ExistOrCreate(tempLocation); if (!_directoryService.CopyFilesToDirectory(files, tempLocation)) { throw new KavitaException("Unable to copy files to temp directory archive download."); } - + var zipPath = Path.Join(tempDirectory, $"kavita_{tempFolder}_{dateString}.zip"); try { @@ -243,10 +242,10 @@ namespace API.Services _logger.LogError(ex, "There was an issue creating temp archive"); throw new KavitaException("There was an issue creating temp archive"); } - - + + var fileBytes = await _directoryService.ReadFileAsync(zipPath); - + DirectoryService.ClearAndDeleteDirectory(tempLocation); (new FileInfo(zipPath)).Delete(); @@ -261,7 +260,7 @@ namespace API.Services } try { - using var thumbnail = Image.ThumbnailStream(stream, ThumbnailWidth); + using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); return thumbnail.WriteToBuffer(formatExtension); } catch (Exception ex) @@ -286,12 +285,12 @@ namespace API.Services } if (Parser.Parser.IsArchive(archivePath) || Parser.Parser.IsEpub(archivePath)) return true; - + _logger.LogWarning("Archive {ArchivePath} is not a valid archive", archivePath); return false; } - + private static ComicInfo FindComicInfoXml(IEnumerable entries) { foreach (var entry in entries) @@ -309,7 +308,7 @@ namespace API.Services } } - + return null; } @@ -322,7 +321,7 @@ namespace API.Services try { if (!File.Exists(archivePath)) return summary; - + var libraryHandler = CanOpen(archivePath); switch (libraryHandler) { @@ -343,7 +342,7 @@ namespace API.Services { _logger.LogDebug("Using SharpCompress compression handling"); using var archive = ArchiveFactory.Open(archivePath); - info = FindComicInfoXml(archive.Entries.Where(entry => !entry.IsDirectory + info = FindComicInfoXml(archive.Entries.Where(entry => !entry.IsDirectory && !Parser.Parser.HasBlacklistedFolderInPath(Path.GetDirectoryName(entry.Key) ?? string.Empty) && Parser.Parser.IsXml(entry.Key))); break; @@ -365,7 +364,7 @@ namespace API.Services { _logger.LogWarning(ex, "[GetSummaryInfo] There was an exception when reading archive stream: {Filepath}", archivePath); } - + return summary; } @@ -386,7 +385,7 @@ namespace API.Services { var needsFlattening = ArchiveNeedsFlattening(archive); if (!archive.HasFiles() && !needsFlattening) return; - + archive.ExtractToDirectory(extractPath, true); if (needsFlattening) { @@ -408,7 +407,7 @@ namespace API.Services if (!IsValidArchive(archivePath)) return; if (Directory.Exists(extractPath)) return; - + var sw = Stopwatch.StartNew(); try @@ -427,7 +426,7 @@ namespace API.Services { _logger.LogDebug("Using SharpCompress compression handling"); using var archive = ArchiveFactory.Open(archivePath); - ExtractArchiveEntities(archive.Entries.Where(entry => !entry.IsDirectory + ExtractArchiveEntities(archive.Entries.Where(entry => !entry.IsDirectory && !Parser.Parser.HasBlacklistedFolderInPath(Path.GetDirectoryName(entry.Key) ?? string.Empty) && Parser.Parser.IsImage(entry.Key)), extractPath); break; @@ -439,7 +438,7 @@ namespace API.Services _logger.LogWarning("[ExtractArchive] There was an exception when reading archive stream: {ArchivePath}. Defaulting to 0 pages", archivePath); return; } - + } catch (Exception e) { @@ -449,4 +448,4 @@ namespace API.Services _logger.LogDebug("Extracted archive to {ExtractPath} in {ElapsedMilliseconds} milliseconds", extractPath, sw.ElapsedMilliseconds); } } -} \ No newline at end of file +} diff --git a/API/Services/BookService.cs b/API/Services/BookService.cs index f36455ff6..36c59a789 100644 --- a/API/Services/BookService.cs +++ b/API/Services/BookService.cs @@ -7,7 +7,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; using API.Entities.Enums; -using API.Interfaces; +using API.Interfaces.Services; using API.Parser; using ExCSS; using HtmlAgilityPack; @@ -20,18 +20,16 @@ namespace API.Services public class BookService : IBookService { private readonly ILogger _logger; - - private const int ThumbnailWidth = 320; // 153w x 230h private readonly StylesheetParser _cssParser = new (); public BookService(ILogger logger) { _logger = logger; } - + private static bool HasClickableHrefPart(HtmlNode anchor) { - return anchor.GetAttributeValue("href", string.Empty).Contains("#") + return anchor.GetAttributeValue("href", string.Empty).Contains("#") && anchor.GetAttributeValue("tabindex", string.Empty) != "-1" && anchor.GetAttributeValue("role", string.Empty) != "presentation"; } @@ -74,7 +72,7 @@ namespace API.Services .Split("#"); // Some keys get uri encoded when parsed, so replace any of those characters with original var mappingKey = HttpUtility.UrlDecode(hrefParts[0]); - + if (!mappings.ContainsKey(mappingKey)) { if (HasClickableHrefPart(anchor)) @@ -95,7 +93,7 @@ namespace API.Services return; } - + var mappedPage = mappings[mappingKey]; anchor.Attributes.Add("kavita-page", $"{mappedPage}"); if (hrefParts.Length > 1) @@ -103,7 +101,7 @@ namespace API.Services anchor.Attributes.Add("kavita-part", hrefParts[1]); } - + anchor.Attributes.Remove("href"); anchor.Attributes.Add("href", "javascript:void(0)"); } @@ -117,7 +115,7 @@ namespace API.Services foreach (Match match in Parser.Parser.CssImportUrlRegex.Matches(stylesheetHtml)) { if (!match.Success) continue; - + var importFile = match.Groups["Filename"].Value; var key = CleanContentKeys(importFile); if (!key.Contains(prepend)) @@ -125,7 +123,7 @@ namespace API.Services key = prepend + key; } if (!book.Content.AllFiles.ContainsKey(key)) continue; - + var bookFile = book.Content.AllFiles[key]; var content = await bookFile.ReadContentAsBytesAsync(); importBuilder.Append(Encoding.UTF8.GetString(content)); @@ -134,13 +132,13 @@ namespace API.Services stylesheetHtml = stylesheetHtml.Insert(0, importBuilder.ToString()); stylesheetHtml = Parser.Parser.CssImportUrlRegex.Replace(stylesheetHtml, "$1" + apiBase + prepend + "$2" + "$3"); - + var styleContent = RemoveWhiteSpaceFromStylesheets(stylesheetHtml); styleContent = Parser.Parser.FontSrcUrlRegex.Replace(styleContent, "$1" + apiBase + "$2" + "$3"); styleContent = styleContent.Replace("body", ".reading-section"); - + var stylesheet = await _cssParser.ParseAsync(styleContent); foreach (var styleRule in stylesheet.StyleRules) { @@ -183,9 +181,9 @@ namespace API.Services } if (Parser.Parser.IsBook(filePath)) return true; - + _logger.LogWarning("[BookService] Book {EpubFile} is not a valid EPUB", filePath); - return false; + return false; } public int GetNumberOfPages(string filePath) @@ -227,7 +225,7 @@ namespace API.Services dict.Add(contentFileRef.FileName, pageCount); pageCount += 1; } - + return dict; } @@ -242,7 +240,7 @@ namespace API.Services try { using var epubBook = EpubReader.OpenBook(filePath); - + // If the epub has the following tags, we can group the books as Volumes // // @@ -262,7 +260,7 @@ namespace API.Services var specialName = string.Empty; var groupPosition = string.Empty; - + foreach (var metadataItem in epubBook.Schema.Package.Metadata.MetaItems) { // EPUB 2 and 3 @@ -340,12 +338,12 @@ namespace API.Services return null; } - + public byte[] GetCoverImage(string fileFilePath, bool createThumbnail = true) { if (!IsValidFile(fileFilePath)) return Array.Empty(); - + using var epubBook = EpubReader.OpenBook(fileFilePath); @@ -355,14 +353,14 @@ namespace API.Services var coverImageContent = epubBook.Content.Cover ?? epubBook.Content.Images.Values.FirstOrDefault(file => Parser.Parser.IsCoverImage(file.FileName)) ?? epubBook.Content.Images.Values.FirstOrDefault(); - + if (coverImageContent == null) return Array.Empty(); if (createThumbnail) { using var stream = new MemoryStream(coverImageContent.ReadContent()); - using var thumbnail = Image.ThumbnailStream(stream, ThumbnailWidth); + using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); return thumbnail.WriteToBuffer(".jpg"); } @@ -372,10 +370,10 @@ namespace API.Services { _logger.LogWarning(ex, "[BookService] There was a critical error and prevented thumbnail generation on {BookFile}. Defaulting to no cover image", fileFilePath); } - + return Array.Empty(); } - + private static string RemoveWhiteSpaceFromStylesheets(string body) { body = Regex.Replace(body, @"[a-zA-Z]+#", "#"); @@ -391,4 +389,4 @@ namespace API.Services return body; } } -} \ No newline at end of file +} diff --git a/API/Services/CacheService.cs b/API/Services/CacheService.cs index 73c279657..bc3533481 100644 --- a/API/Services/CacheService.cs +++ b/API/Services/CacheService.cs @@ -21,7 +21,7 @@ namespace API.Services private readonly NumericComparer _numericComparer; public static readonly string CacheDirectory = Path.GetFullPath(Path.Join(Directory.GetCurrentDirectory(), "cache/")); - public CacheService(ILogger logger, IUnitOfWork unitOfWork, IArchiveService archiveService, + public CacheService(ILogger logger, IUnitOfWork unitOfWork, IArchiveService archiveService, IDirectoryService directoryService) { _logger = logger; @@ -47,58 +47,71 @@ namespace API.Services var fileCount = files.Count; var extractPath = GetCachePath(chapterId); var extraPath = ""; - - foreach (var file in files) + + if (Directory.Exists(extractPath)) { - if (fileCount > 1) - { - extraPath = file.Id + ""; - } - - if (file.Format == MangaFormat.Archive) - { - _archiveService.ExtractArchive(file.FilePath, Path.Join(extractPath, extraPath)); - } - + return chapter; } - new DirectoryInfo(extractPath).Flatten(); + var extractDi = new DirectoryInfo(extractPath); + + if (files.Count > 0 && files[0].Format == MangaFormat.Image) + { + DirectoryService.ExistOrCreate(extractPath); + _directoryService.CopyDirectoryToDirectory(Path.GetDirectoryName(files[0].FilePath), extractPath); + extractDi.Flatten(); + return chapter; + } + + foreach (var file in files) + { + if (fileCount > 1) + { + extraPath = file.Id + string.Empty; + } + + if (file.Format == MangaFormat.Archive) + { + _archiveService.ExtractArchive(file.FilePath, Path.Join(extractPath, extraPath)); + } + } + + extractDi.Flatten(); + extractDi.RemoveNonImages(); return chapter; } - + public void Cleanup() { _logger.LogInformation("Performing cleanup of Cache directory"); EnsureCacheDirectory(); - DirectoryInfo di = new DirectoryInfo(CacheDirectory); - try { - di.Empty(); + DirectoryService.ClearDirectory(CacheDirectory); } catch (Exception ex) { _logger.LogError(ex, "There was an issue deleting one or more folders/files during cleanup"); } - + _logger.LogInformation("Cache directory purged"); } - + public void CleanupChapters(int[] chapterIds) { _logger.LogInformation("Running Cache cleanup on Volumes"); - + foreach (var chapter in chapterIds) { var di = new DirectoryInfo(GetCachePath(chapter)); if (di.Exists) { - di.Delete(true); + di.Delete(true); } - + } _logger.LogInformation("Cache directory purged"); } @@ -124,27 +137,33 @@ namespace API.Services if (page <= (mangaFile.Pages + pagesSoFar)) { var path = GetCachePath(chapter.Id); - var files = _directoryService.GetFilesWithExtension(path, Parser.Parser.ImageFileExtensions); + var files = _directoryService.GetFilesWithExtension(path, Parser.Parser.ImageFileExtensions); Array.Sort(files, _numericComparer); if (files.Length == 0) { return (files.ElementAt(0), mangaFile); } - + // Since array is 0 based, we need to keep that in account (only affects last image) if (page == files.Length) { return (files.ElementAt(page - 1 - pagesSoFar), mangaFile); } - + + if (mangaFile.Format == MangaFormat.Image && mangaFile.Pages == 1) + { + // Each file is one page, meaning we should just get element at page + return (files.ElementAt(page), mangaFile); + } + return (files.ElementAt(page - pagesSoFar), mangaFile); } - + pagesSoFar += mangaFile.Pages; } - return ("", null); + return (string.Empty, null); } } -} \ No newline at end of file +} diff --git a/API/Services/Clients/StatsApiClient.cs b/API/Services/Clients/StatsApiClient.cs index e07bec222..29a8cf8dd 100644 --- a/API/Services/Clients/StatsApiClient.cs +++ b/API/Services/Clients/StatsApiClient.cs @@ -1,7 +1,6 @@ using System; using System.Net.Http; using System.Net.Http.Json; -using System.Threading; using System.Threading.Tasks; using API.Configurations.CustomOptions; @@ -59,4 +58,4 @@ namespace API.Services.Clients } } } -} \ No newline at end of file +} diff --git a/API/Services/DirectoryService.cs b/API/Services/DirectoryService.cs index f823d2066..cc7f2b6ca 100644 --- a/API/Services/DirectoryService.cs +++ b/API/Services/DirectoryService.cs @@ -14,7 +14,7 @@ namespace API.Services { private readonly ILogger _logger; private static readonly Regex ExcludeDirectories = new Regex( - @"@eaDir|\.DS_Store", + @"@eaDir|\.DS_Store", RegexOptions.Compiled | RegexOptions.IgnoreCase); public DirectoryService(ILogger logger) @@ -23,13 +23,13 @@ namespace API.Services } /// - /// Given a set of regex search criteria, get files in the given path. + /// Given a set of regex search criteria, get files in the given path. /// /// Directory to search /// Regex version of search pattern (ie \.mp3|\.mp4). Defaults to * meaning all files. /// SearchOption to use, defaults to TopDirectoryOnly /// List of file paths - private static IEnumerable GetFilesWithCertainExtensions(string path, + private static IEnumerable GetFilesWithCertainExtensions(string path, string searchPatternExpression = "", SearchOption searchOption = SearchOption.TopDirectoryOnly) { @@ -40,8 +40,9 @@ namespace API.Services reSearchPattern.IsMatch(Path.GetExtension(file))); } + /// - /// Returns a list of folders from end of fullPath to rootPath. + /// Returns a list of folders from end of fullPath to rootPath. If a file is passed at the end of the fullPath, it will be ignored. /// /// Example) (C:/Manga/, C:/Manga/Love Hina/Specials/Omake/) returns [Omake, Specials, Love Hina] /// @@ -50,25 +51,33 @@ namespace API.Services /// public static IEnumerable GetFoldersTillRoot(string rootPath, string fullPath) { - var separator = Path.AltDirectorySeparatorChar; + var separator = Path.AltDirectorySeparatorChar; if (fullPath.Contains(Path.DirectorySeparatorChar)) { fullPath = fullPath.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); } - + if (rootPath.Contains(Path.DirectorySeparatorChar)) { rootPath = rootPath.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); } + + var path = fullPath.EndsWith(separator) ? fullPath.Substring(0, fullPath.Length - 1) : fullPath; var root = rootPath.EndsWith(separator) ? rootPath.Substring(0, rootPath.Length - 1) : rootPath; var paths = new List(); + // If a file is at the end of the path, remove it before we start processing folders + if (Path.GetExtension(path) != string.Empty) + { + path = path.Substring(0, path.LastIndexOf(separator)); + } + while (Path.GetDirectoryName(path) != Path.GetDirectoryName(root)) { var folder = new DirectoryInfo(path).Name; paths.Add(folder); - path = path.Replace(separator + folder, string.Empty); + path = path.Substring(0, path.LastIndexOf(separator)); } return paths; @@ -80,7 +89,7 @@ namespace API.Services return di.Exists; } - public IEnumerable GetFiles(string path, string searchPatternExpression = "", + public IEnumerable GetFiles(string path, string searchPatternExpression = "", SearchOption searchOption = SearchOption.TopDirectoryOnly) { if (searchPatternExpression != string.Empty) @@ -91,17 +100,68 @@ namespace API.Services .Where(file => reSearchPattern.IsMatch(file)); } - + return !Directory.Exists(path) ? Array.Empty() : Directory.GetFiles(path); } + public void CopyFileToDirectory(string fullFilePath, string targetDirectory) + { + var fileInfo = new FileInfo(fullFilePath); + if (fileInfo.Exists) + { + fileInfo.CopyTo(Path.Join(targetDirectory, fileInfo.Name)); + } + } + + public bool CopyDirectoryToDirectory(string sourceDirName, string destDirName) + { + if (string.IsNullOrEmpty(sourceDirName)) return false; + + var di = new DirectoryInfo(sourceDirName); + if (!di.Exists) return false; + + // Get the subdirectories for the specified directory. + var dir = new DirectoryInfo(sourceDirName); + + if (!dir.Exists) + { + throw new DirectoryNotFoundException( + "Source directory does not exist or could not be found: " + + sourceDirName); + } + + var dirs = dir.GetDirectories(); + + // If the destination directory doesn't exist, create it. + Directory.CreateDirectory(destDirName); + + // Get the files in the directory and copy them to the new location. + var files = dir.GetFiles(); + foreach (var file in files) + { + var tempPath = Path.Combine(destDirName, file.Name); + file.CopyTo(tempPath, false); + } + + // If copying subdirectories, copy them and their contents to new location. + foreach (var subDir in dirs) + { + var tempPath = Path.Combine(destDirName, subDir.Name); + CopyDirectoryToDirectory(subDir.FullName, tempPath); + } + + return true; + } + + + public string[] GetFilesWithExtension(string path, string searchPatternExpression = "") { if (searchPatternExpression != string.Empty) { return GetFilesWithCertainExtensions(path, searchPatternExpression).ToArray(); } - + return !Directory.Exists(path) ? Array.Empty() : Directory.GetFiles(path); } @@ -142,11 +202,11 @@ namespace API.Services public static void ClearAndDeleteDirectory(string directoryPath) { if (!Directory.Exists(directoryPath)) return; - + DirectoryInfo di = new DirectoryInfo(directoryPath); ClearDirectory(directoryPath); - + di.Delete(true); } @@ -162,11 +222,11 @@ namespace API.Services foreach (var file in di.EnumerateFiles()) { - file.Delete(); + file.Delete(); } foreach (var dir in di.EnumerateDirectories()) { - dir.Delete(true); + dir.Delete(true); } } @@ -181,13 +241,13 @@ namespace API.Services var fileInfo = new FileInfo(file); if (fileInfo.Exists) { - fileInfo.CopyTo(Path.Join(directoryPath, fileInfo.Name)); + fileInfo.CopyTo(Path.Join(directoryPath, fileInfo.Name)); } else { _logger.LogWarning("Tried to copy {File} but it doesn't exist", file); } - + } } catch (Exception ex) @@ -202,12 +262,12 @@ namespace API.Services public IEnumerable ListDirectory(string rootPath) { if (!Directory.Exists(rootPath)) return ImmutableList.Empty; - + var di = new DirectoryInfo(rootPath); var dirs = di.GetDirectories() .Where(dir => !(dir.Attributes.HasFlag(FileAttributes.Hidden) || dir.Attributes.HasFlag(FileAttributes.System))) .Select(d => d.Name).ToImmutableList(); - + return dirs; } @@ -326,6 +386,6 @@ namespace API.Services return fileCount; } - + } -} \ No newline at end of file +} diff --git a/API/Services/ImageService.cs b/API/Services/ImageService.cs new file mode 100644 index 000000000..cae176a2d --- /dev/null +++ b/API/Services/ImageService.cs @@ -0,0 +1,71 @@ +using System; +using System.IO; +using System.Linq; +using API.Comparators; +using API.Entities; +using API.Interfaces.Services; +using Microsoft.Extensions.Logging; +using NetVips; + +namespace API.Services +{ + + public class ImageService : IImageService + { + private readonly ILogger _logger; + private readonly IDirectoryService _directoryService; + private readonly NaturalSortComparer _naturalSortComparer; + + public ImageService(ILogger logger, IDirectoryService directoryService) + { + _logger = logger; + _directoryService = directoryService; + _naturalSortComparer = new NaturalSortComparer(); + } + + /// + /// Finds the first image in the directory of the first file. Does not check for "cover/folder".ext files to override. + /// + /// + /// + public string GetCoverFile(MangaFile file) + { + var directory = Path.GetDirectoryName(file.FilePath); + if (string.IsNullOrEmpty(directory)) + { + _logger.LogError("Could not find Directory for {File}", file.FilePath); + return null; + } + + var firstImage = _directoryService.GetFilesWithExtension(directory, Parser.Parser.ImageFileExtensions) + .OrderBy(f => f, _naturalSortComparer).FirstOrDefault(); + + return firstImage; + } + + public byte[] GetCoverImage(string path, bool createThumbnail = false) + { + if (string.IsNullOrEmpty(path)) return Array.Empty(); + + try + { + if (createThumbnail) + { + using var thumbnail = Image.Thumbnail(path, MetadataService.ThumbnailWidth); + return thumbnail.WriteToBuffer(".jpg"); + } + + using var img = Image.NewFromFile(path); + using var stream = new MemoryStream(); + img.JpegsaveStream(stream); + return stream.ToArray(); + } + catch (Exception ex) + { + _logger.LogWarning(ex, "[GetCoverImage] There was an error and prevented thumbnail generation on {ImageFile}. Defaulting to no cover image", path); + } + + return Array.Empty(); + } + } +} diff --git a/API/Services/MetadataService.cs b/API/Services/MetadataService.cs index 6ee2856ab..7d9b143b5 100644 --- a/API/Services/MetadataService.cs +++ b/API/Services/MetadataService.cs @@ -20,16 +20,22 @@ namespace API.Services private readonly ILogger _logger; private readonly IArchiveService _archiveService; private readonly IBookService _bookService; + private readonly IDirectoryService _directoryService; + private readonly IImageService _imageService; private readonly ChapterSortComparer _chapterSortComparer = new ChapterSortComparer(); + public static readonly int ThumbnailWidth = 320; // 153w x 230h - public MetadataService(IUnitOfWork unitOfWork, ILogger logger, IArchiveService archiveService, IBookService bookService) + public MetadataService(IUnitOfWork unitOfWork, ILogger logger, + IArchiveService archiveService, IBookService bookService, IDirectoryService directoryService, IImageService imageService) { _unitOfWork = unitOfWork; _logger = logger; _archiveService = archiveService; _bookService = bookService; + _directoryService = directoryService; + _imageService = imageService; } - + private static bool ShouldFindCoverImage(byte[] coverImage, bool forceUpdate = false) { return forceUpdate || coverImage == null || !coverImage.Any(); @@ -37,23 +43,25 @@ namespace API.Services private byte[] GetCoverImage(MangaFile file, bool createThumbnail = true) { - if (file.Format == MangaFormat.Book) - { + switch (file.Format) + { + case MangaFormat.Book: return _bookService.GetCoverImage(file.FilePath, createThumbnail); - } - else - { - return _archiveService.GetCoverImage(file.FilePath, createThumbnail); - } + case MangaFormat.Image: + var coverImage = _imageService.GetCoverFile(file); + return _imageService.GetCoverImage(coverImage, createThumbnail); + default: + return _archiveService.GetCoverImage(file.FilePath, createThumbnail); + } } public void UpdateMetadata(Chapter chapter, bool forceUpdate) { - var firstFile = chapter.Files.OrderBy(x => x.Chapter).FirstOrDefault(); + var firstFile = chapter.Files.OrderBy(x => x.Chapter).FirstOrDefault(); if (ShouldFindCoverImage(chapter.CoverImage, forceUpdate) && firstFile != null && !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified)) { chapter.Files ??= new List(); - chapter.CoverImage = GetCoverImage(firstFile); + chapter.CoverImage = GetCoverImage(firstFile); } } @@ -88,10 +96,10 @@ namespace API.Services { series.Volumes ??= new List(); var firstCover = series.Volumes.GetCoverImage(series.Library.Type); - byte[] coverImage = null; + byte[] coverImage = null; if (firstCover == null && series.Volumes.Any()) { - // If firstCover is null and one volume, the whole series is Chapters under Vol 0. + // If firstCover is null and one volume, the whole series is Chapters under Vol 0. if (series.Volumes.Count == 1) { coverImage = series.Volumes[0].Chapters.OrderBy(c => double.Parse(c.Number), _chapterSortComparer) @@ -113,24 +121,21 @@ namespace API.Services private void UpdateSeriesSummary(Series series, bool forceUpdate) { if (!string.IsNullOrEmpty(series.Summary) && !forceUpdate) return; - + var isBook = series.Library.Type == LibraryType.Book; var firstVolume = series.Volumes.FirstWithChapters(isBook); var firstChapter = firstVolume?.Chapters.GetFirstChapterWithFiles(); // NOTE: This suffers from code changes not taking effect due to stale data var firstFile = firstChapter?.Files.FirstOrDefault(); - if (firstFile != null && - (forceUpdate || firstFile.HasFileBeenModified())) // !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified) + if (firstFile == null || (!forceUpdate && !firstFile.HasFileBeenModified())) return; + var summary = isBook ? _bookService.GetSummaryInfo(firstFile.FilePath) : _archiveService.GetSummaryInfo(firstFile.FilePath); + if (string.IsNullOrEmpty(series.Summary)) { - var summary = isBook ? _bookService.GetSummaryInfo(firstFile.FilePath) : _archiveService.GetSummaryInfo(firstFile.FilePath); - if (string.IsNullOrEmpty(series.Summary)) - { - series.Summary = summary; - } - - firstFile.LastModified = DateTime.Now; + series.Summary = summary; } + + firstFile.LastModified = DateTime.Now; } @@ -149,7 +154,7 @@ namespace API.Services { UpdateMetadata(chapter, forceUpdate); } - + UpdateMetadata(volume, forceUpdate); } @@ -163,13 +168,13 @@ namespace API.Services _logger.LogInformation("Updated metadata for {LibraryName} in {ElapsedMilliseconds} milliseconds", library.Name, sw.ElapsedMilliseconds); } } - - + + public void RefreshMetadataForSeries(int libraryId, int seriesId) { var sw = Stopwatch.StartNew(); var library = Task.Run(() => _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId)).GetAwaiter().GetResult(); - + var series = library.Series.SingleOrDefault(s => s.Id == seriesId); if (series == null) { @@ -183,7 +188,7 @@ namespace API.Services { UpdateMetadata(chapter, true); } - + UpdateMetadata(volume, true); } @@ -197,4 +202,4 @@ namespace API.Services } } } -} \ No newline at end of file +} diff --git a/API/Services/StatsService.cs b/API/Services/StatsService.cs index 2c315c99d..0e4748845 100644 --- a/API/Services/StatsService.cs +++ b/API/Services/StatsService.cs @@ -133,7 +133,7 @@ namespace API.Services return usageInfo; } - private static ServerInfoDto GetServerInfo() + public static ServerInfoDto GetServerInfo() { var serverInfo = new ServerInfoDto { @@ -183,4 +183,4 @@ namespace API.Services await File.WriteAllTextAsync(FinalPath, dataJson); } } -} \ No newline at end of file +} diff --git a/API/Services/TaskScheduler.cs b/API/Services/TaskScheduler.cs index 61ee114b3..675f51352 100644 --- a/API/Services/TaskScheduler.cs +++ b/API/Services/TaskScheduler.cs @@ -1,4 +1,5 @@ using System.IO; +using System.Threading; using System.Threading.Tasks; using API.Entities.Enums; using API.Helpers.Converters; @@ -24,7 +25,7 @@ namespace API.Services public static BackgroundJobServer Client => new BackgroundJobServer(); - public TaskScheduler(ICacheService cacheService, ILogger logger, IScannerService scannerService, + public TaskScheduler(ICacheService cacheService, ILogger logger, IScannerService scannerService, IUnitOfWork unitOfWork, IMetadataService metadataService, IBackupService backupService, ICleanupService cleanupService, IStatsService statsService) { @@ -41,20 +42,20 @@ namespace API.Services public void ScheduleTasks() { _logger.LogInformation("Scheduling reoccurring tasks"); - + var setting = Task.Run(() => _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.TaskScan)).GetAwaiter().GetResult().Value; if (setting != null) { var scanLibrarySetting = setting; _logger.LogDebug("Scheduling Scan Library Task for {Setting}", scanLibrarySetting); - RecurringJob.AddOrUpdate("scan-libraries", () => _scannerService.ScanLibraries(), + RecurringJob.AddOrUpdate("scan-libraries", () => _scannerService.ScanLibraries(), () => CronConverter.ConvertToCronNotation(scanLibrarySetting)); } else { RecurringJob.AddOrUpdate("scan-libraries", () => _scannerService.ScanLibraries(), Cron.Daily); } - + setting = Task.Run(() => _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.TaskBackup)).Result.Value; if (setting != null) { @@ -65,7 +66,7 @@ namespace API.Services { RecurringJob.AddOrUpdate("backup", () => _backupService.BackupDatabase(), Cron.Weekly); } - + RecurringJob.AddOrUpdate("cleanup", () => _cleanupService.Cleanup(), Cron.Daily); } @@ -80,7 +81,7 @@ namespace API.Services _logger.LogDebug("User has opted out of stat collection, not registering tasks"); return; } - + _logger.LogDebug("Adding StatsTasks"); _logger.LogDebug("Scheduling Send data to the Stats server {Setting}", nameof(Cron.Daily)); @@ -99,9 +100,9 @@ namespace API.Services public void ScanLibrary(int libraryId, bool forceUpdate = false) { _logger.LogInformation("Enqueuing library scan for: {LibraryId}", libraryId); - BackgroundJob.Enqueue(() => _scannerService.ScanLibrary(libraryId, forceUpdate)); + BackgroundJob.Enqueue(() => _scannerService.ScanLibrary(libraryId, forceUpdate)); // When we do a scan, force cache to re-unpack in case page numbers change - BackgroundJob.Enqueue(() => _cleanupService.Cleanup()); + BackgroundJob.Enqueue(() => _cleanupService.Cleanup()); } public void CleanupChapters(int[] chapterIds) @@ -112,19 +113,25 @@ namespace API.Services public void RefreshMetadata(int libraryId, bool forceUpdate = true) { _logger.LogInformation("Enqueuing library metadata refresh for: {LibraryId}", libraryId); - BackgroundJob.Enqueue((() => _metadataService.RefreshMetadata(libraryId, forceUpdate))); + BackgroundJob.Enqueue(() => _metadataService.RefreshMetadata(libraryId, forceUpdate)); } public void CleanupTemp() { var tempDirectory = Path.Join(Directory.GetCurrentDirectory(), "temp"); - BackgroundJob.Enqueue((() => DirectoryService.ClearDirectory(tempDirectory))); + BackgroundJob.Enqueue(() => DirectoryService.ClearDirectory(tempDirectory)); } public void RefreshSeriesMetadata(int libraryId, int seriesId) { _logger.LogInformation("Enqueuing series metadata refresh for: {SeriesId}", seriesId); - BackgroundJob.Enqueue((() => _metadataService.RefreshMetadataForSeries(libraryId, seriesId))); + BackgroundJob.Enqueue(() => _metadataService.RefreshMetadataForSeries(libraryId, seriesId)); + } + + public void ScanSeries(int libraryId, int seriesId, bool forceUpdate = false) + { + _logger.LogInformation("Enqueuing series scan for: {SeriesId}", seriesId); + BackgroundJob.Enqueue(() => _scannerService.ScanSeries(libraryId, seriesId, forceUpdate, CancellationToken.None)); } public void BackupDatabase() @@ -132,4 +139,4 @@ namespace API.Services BackgroundJob.Enqueue(() => _backupService.BackupDatabase()); } } -} \ No newline at end of file +} diff --git a/API/Services/Tasks/ScannerService.cs b/API/Services/Tasks/ScannerService.cs index 232e8fce0..7febcd9d3 100644 --- a/API/Services/Tasks/ScannerService.cs +++ b/API/Services/Tasks/ScannerService.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Threading; using System.Threading.Tasks; using API.Comparators; using API.Data; @@ -28,7 +29,7 @@ namespace API.Services.Tasks private ConcurrentDictionary> _scannedSeries; private readonly NaturalSortComparer _naturalSort; - public ScannerService(IUnitOfWork unitOfWork, ILogger logger, IArchiveService archiveService, + public ScannerService(IUnitOfWork unitOfWork, ILogger logger, IArchiveService archiveService, IMetadataService metadataService, IBookService bookService) { _unitOfWork = unitOfWork; @@ -39,6 +40,86 @@ namespace API.Services.Tasks _naturalSort = new NaturalSortComparer(); } + [DisableConcurrentExecution(timeoutInSeconds: 360)] + [AutomaticRetry(Attempts = 0, OnAttemptsExceeded = AttemptsExceededAction.Delete)] + public async Task ScanSeries(int libraryId, int seriesId, bool forceUpdate, CancellationToken token) + { + var files = await _unitOfWork.SeriesRepository.GetFilesForSeries(seriesId); + var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(seriesId); + var library = await _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId, seriesId); + var dirs = FindHighestDirectoriesFromFiles(library, files); + + _logger.LogInformation("Beginning file scan on {SeriesName}", series.Name); + // TODO: We can't have a global variable if multiple scans are taking place. Refactor this. + _scannedSeries = new ConcurrentDictionary>(); + var parsedSeries = ScanLibrariesForSeries(library.Type, dirs.Keys, out var totalFiles, out var scanElapsedTime); + + // If a root level folder scan occurs, then multiple series gets passed in and thus we get a unique constraint issue + // Hence we clear out anything but what we selected for + var firstSeries = library.Series.FirstOrDefault(); + var keys = parsedSeries.Keys; + foreach (var key in keys.Where(key => !firstSeries.NameInParserInfo(parsedSeries[key].FirstOrDefault()))) + { + parsedSeries.Remove(key); + } + + var sw = new Stopwatch(); + UpdateLibrary(library, parsedSeries); + + _unitOfWork.LibraryRepository.Update(library); + if (await _unitOfWork.CommitAsync()) + { + _logger.LogInformation( + "Processed {TotalFiles} files and {ParsedSeriesCount} series in {ElapsedScanTime} milliseconds for {SeriesName}", + totalFiles, parsedSeries.Keys.Count, sw.ElapsedMilliseconds + scanElapsedTime, series.Name); + CleanupUserProgress(); + BackgroundJob.Enqueue(() => _metadataService.RefreshMetadata(libraryId, forceUpdate)); + } + else + { + _logger.LogCritical( + "There was a critical error that resulted in a failed scan. Please check logs and rescan"); + await _unitOfWork.RollbackAsync(); + } + } + + /// + /// Finds the highest directories from a set of MangaFiles + /// + /// + /// + /// + private static Dictionary FindHighestDirectoriesFromFiles(Library library, IList files) + { + var stopLookingForDirectories = false; + var dirs = new Dictionary(); + foreach (var folder in library.Folders) + { + if (stopLookingForDirectories) break; + foreach (var file in files) + { + if (!file.FilePath.Contains(folder.Path)) continue; + + var parts = DirectoryService.GetFoldersTillRoot(folder.Path, file.FilePath).ToList(); + if (parts.Count == 0) + { + // Break from all loops, we done, just scan folder.Path (library root) + dirs.Add(folder.Path, string.Empty); + stopLookingForDirectories = true; + break; + } + + var fullPath = Path.Join(folder.Path, parts.Last()); + if (!dirs.ContainsKey(fullPath)) + { + dirs.Add(fullPath, string.Empty); + } + } + } + + return dirs; + } + [DisableConcurrentExecution(timeoutInSeconds: 360)] [AutomaticRetry(Attempts = 0, OnAttemptsExceeded = AttemptsExceededAction.Delete)] @@ -51,51 +132,46 @@ namespace API.Services.Tasks } } - private bool ShouldSkipFolderScan(FolderPath folder, ref int skippedFolders) - { - // NOTE: The only way to skip folders is if Directory hasn't been modified, we aren't doing a forcedUpdate and version hasn't changed between scans. - return false; - - // if (!_forceUpdate && Directory.GetLastWriteTime(folder.Path) < folder.LastScanned) - // { - // _logger.LogDebug("{FolderPath} hasn't been modified since last scan. Skipping", folder.Path); - // skippedFolders += 1; - // return true; - // } - - //return false; - } [DisableConcurrentExecution(360)] [AutomaticRetry(Attempts = 0, OnAttemptsExceeded = AttemptsExceededAction.Delete)] public void ScanLibrary(int libraryId, bool forceUpdate) { - var sw = Stopwatch.StartNew(); - _scannedSeries = new ConcurrentDictionary>(); - Library library; + _scannedSeries = new ConcurrentDictionary>(); + Library library; try { - library = Task.Run(() => _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId)).GetAwaiter().GetResult(); + library = Task.Run(() => _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId)).GetAwaiter() + .GetResult(); } catch (Exception ex) { - // This usually only fails if user is not authenticated. - _logger.LogError(ex, "There was an issue fetching Library {LibraryId}", libraryId); - return; + // This usually only fails if user is not authenticated. + _logger.LogError(ex, "There was an issue fetching Library {LibraryId}", libraryId); + return; } - - - var series = ScanLibrariesForSeries(forceUpdate, library, sw, out var totalFiles, out var scanElapsedTime); + + _logger.LogInformation("Beginning file scan on {LibraryName}", library.Name); + var series = ScanLibrariesForSeries(library.Type, library.Folders.Select(fp => fp.Path), out var totalFiles, out var scanElapsedTime); + foreach (var folderPath in library.Folders) + { + folderPath.LastScanned = DateTime.Now; + } + var sw = Stopwatch.StartNew(); + UpdateLibrary(library, series); - + _unitOfWork.LibraryRepository.Update(library); if (Task.Run(() => _unitOfWork.CommitAsync()).Result) { - _logger.LogInformation("Processed {TotalFiles} files and {ParsedSeriesCount} series in {ElapsedScanTime} milliseconds for {LibraryName}", totalFiles, series.Keys.Count, sw.ElapsedMilliseconds + scanElapsedTime, library.Name); + _logger.LogInformation( + "Processed {TotalFiles} files and {ParsedSeriesCount} series in {ElapsedScanTime} milliseconds for {LibraryName}", + totalFiles, series.Keys.Count, sw.ElapsedMilliseconds + scanElapsedTime, library.Name); } else { - _logger.LogCritical("There was a critical error that resulted in a failed scan. Please check logs and rescan"); + _logger.LogCritical( + "There was a critical error that resulted in a failed scan. Please check logs and rescan"); } CleanupUserProgress(); @@ -112,61 +188,59 @@ namespace API.Services.Tasks _logger.LogInformation("Removed {Count} abandoned progress rows", cleanedUp); } - private Dictionary> ScanLibrariesForSeries(bool forceUpdate, Library library, Stopwatch sw, out int totalFiles, + /// + /// + /// + /// Type of library. Used for selecting the correct file extensions to search for and parsing files + /// The folders to scan. By default, this should be library.Folders, however it can be overwritten to restrict folders + /// Total files scanned + /// Time it took to scan and parse files + /// + private Dictionary> ScanLibrariesForSeries(LibraryType libraryType, IEnumerable folders, out int totalFiles, out long scanElapsedTime) { - _logger.LogInformation("Beginning scan on {LibraryName}. Forcing metadata update: {ForceUpdate}", library.Name, - forceUpdate); - totalFiles = 0; - var skippedFolders = 0; - foreach (var folderPath in library.Folders) - { - if (ShouldSkipFolderScan(folderPath, ref skippedFolders)) continue; - - // NOTE: we can refactor this to allow all filetypes and handle everything in the ProcessFile to allow mixed library types. - var searchPattern = Parser.Parser.ArchiveFileExtensions; - if (library.Type == LibraryType.Book) - { - searchPattern = Parser.Parser.BookFileExtensions; - } - - try - { - totalFiles += DirectoryService.TraverseTreeParallelForEach(folderPath.Path, (f) => - { - try + var sw = Stopwatch.StartNew(); + totalFiles = 0; + var searchPattern = GetLibrarySearchPattern(libraryType); + foreach (var folderPath in folders) + { + try + { + totalFiles += DirectoryService.TraverseTreeParallelForEach(folderPath, (f) => { - ProcessFile(f, folderPath.Path, library.Type); - } - catch (FileNotFoundException exception) - { - _logger.LogError(exception, "The file {Filename} could not be found", f); - } - }, searchPattern, _logger); - } - catch (ArgumentException ex) - { - _logger.LogError(ex, "The directory '{FolderPath}' does not exist", folderPath.Path); - } + try + { + ProcessFile(f, folderPath, libraryType); + } + catch (FileNotFoundException exception) + { + _logger.LogError(exception, "The file {Filename} could not be found", f); + } + }, searchPattern, _logger); + } + catch (ArgumentException ex) + { + _logger.LogError(ex, "The directory '{FolderPath}' does not exist", folderPath); + } + } - folderPath.LastScanned = DateTime.Now; - } + scanElapsedTime = sw.ElapsedMilliseconds; + _logger.LogInformation("Scanned {TotalFiles} files in {ElapsedScanTime} milliseconds", totalFiles, + scanElapsedTime); - scanElapsedTime = sw.ElapsedMilliseconds; - _logger.LogInformation("Folders Scanned {TotalFiles} files in {ElapsedScanTime} milliseconds", totalFiles, - scanElapsedTime); - sw.Restart(); - if (skippedFolders == library.Folders.Count) - { - _logger.LogInformation("All Folders were skipped due to no modifications to the directories"); - _unitOfWork.LibraryRepository.Update(library); - _scannedSeries = null; - _logger.LogInformation("Processed {TotalFiles} files in {ElapsedScanTime} milliseconds for {LibraryName}", - totalFiles, sw.ElapsedMilliseconds, library.Name); - return new Dictionary>(); - } - - return SeriesWithInfos(_scannedSeries); + return SeriesWithInfos(_scannedSeries); + } + + private static string GetLibrarySearchPattern(LibraryType libraryType) + { + var searchPattern = libraryType switch + { + LibraryType.Book => Parser.Parser.BookFileExtensions, + LibraryType.MangaImages or LibraryType.ComicImages => Parser.Parser.ImageFileExtensions, + _ => Parser.Parser.ArchiveFileExtensions + }; + + return searchPattern; } /// @@ -181,7 +255,7 @@ namespace API.Services.Tasks return series; } - + private void UpdateLibrary(Library library, Dictionary> parsedSeries) { if (parsedSeries == null) throw new ArgumentNullException(nameof(parsedSeries)); @@ -197,8 +271,8 @@ namespace API.Services.Tasks _logger.LogDebug("Removed {SeriesName}", s.Name); } } - - + + // Add new series that have parsedInfos foreach (var (key, infos) in parsedSeries) { @@ -215,7 +289,6 @@ namespace API.Services.Tasks foreach (var series in duplicateSeries) { _logger.LogCritical("{Key} maps with {Series}", key, series.OriginalName); - } continue; @@ -225,7 +298,7 @@ namespace API.Services.Tasks existingSeries = DbFactory.Series(infos[0].Series); library.Series.Add(existingSeries); } - + existingSeries.NormalizedName = Parser.Parser.Normalize(existingSeries.Name); existingSeries.OriginalName ??= infos[0].Series; existingSeries.Metadata ??= DbFactory.SeriesMetadata(new List()); @@ -240,7 +313,6 @@ namespace API.Services.Tasks _logger.LogInformation("Processing series {SeriesName}", series.OriginalName); UpdateVolumes(series, parsedSeries[Parser.Parser.Normalize(series.OriginalName)].ToArray()); series.Pages = series.Volumes.Sum(v => v.Pages); - // Test } catch (Exception ex) { @@ -267,13 +339,13 @@ namespace API.Services.Tasks { var existingCount = existingSeries.Count; var missingList = missingSeries.ToList(); - + existingSeries = existingSeries.Where( s => !missingList.Exists( m => m.NormalizedName.Equals(s.NormalizedName))).ToList(); removeCount = existingCount - existingSeries.Count; - + return existingSeries; } @@ -291,15 +363,15 @@ namespace API.Services.Tasks volume = DbFactory.Volume(volumeNumber); series.Volumes.Add(volume); } - + // NOTE: Instead of creating and adding? Why Not Merge a new volume into an existing, so no matter what, new properties,etc get propagated? - + _logger.LogDebug("Parsing {SeriesName} - Volume {VolumeNumber}", series.Name, volume.Name); var infos = parsedInfos.Where(p => p.Volumes == volumeNumber).ToArray(); UpdateChapters(volume, infos); volume.Pages = volume.Chapters.Sum(c => c.Pages); } - + // Remove existing volumes that aren't in parsedInfos var nonDeletedVolumes = series.Volumes.Where(v => parsedInfos.Select(p => p.Volumes).Contains(v.Name)).ToList(); if (series.Volumes.Count != nonDeletedVolumes.Count) @@ -320,12 +392,12 @@ namespace API.Services.Tasks series.Volumes = nonDeletedVolumes; } - _logger.LogDebug("Updated {SeriesName} volumes from {StartingVolumeCount} to {VolumeCount}", + _logger.LogDebug("Updated {SeriesName} volumes from {StartingVolumeCount} to {VolumeCount}", series.Name, startingVolumeCount, series.Volumes.Count); } - + /// - /// + /// /// /// /// @@ -346,7 +418,7 @@ namespace API.Services.Tasks _logger.LogError(ex, "{FileName} mapped as '{Series} - Vol {Volume} Ch {Chapter}' is a duplicate, skipping", info.FullFilePath, info.Series, info.Volumes, info.Chapters); continue; } - + if (chapter == null) { _logger.LogDebug( @@ -357,9 +429,9 @@ namespace API.Services.Tasks { chapter.UpdateFrom(info); } - + } - + // Add files foreach (var info in parsedInfos) { @@ -379,8 +451,8 @@ namespace API.Services.Tasks chapter.Number = Parser.Parser.MinimumNumberFromRange(info.Chapters) + string.Empty; chapter.Range = specialTreatment ? info.Filename : info.Chapters; } - - + + // Remove chapters that aren't in parsedInfos or have no files linked var existingChapters = volume.Chapters.ToList(); foreach (var existingChapter in existingChapters) @@ -403,15 +475,16 @@ namespace API.Services.Tasks /// /// Attempts to either add a new instance of a show mapping to the _scannedSeries bag or adds to an existing. + /// This will check if the name matches an existing series name (multiple fields) /// /// private void TrackSeries(ParserInfo info) { if (info.Series == string.Empty) return; - + // Check if normalized info.Series already exists and if so, update info to use that name instead info.Series = MergeName(_scannedSeries, info); - + _scannedSeries.AddOrUpdate(Parser.Parser.Normalize(info.Series), new List() {info}, (_, oldValue) => { oldValue ??= new List(); @@ -424,14 +497,20 @@ namespace API.Services.Tasks }); } + /// + /// Using a normalized name from the passed ParserInfo, this checks against all found series so far and if an existing one exists with + /// same normalized name, it merges into the existing one. This is important as some manga may have a slight difference with punctuation or capitalization. + /// + /// + /// + /// public string MergeName(ConcurrentDictionary> collectedSeries, ParserInfo info) { var normalizedSeries = Parser.Parser.Normalize(info.Series); _logger.LogDebug("Checking if we can merge {NormalizedSeries}", normalizedSeries); var existingName = collectedSeries.SingleOrDefault(p => Parser.Parser.Normalize(p.Key) == normalizedSeries) .Key; - // BUG: We are comparing info.Series against a normalized string. They should never match. (This can cause series to not delete or parse correctly after a rename) - if (!string.IsNullOrEmpty(existingName)) // && info.Series != existingName + if (!string.IsNullOrEmpty(existingName)) { _logger.LogDebug("Found duplicate parsed infos, merged {Original} into {Merged}", info.Series, existingName); return existingName; @@ -450,7 +529,7 @@ namespace API.Services.Tasks private void ProcessFile(string path, string rootPath, LibraryType type) { ParserInfo info; - + if (type == LibraryType.Book && Parser.Parser.IsEpub(path)) { info = _bookService.ParseInfo(path); @@ -465,14 +544,14 @@ namespace API.Services.Tasks _logger.LogWarning("[Scanner] Could not parse series from {Path}", path); return; } - + if (type == LibraryType.Book && Parser.Parser.IsEpub(path) && Parser.Parser.ParseVolume(info.Series) != Parser.Parser.DefaultVolume) { info = Parser.Parser.Parse(path, rootPath, type); var info2 = _bookService.ParseInfo(path); info.Merge(info2); } - + TrackSeries(info); } @@ -498,6 +577,15 @@ namespace API.Services.Tasks Pages = _bookService.GetNumberOfPages(info.FullFilePath) }; } + case MangaFormat.Image: + { + return new MangaFile() + { + FilePath = info.FullFilePath, + Format = info.Format, + Pages = 1 + }; + } default: _logger.LogWarning("[Scanner] Ignoring {Filename}. Non-archives are not supported", info.Filename); break; @@ -505,7 +593,7 @@ namespace API.Services.Tasks return null; } - + private void AddOrUpdateFileForChapter(Chapter chapter, ParserInfo info) { chapter.Files ??= new List(); @@ -515,8 +603,8 @@ namespace API.Services.Tasks existingFile.Format = info.Format; if (!existingFile.HasFileBeenModified() && existingFile.Pages > 0) { - existingFile.Pages = existingFile.Format == MangaFormat.Book - ? _bookService.GetNumberOfPages(info.FullFilePath) + existingFile.Pages = existingFile.Format == MangaFormat.Book + ? _bookService.GetNumberOfPages(info.FullFilePath) : _archiveService.GetNumberOfPagesFromArchive(info.FullFilePath); } } @@ -536,4 +624,4 @@ namespace API.Services.Tasks } } } -} \ No newline at end of file +} diff --git a/API/Startup.cs b/API/Startup.cs index f2b648d24..5fdafb448 100644 --- a/API/Startup.cs +++ b/API/Startup.cs @@ -52,18 +52,18 @@ namespace API { options.Providers.Add(); options.Providers.Add(); - options.MimeTypes = + options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "image/jpeg", "image/jpg" }); options.EnableForHttps = true; }); - services.Configure(options => + services.Configure(options => { options.Level = CompressionLevel.Fastest; }); - + services.AddResponseCaching(); - + services.AddStatsClient(_config); services.AddHangfire(configuration => configuration @@ -80,7 +80,7 @@ namespace API } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs, IWebHostEnvironment env, + public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs, IWebHostEnvironment env, IHostApplicationLifetime applicationLifetime) { app.UseMiddleware(); @@ -91,19 +91,19 @@ namespace API app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1")); app.UseHangfireDashboard(); } - + app.UseResponseCompression(); - + app.UseForwardedHeaders(); app.UseRouting(); - + // Ordering is important. Cors, authentication, authorization if (env.IsDevelopment()) { app.UseCors(policy => policy.AllowAnyHeader().AllowAnyMethod().WithOrigins("http://localhost:4200")); } - + app.UseResponseCaching(); app.UseAuthentication(); @@ -116,18 +116,18 @@ namespace API { ContentTypeProvider = new FileExtensionContentTypeProvider() }); - + app.Use(async (context, next) => { - context.Response.GetTypedHeaders().CacheControl = + context.Response.GetTypedHeaders().CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue() { Public = false, MaxAge = TimeSpan.FromSeconds(10) }; - context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] = + context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] = new[] { "Accept-Encoding" }; - + await next(); }); @@ -137,14 +137,14 @@ namespace API endpoints.MapHangfireDashboard(); endpoints.MapFallbackToController("Index", "Fallback"); }); - + applicationLifetime.ApplicationStopping.Register(OnShutdown); applicationLifetime.ApplicationStarted.Register(() => { Console.WriteLine($"Kavita - v{BuildInfo.Version}"); }); } - + private void OnShutdown() { Console.WriteLine("Server is shutting down. Please allow a few seconds to stop any background jobs..."); @@ -152,7 +152,7 @@ namespace API System.Threading.Thread.Sleep(1000); Console.WriteLine("You may now close the application window."); } - - + + } } diff --git a/Kavita.Common/Extensions/EnumExtensions.cs b/Kavita.Common/Extensions/EnumExtensions.cs new file mode 100644 index 000000000..d35aeb805 --- /dev/null +++ b/Kavita.Common/Extensions/EnumExtensions.cs @@ -0,0 +1,21 @@ +using System.ComponentModel; + +namespace Kavita.Common.Extensions +{ + public static class EnumExtensions + { + public static string ToDescription(this TEnum value) where TEnum : struct + { + var fi = value.GetType().GetField(value.ToString() ?? string.Empty); + + if (fi == null) + { + return value.ToString(); + } + + var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); + + return attributes is {Length: > 0} ? attributes[0].Description : value.ToString(); + } + } +} diff --git a/Kavita.Common/Extensions/PathExtensions.cs b/Kavita.Common/Extensions/PathExtensions.cs new file mode 100644 index 000000000..5ebb96673 --- /dev/null +++ b/Kavita.Common/Extensions/PathExtensions.cs @@ -0,0 +1,12 @@ +using System.IO; + +namespace Kavita.Common.Extensions +{ + public static class PathExtensions + { + public static string GetParentDirectory(string filePath) + { + return Path.GetDirectoryName(filePath); + } + } +} diff --git a/Kavita.Common/HashUtil.cs b/Kavita.Common/HashUtil.cs index ff02d7d32..b83068f5f 100644 --- a/Kavita.Common/HashUtil.cs +++ b/Kavita.Common/HashUtil.cs @@ -5,7 +5,7 @@ namespace Kavita.Common { public static class HashUtil { - public static string CalculateCrc(string input) + private static string CalculateCrc(string input) { uint mCrc = 0xffffffff; byte[] bytes = Encoding.UTF8.GetBytes(input); @@ -28,10 +28,14 @@ namespace Kavita.Common return $"{mCrc:x8}"; } + /// + /// Calculates a unique, Anonymous Token that will represent this unique Kavita installation. + /// + /// public static string AnonymousToken() { var seed = $"{Environment.ProcessorCount}_{Environment.OSVersion.Platform}_{Environment.MachineName}_{Environment.UserName}"; - return HashUtil.CalculateCrc(seed); + return CalculateCrc(seed); } } -} \ No newline at end of file +} diff --git a/Kavita.Common/Kavita.Common.csproj b/Kavita.Common/Kavita.Common.csproj index 3b92d09f8..b19d8551f 100644 --- a/Kavita.Common/Kavita.Common.csproj +++ b/Kavita.Common/Kavita.Common.csproj @@ -2,21 +2,16 @@ net5.0 - kareadita.github.io + kavitareader.com Kavita - 0.4.2.0 + 0.4.2.1 en - + - - - D:\Program Files\JetBrains\JetBrains Rider 2020.3.2\lib\ReSharperHost\TestRunner\netcoreapp2.0\JetBrains.ReSharper.TestRunner.Merged.dll - - diff --git a/UI/Web/LICENSE b/UI/Web/LICENSE new file mode 100644 index 000000000..a28fa47ea --- /dev/null +++ b/UI/Web/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/UI/Web/README.md b/UI/Web/README.md new file mode 100644 index 000000000..083807057 --- /dev/null +++ b/UI/Web/README.md @@ -0,0 +1,27 @@ +# Kavita Webui + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.0.0. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/UI/Web/angular.json b/UI/Web/angular.json new file mode 100644 index 000000000..dd8270c0f --- /dev/null +++ b/UI/Web/angular.json @@ -0,0 +1,139 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "kavita-webui": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + }, + "@schematics/angular:application": { + "strict": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "aot": true, + "assets": [ + "src/assets", + "src/site.webmanifest" + ], + "sourceMap": { + "hidden": false, + "scripts": true, + "styles": true + }, + "styles": [ + "src/styles.scss", + "node_modules/@fortawesome/fontawesome-free/css/all.min.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": true, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "1mb", + "maximumError": "2mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "sslKey": "./ssl/server.key", + "sslCert": "./ssl/server.crt", + "ssl": false, + "browserTarget": "kavita-webui:build" + }, + "configurations": { + "production": { + "browserTarget": "kavita-webui:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "kavita-webui:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/assets", + "src/site.webmanifest" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "tsconfig.app.json", + "tsconfig.spec.json", + "e2e/tsconfig.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "kavita-webui:serve" + }, + "configurations": { + "production": { + "devServerTarget": "kavita-webui:serve:production" + } + } + } + } + } + }, + "defaultProject": "kavita-webui" +} \ No newline at end of file diff --git a/UI/Web/e2e/protractor.conf.js b/UI/Web/e2e/protractor.conf.js new file mode 100644 index 000000000..361e7f0cd --- /dev/null +++ b/UI/Web/e2e/protractor.conf.js @@ -0,0 +1,37 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + SELENIUM_PROMISE_MANAGER: false, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ + spec: { + displayStacktrace: StacktraceOption.PRETTY + } + })); + } +}; \ No newline at end of file diff --git a/UI/Web/e2e/src/app.e2e-spec.ts b/UI/Web/e2e/src/app.e2e-spec.ts new file mode 100644 index 000000000..fb7ac99be --- /dev/null +++ b/UI/Web/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', async () => { + await page.navigateTo(); + expect(await page.getTitleText()).toEqual('kavita-webui app is running!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/UI/Web/e2e/src/app.po.ts b/UI/Web/e2e/src/app.po.ts new file mode 100644 index 000000000..c9c85ab9a --- /dev/null +++ b/UI/Web/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + async navigateTo(): Promise { + return browser.get(browser.baseUrl); + } + + async getTitleText(): Promise { + return element(by.css('app-root .content span')).getText(); + } +} diff --git a/UI/Web/e2e/tsconfig.json b/UI/Web/e2e/tsconfig.json new file mode 100644 index 000000000..0782539c0 --- /dev/null +++ b/UI/Web/e2e/tsconfig.json @@ -0,0 +1,13 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es2018", + "types": [ + "jasmine", + "node" + ] + } +} diff --git a/UI/Web/package-lock.json b/UI/Web/package-lock.json new file mode 100644 index 000000000..57c6fee31 --- /dev/null +++ b/UI/Web/package-lock.json @@ -0,0 +1,37201 @@ +{ + "name": "kavita-webui", + "version": "0.4.2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "kavita-webui", + "version": "0.4.2", + "dependencies": { + "@angular-slider/ngx-slider": "^2.0.3", + "@angular/animations": "~11.0.0", + "@angular/common": "~11.0.0", + "@angular/compiler": "~11.0.0", + "@angular/core": "~11.0.0", + "@angular/forms": "~11.0.0", + "@angular/localize": "~11.0.0", + "@angular/platform-browser": "~11.0.0", + "@angular/platform-browser-dynamic": "~11.0.0", + "@angular/router": "~11.0.0", + "@fortawesome/fontawesome-free": "^5.15.1", + "@ng-bootstrap/ng-bootstrap": "^9.1.0", + "@ngx-lite/nav-drawer": "^0.4.6", + "@ngx-lite/util": "0.0.0", + "@sentry/angular": "^6.4.1", + "@sentry/integrations": "^6.4.1", + "@types/file-saver": "^2.0.1", + "angular-ng-autocomplete": "^2.0.5", + "bootstrap": "^4.5.0", + "bowser": "^2.11.0", + "file-saver": "^2.0.5", + "ng-lazyload-image": "^9.1.0", + "ng-sidebar": "^9.4.2", + "ngx-toastr": "^13.2.1", + "rxjs": "~6.6.0", + "swiper": "^6.5.8", + "tslib": "^2.0.0", + "zone.js": "~0.10.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.1100.0", + "@angular/cli": "^11.2.11", + "@angular/compiler-cli": "~11.0.0", + "@types/jest": "^26.0.20", + "@types/node": "^12.11.1", + "codelyzer": "^6.0.0", + "jest": "^26.6.3", + "jest-preset-angular": "^8.3.2", + "karma-coverage": "~2.0.3", + "protractor": "~7.0.0", + "ts-node": "~8.3.0", + "tslint": "^6.1.3", + "typescript": "~4.0.2" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1100.7.tgz", + "integrity": "sha512-b2zv2yiRbdhJ7hJfZsAvGYcqgh2DVtc7gRIPo1eDPvOAKrenmZ4zo/v0PRYScrTsPzqmoCokNA5nIwufwUEnuA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "11.0.7", + "rxjs": "6.6.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1100.7.tgz", + "integrity": "sha512-erc+AtSU46ZIX7A5dmeZ0/G/SQIbqMAGbTKZbf11GePyhT0JAAnfMQtOHMb6AaX85n4yQTg1uMo9f5+8V3lfKA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1100.7", + "@angular-devkit/build-optimizer": "0.1100.7", + "@angular-devkit/build-webpack": "0.1100.7", + "@angular-devkit/core": "11.0.7", + "@babel/core": "7.12.3", + "@babel/generator": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/runtime": "7.12.1", + "@babel/template": "7.10.4", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "11.0.7", + "ansi-colors": "4.1.1", + "autoprefixer": "9.8.6", + "babel-loader": "8.1.0", + "browserslist": "^4.9.1", + "cacache": "15.0.5", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.0", + "copy-webpack-plugin": "6.2.1", + "core-js": "3.6.5", + "css-loader": "4.3.0", + "cssnano": "4.1.10", + "file-loader": "6.1.1", + "find-cache-dir": "3.3.1", + "glob": "7.1.6", + "inquirer": "7.3.3", + "jest-worker": "26.5.0", + "karma-source-map-support": "1.4.0", + "less": "3.12.2", + "less-loader": "7.0.2", + "license-webpack-plugin": "2.3.1", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "1.2.1", + "minimatch": "3.0.4", + "open": "7.3.0", + "ora": "5.1.0", + "parse5-html-rewriting-stream": "6.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "7.0.32", + "postcss-import": "12.0.1", + "postcss-loader": "4.0.4", + "raw-loader": "4.0.2", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "3.1.2", + "rimraf": "3.0.2", + "rollup": "2.32.1", + "rxjs": "6.6.3", + "sass": "1.27.0", + "sass-loader": "10.0.5", + "semver": "7.3.2", + "source-map": "0.7.3", + "source-map-loader": "1.1.2", + "source-map-support": "0.5.19", + "speed-measure-webpack-plugin": "1.3.3", + "style-loader": "2.0.0", + "stylus": "0.54.8", + "stylus-loader": "4.3.1", + "terser": "5.3.7", + "terser-webpack-plugin": "4.2.3", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "webpack": "4.44.2", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.11.0", + "webpack-merge": "5.2.0", + "webpack-sources": "2.0.1", + "webpack-subresource-integrity": "1.5.1", + "worker-plugin": "5.0.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^11.0.0", + "@angular/localize": "^11.0.0", + "karma": "~5.1.0", + "ng-packagr": "^11.0.0", + "protractor": "^7.0.0", + "tslint": "^6.1.0", + "typescript": "~4.0.0" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tslint": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-optimizer": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.7.tgz", + "integrity": "sha512-bHIIub0d1trVAmAX/EaNR6Zo4b7hkscewK394qYYp/w8VKQkLSAPMUbt2YTWN+erR9yyHnJ2y7tBabIui75Wdw==", + "dev": true, + "dependencies": { + "loader-utils": "2.0.0", + "source-map": "0.7.3", + "tslib": "2.0.3", + "typescript": "4.0.5", + "webpack-sources": "2.0.1" + }, + "bin": { + "build-optimizer": "src/build-optimizer/cli.js" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1100.7.tgz", + "integrity": "sha512-/6Hudd1hs/GMHX4C/Qk7jueIMNg8NKFJWDEbvMPMgDzTqUIa680PTD6SNSCcY5Cz9mEpdpYCZo5N31JB7dlpOg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1100.7", + "@angular-devkit/core": "11.0.7", + "rxjs": "6.6.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^4.6.0", + "webpack-dev-server": "^3.1.4" + } + }, + "node_modules/@angular-devkit/core": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.7.tgz", + "integrity": "sha512-1GKnIT++YSUHpzzRx9QC0+8yOw4wy+ZpiJVDlroPSeK4FGrTCJqJKenkfRjVFRFOSrzTiJds+IU6kI4+bFbw9g==", + "dev": true, + "dependencies": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.11.tgz", + "integrity": "sha512-xkw+5P9V7VdV/X3Eko0/oZmEqelenIT1RdaOlFA3ZLCdT6bz+79HjeChMy++JcLjVNRcLYQSw0ULByq2q/S2Pw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "11.2.11", + "ora": "5.3.0", + "rxjs": "6.6.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "dependencies": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@angular-devkit/schematics/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-slider/ngx-slider": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@angular-slider/ngx-slider/-/ngx-slider-2.0.3.tgz", + "integrity": "sha512-5NSHsYtHomBgJyPe7KtxTAJDLywHbuTb36NjD3dafbbj1VUbshX1m04d4JcyEiAB+Zeetcjkiy4jxQypUXYhHA==", + "dependencies": { + "detect-passive-events": "^1.0.4", + "rxjs": "^6.5.2", + "rxjs-compat": "^6.5.2", + "tslib": "^1.9.0" + } + }, + "node_modules/@angular-slider/ngx-slider/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@angular/animations": { + "version": "11.0.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.0.9.tgz", + "integrity": "sha512-/KsMBUbRTqp29CNLbRIe4/8IxWxhnbUUZWqULaySnRDDW/p2m4miPcFVSp4zjrDZPqdXSibDiCyTiWmQ5PTuKA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "11.0.9" + } + }, + "node_modules/@angular/cli": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.11.tgz", + "integrity": "sha512-KzpRaCaHUwznlm6Iz/DvWqZs1fQx+NpJsiEOtKz7ijKoktJq+qcxAcBr2A4sNAuuAMgs0Xqy70EHvbMPA1yQ9A==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1102.11", + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", + "@schematics/angular": "11.2.11", + "@schematics/update": "0.1102.11", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.3.1", + "ini": "2.0.0", + "inquirer": "7.3.3", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.0", + "npm-pick-manifest": "6.1.0", + "open": "7.4.0", + "ora": "5.3.0", + "pacote": "11.2.4", + "resolve": "1.19.0", + "rimraf": "3.0.2", + "semver": "7.3.4", + "symbol-observable": "3.0.0", + "universal-analytics": "0.4.23", + "uuid": "8.3.2" + }, + "bin": { + "ng": "bin/ng" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.11.tgz", + "integrity": "sha512-1MoUSz7zNJomUUuzbIyBSprzbWa9eF97SRDEbllYHHXY/IWWetHGNK7gkJPyW0zgKhXIc5Sq4TJKIJKWPNh00Q==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "11.2.11", + "rxjs": "6.6.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "dependencies": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/cli/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@angular/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@angular/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/cli/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/open": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.0.tgz", + "integrity": "sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/cli/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/cli/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@angular/common": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.4.tgz", + "integrity": "sha512-4R2ALj71J6EAHVCKNnHHCKL7wcosMsv3gcMXbMTE+Wpzo3khEhM0Tej+I1qmMbVmGXVlRb//4+rjE4gff6FvQw==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/compiler": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.4.tgz", + "integrity": "sha512-Smf8FKSjkqd522ZCdXjSnVv1lYA0b21AN3WC5L1mwtRwyl/VacqCA/YEklLneDGgI2FdSIC9+bzSQIV+CCVftA==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.4.tgz", + "integrity": "sha512-FV010O6GAldRe5sr+qegHe7oLinTylES70NX+0PIp44/W4tPx75Zvop+FVT90I4xPcvFvteLemy8nFAnMK+x5g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.6", + "@babel/types": "^7.8.6", + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "fs-extra": "4.0.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^6.3.0", + "source-map": "^0.6.1", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.0.0", + "yargs": "^16.1.1" + }, + "bin": { + "ivy-ngcc": "ngcc/main-ivy-ngcc.js", + "ng-xi18n": "src/extract_i18n.js", + "ngc": "src/main.js", + "ngcc": "ngcc/main-ngcc.js" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@angular/compiler-cli/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/compiler-cli/node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/compiler-cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/compiler-cli/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/core": { + "version": "11.0.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.9.tgz", + "integrity": "sha512-J0ff3UK2Cw7Z0eNLtUXrpMFvmmkvPPZWLYIwimyc1pZys7qsIVT6cy2ybGEOhbJgC6qt3fo0DoJV3pGXTalb8A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3", + "zone.js": "~0.10.3" + } + }, + "node_modules/@angular/forms": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.4.tgz", + "integrity": "sha512-Fhfc4buwMZk0WumDvl/X7XBnOKFeTRTJrwKdi8LlhY6o1Og8H4e/f69u9iDJCF3YjU4qC6yGtPp9YpSVCPP7Ew==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/localize": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-11.0.4.tgz", + "integrity": "sha512-r0dWvwFvEqQJ/H94rr548S092Hq53RqyMANuFD09CpkWXS6yAWBfArB6mW77PARnicEC0zkbi5qMGACjtSyNtA==", + "dependencies": { + "@babel/core": "7.8.3", + "glob": "7.1.2", + "yargs": "^16.1.1" + }, + "bin": { + "localize-extract": "src/tools/src/extract/main.js", + "localize-translate": "src/tools/src/translate/main.js" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@angular/localize/node_modules/@babel/core": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/localize/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@angular/localize/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@angular/localize/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@angular/localize/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@angular/localize/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@angular/localize/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular/localize/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/localize/node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/localize/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/localize/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/platform-browser": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.4.tgz", + "integrity": "sha512-+uUCKJgspSghJ3R6Fk0XHA0tolbaRBi8JFS2cY+hi9s27WKB88peGvtsK6RCOPJONY6JdOuhpcZqRN8dKfPi7w==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.4.tgz", + "integrity": "sha512-ZOWTZaFfZSHhMy7a0RIxipiZoiobHWrGlq8/YaMrIgzUb9Fv518FeFCCI68BP0/GuyxX74MJmzv4ZgQctKKxXw==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/router": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.4.tgz", + "integrity": "sha512-B0sqv8zMM6j88+udEZzO8wKBw61pHgWZmLopnAqA65rRPrAvMsvAHUnYqX6w5pYqhJQxCVLVeKM+0QlQh1+WnA==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "dependencies": { + "@babel/types": "^7.12.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", + "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.10" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", + "semver": "^5.5.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "node_modules/@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "dependencies": { + "@babel/types": "^7.12.10" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.7" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.5" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.10" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "dev": true + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.10.tgz", + "integrity": "sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", + "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "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" + } + }, + "node_modules/@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/traverse": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz", + "integrity": "sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.10", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.10", + "@babel/types": "^7.12.10", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.10.tgz", + "integrity": "sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww==", + "dependencies": { + "@babel/types": "^7.12.10", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/traverse/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/types": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.10.tgz", + "integrity": "sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.1.tgz", + "integrity": "sha512-OEdH7SyC1suTdhBGW91/zBfR6qaIhThbcN8PUXtXilY4GYnSBbVqOntdHbC1vXwsDnX0Qix2m2+DSU1J51ybOQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "node-notifier": "^8.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/source-map/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "dependencies": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "node_modules/@ng-bootstrap/ng-bootstrap": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-9.1.0.tgz", + "integrity": "sha512-5cTxOew6EsENIa/PiIlIlF3MSGanLGD2fyGPyQJc0hU5j9uK+alz2eJXWpeAX3IHLDIaOBfRdCGOrpXkeIUhzQ==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.0.7.tgz", + "integrity": "sha512-OWGiiDc7s4T53BBCY8tLkLUjgw44HrixW8Wh8e4thFH1eIUM0NHe087s/B5hDNu72W/GqK4IoBbhNQ2wiCR7qQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "11.0.7", + "enhanced-resolve": "5.3.1", + "webpack-sources": "2.0.1" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^11.0.0", + "typescript": "~4.0.0", + "webpack": "^4.0.0" + } + }, + "node_modules/@ngx-lite/nav-drawer": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@ngx-lite/nav-drawer/-/nav-drawer-0.4.6.tgz", + "integrity": "sha512-b90i/t/m35pMKk2zymhv3zvjnfl/x6qOFVPAqXL6uw1b1mc+FcZkzxtEXRp/x9Ym20GLo3tgf/Es/Wc/LSkW0Q==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@ngx-lite/util": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@ngx-lite/util/-/util-0.0.0.tgz", + "integrity": "sha512-n1Y85KCpld5wIKp/izAfmLWuwwZT2F540xkjanq8f9mLy36Ol1MgQYruU8XrBrxKoAa04h43FJmMsoahoZq+/A==", + "dependencies": { + "tslib": "^1.9.0" + } + }, + "node_modules/@ngx-lite/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/ci-detect": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", + "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", + "dev": true + }, + "node_modules/@npmcli/git": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.8.tgz", + "integrity": "sha512-LPnzyBZ+1p7+JzHVwwKycMF8M3lr1ze3wxGRnxn/QxJtk++Y3prSJQrdBDGCxJyRpFsup6J3lrRBVYBhJVrM8Q==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/git/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/npm-package-arg": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", + "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/@npmcli/git/node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", + "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", + "dev": true + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", + "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", + "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@schematics/angular": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.11.tgz", + "integrity": "sha512-Ii7KabU79Jg2zoU7qR9wFd81TOAePQ6jog7OhoTyE2aKpKyBZlHXA4qq1dJfV3GAE5H1JKVm0lRgGEFJLQitGg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", + "jsonc-parser": "3.0.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "dependencies": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/update": { + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.11.tgz", + "integrity": "sha512-SdQ/Zao+huxSFnKXFbf93EEExzyLy5y+BBs14n9uLwnhaFbd5jlH0xO8/Ui1H6oDuOycSRQdnl7gt3sUr8EbaQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", + "@yarnpkg/lockfile": "1.1.0", + "ini": "2.0.0", + "npm-package-arg": "^8.0.0", + "pacote": "11.2.4", + "semver": "7.3.4", + "semver-intersect": "1.4.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/update/node_modules/@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "dependencies": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/update/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@schematics/update/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/angular": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-6.4.1.tgz", + "integrity": "sha512-lpbc1nA19SYKzaaYd/kn/xqvxI8oRForAR+lM1iE0yru/56ZrFKoUreqQQjCgtMD5aKfI9cT4VrtIq5PVkfOeA==", + "dependencies": { + "@sentry/browser": "6.4.1", + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "rxjs": "^6.6.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "@angular/common": "10.x || 11.x || 12.x", + "@angular/core": "10.x || 11.x || 12.x", + "@angular/router": "10.x || 11.x || 12.x" + } + }, + "node_modules/@sentry/angular/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/browser": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.4.1.tgz", + "integrity": "sha512-3cDud6GWutnJqcnheIq0lPNTsUJbrRLevQ+g1YfawVXFUxfmmY2bOsGd/Mxq17LxYeBHgKTitXv3DU1bsQ+WBQ==", + "dependencies": { + "@sentry/core": "6.4.1", + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/core": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.4.1.tgz", + "integrity": "sha512-Lx13oTiP+Tjvm5VxulcCszNVd2S1wY4viSnr+ygq62ySVERR+t7uOZDSARZ0rZ259GwW6nkbMh9dDmD0d6VCGQ==", + "dependencies": { + "@sentry/hub": "6.4.1", + "@sentry/minimal": "6.4.1", + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/hub": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.4.1.tgz", + "integrity": "sha512-7IZRP5buDE6s/c3vWzzPR/ySE+8GUuHPgTEPiDCPOCWwUN11zXDafJDKkJqY3muJfebUKmC/JG67RyBx+XlnlQ==", + "dependencies": { + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/integrations": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-6.4.1.tgz", + "integrity": "sha512-3kw6NcrFGXW+qlfT112EkYt7jdFX55m9yJN5eCt7Iad59YzA8ji8Pio5ohy9Pl+OfYXlKRFOvnYPpZZn80UjlQ==", + "dependencies": { + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "localforage": "^1.8.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/integrations/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/minimal": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.4.1.tgz", + "integrity": "sha512-4x/PRbDZACCKJqjta9EkhiIMyGMf7VgBX13EEWEDVWLP7ymFukBuTr4ap/Tz9429kB/yXZuDGGMIZp/G618H3g==", + "dependencies": { + "@sentry/hub": "6.4.1", + "@sentry/types": "6.4.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/types": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.4.1.tgz", + "integrity": "sha512-sTu/GaLsLYk1AkAqpkMT4+4q665LtZjhV0hkgiTD4N3zPl5uSf1pCIzxPRYjOpe7NEANmWv8U4PaGKGtc2eMfA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.4.1.tgz", + "integrity": "sha512-xJ1uVa5fvg23pXQfulvCIBb9pQ3p1awyd1PapK2AYi+wKjTuYl4B9edmhjRREEQEExznl/d2OVm78fRXLq7M9Q==", + "dependencies": { + "@sentry/types": "6.4.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", + "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", + "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", + "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz", + "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==" + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "26.0.20", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz", + "integrity": "sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==", + "dev": true, + "dependencies": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "12.19.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.9.tgz", + "integrity": "sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "node_modules/@types/selenium-webdriver": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", + "integrity": "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==", + "dev": true + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "node_modules/@types/webpack-sources": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", + "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/angular-ng-autocomplete": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/angular-ng-autocomplete/-/angular-ng-autocomplete-2.0.5.tgz", + "integrity": "sha512-mYALrzwc5eoFR5xz/diup5GDsxqXp3L707P4CkiBl5l01fKej0nyIDTQ+xXtZUK3spXIyfuOX0ypa9wTrgCP5A==" + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "dependencies": { + "type-fest": "^0.11.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "dependencies": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "node_modules/arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "dependencies": { + "ast-types-flow": "0.0.7" + } + }, + "node_modules/babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 6.9" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + } + }, + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "blocking-proxy": "built/lib/bin.js" + }, + "engines": { + "node": ">=6.9.x" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/bootstrap": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.3.tgz", + "integrity": "sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ==" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserstack": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", + "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", + "dev": true, + "dependencies": { + "https-proxy-agent": "^2.2.1" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "dev": true, + "dependencies": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "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.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chrome-trace-event/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/circular-dependency-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", + "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", + "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codelyzer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", + "integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==", + "dev": true, + "dependencies": { + "@angular/compiler": "9.0.0", + "@angular/core": "9.0.0", + "app-root-path": "^3.0.0", + "aria-query": "^3.0.0", + "axobject-query": "2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "rxjs": "^6.5.3", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2", + "tslib": "^1.10.0", + "zone.js": "~0.10.3" + } + }, + "node_modules/codelyzer/node_modules/@angular/compiler": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", + "dev": true + }, + "node_modules/codelyzer/node_modules/@angular/core": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", + "dev": true + }, + "node_modules/codelyzer/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codelyzer/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/codelyzer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "dependencies": { + "arity-n": "^1.0.4" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", + "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true + }, + "node_modules/core-js-compat": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz", + "integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.15.0", + "semver": "7.0.0" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "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": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "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": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", + "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.1", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "dependencies": { + "css": "^2.0.0" + } + }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "dependencies": { + "through": "X.X.X" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "node_modules/detect-passive-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/detect-passive-events/-/detect-passive-events-1.0.5.tgz", + "integrity": "sha512-foW7Q35wwOCxVzW0xLf5XeB5Fhe7oyRgvkBYdiP9IWgLMzjqUqTvsJv9ymuEWGjY6AoDXD3OC294+Z9iuOw0QA==" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "dependencies": { + "ssr-window": "^3.0.0-alpha.1" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.741", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.741.tgz", + "integrity": "sha512-4i3T0cwnHo1O4Mnp9JniEco8bZiXoqbm3PhW5hv7uu8YLg35iajYrRnNyKFaN8/8SSTskU2hYqVTeYVPceSpUA==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz", + "integrity": "sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "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", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "dependencies": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "dependencies": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "bin": { + "jasmine": "bin/jasmine.js" + } + }, + "node_modules/jasmine/node_modules/jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + }, + "node_modules/jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true, + "engines": { + "node": ">= 6.9.x" + } + }, + "node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-haste-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-preset-angular": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-8.3.2.tgz", + "integrity": "sha512-mdETK9E5tkCJPnPzB7NLXDB7CULbUEwcrA7eKU7WdR0u7ZIJqP0pvQxK5Cc70KBsOEaiwJK6LSGJm7aeqjSYYA==", + "dev": true, + "dependencies": { + "pretty-format": "26.x", + "ts-jest": "26.x" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", + "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsdom": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "dependencies": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jszip": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", + "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.1", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/less": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", + "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "dev": true, + "dependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "tslib": "^1.10.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "image-size": "~0.5.0", + "native-request": "^1.0.5", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.0.2.tgz", + "integrity": "sha512-7MKlgjnkCf63E3Lv6w2FvAEgLMx3d/tNBExITcanAq7ys5U8VPWT3F6xcRjYmdNfkoQ9udoVFb1r2azSiTnD6w==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/less-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/less/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.1.tgz", + "integrity": "sha512-yhqTmlYIEpZWA122lf6E0G8+rkn0AzoQ1OpzUKKs/lXUqG1plmGnwmkuuPlfggzJR5y6DLOdot/Tv00CC51CeQ==", + "dev": true, + "dependencies": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + } + }, + "node_modules/license-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/localforage": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz", + "integrity": "sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/localforage/node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.1.tgz", + "integrity": "sha512-G3yw7/TQaPfkuiR73MDcyiqhyP8SnbmLhUbpC76H+wtQxA6wfKhMCQOCb6wnPK0dQbjORAeOILQqEesg4/wF7A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", + "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/native-request": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", + "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/ng-lazyload-image": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/ng-lazyload-image/-/ng-lazyload-image-9.1.0.tgz", + "integrity": "sha512-ZdfCXMTaehfzxcSRRThpz9YZbEA+8LPA086Od6JiylrGj0yNM7Aq830A1x6NE/M8o2VuVq93emH9m8T6SFBHlA==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/ng-sidebar": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ng-sidebar/-/ng-sidebar-9.4.2.tgz", + "integrity": "sha512-8KmEQYFhn4S5LDjRDXBhDfCgLchJEj+ClBdiTCAQoRjX8vdh85hmKIGN7aBsh1HNOXKN3rzDu0qmd90193/P3Q==" + }, + "node_modules/ngx-toastr": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-13.2.1.tgz", + "integrity": "sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=10.0.0-0", + "@angular/core": ">=10.0.0-0", + "@angular/platform-browser": ">=10.0.0-0" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "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-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-notifier": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "dev": true, + "optional": true, + "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-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.0.tgz", + "integrity": "sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig==", + "dev": true, + "dependencies": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.5.tgz", + "integrity": "sha512-KCfK3Vi2F+PH1klYauoQzg81GQ8/GGjQRKYY6tRnpQUPKTs/1gBZSRWtTEd7jGdSn1LZL7gpAmJT+BcS55k2XQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz", + "integrity": "sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.0.0", + "semver": "^7.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "dependencies": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz", + "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.4.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.2.4.tgz", + "integrity": "sha512-GfTeVQGJ6WyBQbQD4t3ocHbyOmTQLmWjkCKSZPmKiGFKYKNUaM5U2gbLzUW8WG1XmS9yQFnsTFA0k3o1+q4klQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^2.0.1", + "@npmcli/installed-package-contents": "^1.0.5", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.3.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^9.0.0", + "promise-retry": "^1.1.1", + "read-package-json-fast": "^1.1.3", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "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/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-import/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.0.4.tgz", + "integrity": "sha512-pntA9zIR14drQo84yGTjQJg1m7T0DkXR4vXYHBngiRZdJtEeCrojL6lOpqUanMzG375lIJbT4Yug85zC/AJWGw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "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/postcss-loader/node_modules/import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-loader/node_modules/parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "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" + } + }, + "node_modules/postcss-loader/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pretty-format/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "dependencies": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/promise-retry/node_modules/err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/protractor": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", + "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", + "dev": true, + "dependencies": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.1.7", + "yargs": "^15.3.1" + }, + "bin": { + "protractor": "bin/protractor", + "webdriver-manager": "bin/webdriver-manager" + }, + "engines": { + "node": ">=10.13.x" + } + }, + "node_modules/protractor/node_modules/@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "node_modules/protractor/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/protractor/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/protractor/node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/protractor/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/protractor/node_modules/del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "dependencies": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/protractor/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/protractor/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/protractor/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/protractor/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/protractor/node_modules/webdriver-manager": { + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz", + "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==", + "dev": true, + "dependencies": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + }, + "bin": { + "webdriver-manager": "bin/webdriver-manager" + }, + "engines": { + "node": ">=6.9.x" + } + }, + "node_modules/protractor/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-1.2.2.tgz", + "integrity": "sha512-39DbPJjkltEzfXJXB6D8/Ir3GFOU2YbSKa2HaB/Y3nKrc/zY+0XrALpID6/13ezWyzqvOHrBbR4t4cjQuTdBVQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "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" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "node_modules/resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/resolve-url-loader/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-url-loader/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "dependencies": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + } + }, + "node_modules/rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "node_modules/rework/node_modules/convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "2.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.32.1.tgz", + "integrity": "sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "dev": true + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.27.0.tgz", + "integrity": "sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig==", + "dev": true, + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.5.tgz", + "integrity": "sha512-2LqoNPtKkZq/XbXNQ4C64GFEleSEHKv6NPSI+bMC/l+jpEXGJhiRYkAQToO24MR7NU4JRY2RpLpJ/gjo2Uf13w==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "dependencies": { + "https-proxy-agent": "^2.2.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "dependencies": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/selenium-webdriver/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/selenium-webdriver/node_modules/tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "dependencies": { + "semver": "^5.3.0" + } + }, + "node_modules/semver-dsl/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, + "dependencies": { + "semver": "^5.0.0" + } + }, + "node_modules/semver-intersect/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "node_modules/sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "dependencies": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs-client/node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", + "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4", + "socks": "^2.3.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.2.tgz", + "integrity": "sha512-bjf6eSENOYBX4JZDfl9vVLNsGAQ6Uz90fLmOazcmMcyDYOBFsGxPNn83jXezWLY9bJsVAo1ObztxPcV8HAbjVA==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.6.1", + "whatwg-mimetype": "^2.3.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/source-map-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/speed-measure-webpack-plugin": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", + "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "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/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "dev": true, + "dependencies": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stylus-loader": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-4.3.1.tgz", + "integrity": "sha512-apDYJEM5ZpOAWbWInWcsbtI8gHNr/XYVcSY/tWqOUPt7M5tqhtwXVsAkgyiVjhuvw2Yrjq474a9H+g4d047Ebw==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.4", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/stylus-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/stylus/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stylus/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylus/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/stylus/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/swiper": { + "version": "6.5.8", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-6.5.8.tgz", + "integrity": "sha512-SW8bNkJf8jCB4VdZsA1EZ3c87xshHS4f83YZVqT9ppkDKgspOfk9/I6dTtKGJFlsZpuE1S5X0LUAa7+QEaC0fQ==", + "dependencies": { + "dom7": "^3.0.0", + "ssr-window": "^3.0.0" + }, + "engines": { + "node": ">= 4.7.0" + } + }, + "node_modules/symbol-observable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", + "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.7.tgz", + "integrity": "sha512-lJbKdfxWvjpV330U4PBZStCT9h3N9A4zZVA5Y4k9sCWXknrpdyxi1oMsRKLmQ/YDMDxSBKIh88v0SkdhdqX06w==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": "^10.0.0 || ^11.0.0 || ^12.0.0 || >=14.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-jest": { + "version": "26.5.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.1.tgz", + "integrity": "sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==", + "dev": true, + "dependencies": { + "@types/jest": "26.x", + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/ts-jest/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", + "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + }, + "node_modules/tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + } + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", + "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universal-analytics": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", + "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "request": "^2.88.2", + "uuid": "^3.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", + "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "dev": true, + "dependencies": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + }, + "engines": { + "node": ">=6.9.x" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-log/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-merge": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.2.0.tgz", + "integrity": "sha512-QBglJBg5+lItm3/Lopv8KDDK01+hjdg2azEwi/4vKJ8ZmGPdtJsTpjtNNOW3a4WiqzXdCATtTudOZJngE7RKkA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", + "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.1.tgz", + "integrity": "sha512-uekbQ93PZ9e7BFB8Hl9cFIVYQyQqiXp2ExKk9Zv+qZfH/zHXHrCFAfw1VW0+NqWbTWrs/HnuDrto3+tiPXh//Q==", + "dev": true, + "dependencies": { + "webpack-sources": "^1.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-subresource-integrity/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-subresource-integrity/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/webpack/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/webpack/node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/webpack/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/webpack/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "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/webpack/node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/webpack/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "dependencies": { + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/worker-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", + "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0" + } + }, + "node_modules/worker-plugin/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/worker-plugin/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + } + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1100.7.tgz", + "integrity": "sha512-b2zv2yiRbdhJ7hJfZsAvGYcqgh2DVtc7gRIPo1eDPvOAKrenmZ4zo/v0PRYScrTsPzqmoCokNA5nIwufwUEnuA==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.0.7", + "rxjs": "6.6.3" + } + }, + "@angular-devkit/build-angular": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1100.7.tgz", + "integrity": "sha512-erc+AtSU46ZIX7A5dmeZ0/G/SQIbqMAGbTKZbf11GePyhT0JAAnfMQtOHMb6AaX85n4yQTg1uMo9f5+8V3lfKA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1100.7", + "@angular-devkit/build-optimizer": "0.1100.7", + "@angular-devkit/build-webpack": "0.1100.7", + "@angular-devkit/core": "11.0.7", + "@babel/core": "7.12.3", + "@babel/generator": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/runtime": "7.12.1", + "@babel/template": "7.10.4", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "11.0.7", + "ansi-colors": "4.1.1", + "autoprefixer": "9.8.6", + "babel-loader": "8.1.0", + "browserslist": "^4.9.1", + "cacache": "15.0.5", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.0", + "copy-webpack-plugin": "6.2.1", + "core-js": "3.6.5", + "css-loader": "4.3.0", + "cssnano": "4.1.10", + "file-loader": "6.1.1", + "find-cache-dir": "3.3.1", + "glob": "7.1.6", + "inquirer": "7.3.3", + "jest-worker": "26.5.0", + "karma-source-map-support": "1.4.0", + "less": "3.12.2", + "less-loader": "7.0.2", + "license-webpack-plugin": "2.3.1", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "1.2.1", + "minimatch": "3.0.4", + "open": "7.3.0", + "ora": "5.1.0", + "parse5-html-rewriting-stream": "6.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "7.0.32", + "postcss-import": "12.0.1", + "postcss-loader": "4.0.4", + "raw-loader": "4.0.2", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "3.1.2", + "rimraf": "3.0.2", + "rollup": "2.32.1", + "rxjs": "6.6.3", + "sass": "1.27.0", + "sass-loader": "10.0.5", + "semver": "7.3.2", + "source-map": "0.7.3", + "source-map-loader": "1.1.2", + "source-map-support": "0.5.19", + "speed-measure-webpack-plugin": "1.3.3", + "style-loader": "2.0.0", + "stylus": "0.54.8", + "stylus-loader": "4.3.1", + "terser": "5.3.7", + "terser-webpack-plugin": "4.2.3", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "webpack": "4.44.2", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.11.0", + "webpack-merge": "5.2.0", + "webpack-sources": "2.0.1", + "webpack-subresource-integrity": "1.5.1", + "worker-plugin": "5.0.0" + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.7.tgz", + "integrity": "sha512-bHIIub0d1trVAmAX/EaNR6Zo4b7hkscewK394qYYp/w8VKQkLSAPMUbt2YTWN+erR9yyHnJ2y7tBabIui75Wdw==", + "dev": true, + "requires": { + "loader-utils": "2.0.0", + "source-map": "0.7.3", + "tslib": "2.0.3", + "typescript": "4.0.5", + "webpack-sources": "2.0.1" + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1100.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1100.7.tgz", + "integrity": "sha512-/6Hudd1hs/GMHX4C/Qk7jueIMNg8NKFJWDEbvMPMgDzTqUIa680PTD6SNSCcY5Cz9mEpdpYCZo5N31JB7dlpOg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1100.7", + "@angular-devkit/core": "11.0.7", + "rxjs": "6.6.3" + } + }, + "@angular-devkit/core": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.7.tgz", + "integrity": "sha512-1GKnIT++YSUHpzzRx9QC0+8yOw4wy+ZpiJVDlroPSeK4FGrTCJqJKenkfRjVFRFOSrzTiJds+IU6kI4+bFbw9g==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.11.tgz", + "integrity": "sha512-xkw+5P9V7VdV/X3Eko0/oZmEqelenIT1RdaOlFA3ZLCdT6bz+79HjeChMy++JcLjVNRcLYQSw0ULByq2q/S2Pw==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.11", + "ora": "5.3.0", + "rxjs": "6.6.3" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@angular-slider/ngx-slider": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@angular-slider/ngx-slider/-/ngx-slider-2.0.3.tgz", + "integrity": "sha512-5NSHsYtHomBgJyPe7KtxTAJDLywHbuTb36NjD3dafbbj1VUbshX1m04d4JcyEiAB+Zeetcjkiy4jxQypUXYhHA==", + "requires": { + "detect-passive-events": "^1.0.4", + "rxjs": "^6.5.2", + "rxjs-compat": "^6.5.2", + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@angular/animations": { + "version": "11.0.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.0.9.tgz", + "integrity": "sha512-/KsMBUbRTqp29CNLbRIe4/8IxWxhnbUUZWqULaySnRDDW/p2m4miPcFVSp4zjrDZPqdXSibDiCyTiWmQ5PTuKA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/cli": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.11.tgz", + "integrity": "sha512-KzpRaCaHUwznlm6Iz/DvWqZs1fQx+NpJsiEOtKz7ijKoktJq+qcxAcBr2A4sNAuuAMgs0Xqy70EHvbMPA1yQ9A==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1102.11", + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", + "@schematics/angular": "11.2.11", + "@schematics/update": "0.1102.11", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.3.1", + "ini": "2.0.0", + "inquirer": "7.3.3", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.0", + "npm-pick-manifest": "6.1.0", + "open": "7.4.0", + "ora": "5.3.0", + "pacote": "11.2.4", + "resolve": "1.19.0", + "rimraf": "3.0.2", + "semver": "7.3.4", + "symbol-observable": "3.0.0", + "universal-analytics": "0.4.23", + "uuid": "8.3.2" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.11.tgz", + "integrity": "sha512-1MoUSz7zNJomUUuzbIyBSprzbWa9eF97SRDEbllYHHXY/IWWetHGNK7gkJPyW0zgKhXIc5Sq4TJKIJKWPNh00Q==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.11", + "rxjs": "6.6.3" + } + }, + "@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "open": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.0.tgz", + "integrity": "sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "@angular/common": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.4.tgz", + "integrity": "sha512-4R2ALj71J6EAHVCKNnHHCKL7wcosMsv3gcMXbMTE+Wpzo3khEhM0Tej+I1qmMbVmGXVlRb//4+rjE4gff6FvQw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/compiler": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.4.tgz", + "integrity": "sha512-Smf8FKSjkqd522ZCdXjSnVv1lYA0b21AN3WC5L1mwtRwyl/VacqCA/YEklLneDGgI2FdSIC9+bzSQIV+CCVftA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/compiler-cli": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.4.tgz", + "integrity": "sha512-FV010O6GAldRe5sr+qegHe7oLinTylES70NX+0PIp44/W4tPx75Zvop+FVT90I4xPcvFvteLemy8nFAnMK+x5g==", + "dev": true, + "requires": { + "@babel/core": "^7.8.6", + "@babel/types": "^7.8.6", + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "fs-extra": "4.0.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^6.3.0", + "source-map": "^0.6.1", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.0.0", + "yargs": "^16.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, + "@angular/core": { + "version": "11.0.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.9.tgz", + "integrity": "sha512-J0ff3UK2Cw7Z0eNLtUXrpMFvmmkvPPZWLYIwimyc1pZys7qsIVT6cy2ybGEOhbJgC6qt3fo0DoJV3pGXTalb8A==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/forms": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.4.tgz", + "integrity": "sha512-Fhfc4buwMZk0WumDvl/X7XBnOKFeTRTJrwKdi8LlhY6o1Og8H4e/f69u9iDJCF3YjU4qC6yGtPp9YpSVCPP7Ew==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/localize": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-11.0.4.tgz", + "integrity": "sha512-r0dWvwFvEqQJ/H94rr548S092Hq53RqyMANuFD09CpkWXS6yAWBfArB6mW77PARnicEC0zkbi5qMGACjtSyNtA==", + "requires": { + "@babel/core": "7.8.3", + "glob": "7.1.2", + "yargs": "^16.1.1" + }, + "dependencies": { + "@babel/core": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + } + } + }, + "@angular/platform-browser": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.4.tgz", + "integrity": "sha512-+uUCKJgspSghJ3R6Fk0XHA0tolbaRBi8JFS2cY+hi9s27WKB88peGvtsK6RCOPJONY6JdOuhpcZqRN8dKfPi7w==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.4.tgz", + "integrity": "sha512-ZOWTZaFfZSHhMy7a0RIxipiZoiobHWrGlq8/YaMrIgzUb9Fv518FeFCCI68BP0/GuyxX74MJmzv4ZgQctKKxXw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/router": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.4.tgz", + "integrity": "sha512-B0sqv8zMM6j88+udEZzO8wKBw61pHgWZmLopnAqA65rRPrAvMsvAHUnYqX6w5pYqhJQxCVLVeKM+0QlQh1+WnA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "dev": true + }, + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "requires": { + "@babel/types": "^7.12.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", + "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.10.tgz", + "integrity": "sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", + "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "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.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz", + "integrity": "sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.10", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.10", + "@babel/types": "^7.12.10", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/generator": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.10.tgz", + "integrity": "sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww==", + "requires": { + "@babel/types": "^7.12.10", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/types": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.10.tgz", + "integrity": "sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@fortawesome/fontawesome-free": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.1.tgz", + "integrity": "sha512-OEdH7SyC1suTdhBGW91/zBfR6qaIhThbcN8PUXtXilY4GYnSBbVqOntdHbC1vXwsDnX0Qix2m2+DSU1J51ybOQ==" + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "requires": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "@ng-bootstrap/ng-bootstrap": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-9.1.0.tgz", + "integrity": "sha512-5cTxOew6EsENIa/PiIlIlF3MSGanLGD2fyGPyQJc0hU5j9uK+alz2eJXWpeAX3IHLDIaOBfRdCGOrpXkeIUhzQ==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@ngtools/webpack": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.0.7.tgz", + "integrity": "sha512-OWGiiDc7s4T53BBCY8tLkLUjgw44HrixW8Wh8e4thFH1eIUM0NHe087s/B5hDNu72W/GqK4IoBbhNQ2wiCR7qQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.0.7", + "enhanced-resolve": "5.3.1", + "webpack-sources": "2.0.1" + } + }, + "@ngx-lite/nav-drawer": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@ngx-lite/nav-drawer/-/nav-drawer-0.4.6.tgz", + "integrity": "sha512-b90i/t/m35pMKk2zymhv3zvjnfl/x6qOFVPAqXL6uw1b1mc+FcZkzxtEXRp/x9Ym20GLo3tgf/Es/Wc/LSkW0Q==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@ngx-lite/util": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@ngx-lite/util/-/util-0.0.0.tgz", + "integrity": "sha512-n1Y85KCpld5wIKp/izAfmLWuwwZT2F540xkjanq8f9mLy36Ol1MgQYruU8XrBrxKoAa04h43FJmMsoahoZq+/A==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@npmcli/ci-detect": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", + "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", + "dev": true + }, + "@npmcli/git": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.8.tgz", + "integrity": "sha512-LPnzyBZ+1p7+JzHVwwKycMF8M3lr1ze3wxGRnxn/QxJtk++Y3prSJQrdBDGCxJyRpFsup6J3lrRBVYBhJVrM8Q==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", + "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "@npmcli/node-gyp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", + "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", + "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + }, + "dependencies": { + "read-package-json-fast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", + "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + } + } + }, + "@schematics/angular": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.11.tgz", + "integrity": "sha512-Ii7KabU79Jg2zoU7qR9wFd81TOAePQ6jog7OhoTyE2aKpKyBZlHXA4qq1dJfV3GAE5H1JKVm0lRgGEFJLQitGg==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", + "jsonc-parser": "3.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + } + } + } + }, + "@schematics/update": { + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.11.tgz", + "integrity": "sha512-SdQ/Zao+huxSFnKXFbf93EEExzyLy5y+BBs14n9uLwnhaFbd5jlH0xO8/Ui1H6oDuOycSRQdnl7gt3sUr8EbaQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", + "@yarnpkg/lockfile": "1.1.0", + "ini": "2.0.0", + "npm-package-arg": "^8.0.0", + "pacote": "11.2.4", + "semver": "7.3.4", + "semver-intersect": "1.4.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + } + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@sentry/angular": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-6.4.1.tgz", + "integrity": "sha512-lpbc1nA19SYKzaaYd/kn/xqvxI8oRForAR+lM1iE0yru/56ZrFKoUreqQQjCgtMD5aKfI9cT4VrtIq5PVkfOeA==", + "requires": { + "@sentry/browser": "6.4.1", + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "rxjs": "^6.6.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/browser": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.4.1.tgz", + "integrity": "sha512-3cDud6GWutnJqcnheIq0lPNTsUJbrRLevQ+g1YfawVXFUxfmmY2bOsGd/Mxq17LxYeBHgKTitXv3DU1bsQ+WBQ==", + "requires": { + "@sentry/core": "6.4.1", + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/core": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.4.1.tgz", + "integrity": "sha512-Lx13oTiP+Tjvm5VxulcCszNVd2S1wY4viSnr+ygq62ySVERR+t7uOZDSARZ0rZ259GwW6nkbMh9dDmD0d6VCGQ==", + "requires": { + "@sentry/hub": "6.4.1", + "@sentry/minimal": "6.4.1", + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/hub": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.4.1.tgz", + "integrity": "sha512-7IZRP5buDE6s/c3vWzzPR/ySE+8GUuHPgTEPiDCPOCWwUN11zXDafJDKkJqY3muJfebUKmC/JG67RyBx+XlnlQ==", + "requires": { + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/integrations": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-6.4.1.tgz", + "integrity": "sha512-3kw6NcrFGXW+qlfT112EkYt7jdFX55m9yJN5eCt7Iad59YzA8ji8Pio5ohy9Pl+OfYXlKRFOvnYPpZZn80UjlQ==", + "requires": { + "@sentry/types": "6.4.1", + "@sentry/utils": "6.4.1", + "localforage": "^1.8.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/minimal": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.4.1.tgz", + "integrity": "sha512-4x/PRbDZACCKJqjta9EkhiIMyGMf7VgBX13EEWEDVWLP7ymFukBuTr4ap/Tz9429kB/yXZuDGGMIZp/G618H3g==", + "requires": { + "@sentry/hub": "6.4.1", + "@sentry/types": "6.4.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/types": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.4.1.tgz", + "integrity": "sha512-sTu/GaLsLYk1AkAqpkMT4+4q665LtZjhV0hkgiTD4N3zPl5uSf1pCIzxPRYjOpe7NEANmWv8U4PaGKGtc2eMfA==" + }, + "@sentry/utils": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.4.1.tgz", + "integrity": "sha512-xJ1uVa5fvg23pXQfulvCIBb9pQ3p1awyd1PapK2AYi+wKjTuYl4B9edmhjRREEQEExznl/d2OVm78fRXLq7M9Q==", + "requires": { + "@sentry/types": "6.4.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sinonjs/commons": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", + "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", + "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", + "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/file-saver": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz", + "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==" + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "26.0.20", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz", + "integrity": "sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==", + "dev": true, + "requires": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.19.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.9.tgz", + "integrity": "sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", + "integrity": "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", + "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "angular-ng-autocomplete": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/angular-ng-autocomplete/-/angular-ng-autocomplete-2.0.5.tgz", + "integrity": "sha512-mYALrzwc5eoFR5xz/diup5GDsxqXp3L707P4CkiBl5l01fKej0nyIDTQ+xXtZUK3spXIyfuOX0ypa9wTrgCP5A==" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "bootstrap": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.3.tgz", + "integrity": "sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ==" + }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "browserstack": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", + "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "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.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", + "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "dev": true + }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", + "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", + "integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==", + "dev": true, + "requires": { + "@angular/compiler": "9.0.0", + "@angular/core": "9.0.0", + "app-root-path": "^3.0.0", + "aria-query": "^3.0.0", + "axobject-query": "2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "rxjs": "^6.5.3", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2", + "tslib": "^1.10.0", + "zone.js": "~0.10.3" + }, + "dependencies": { + "@angular/compiler": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", + "dev": true + }, + "@angular/core": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", + "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true + }, + "core-js-compat": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz", + "integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==", + "dev": true, + "requires": { + "browserslist": "^4.15.0", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "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": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "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": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", + "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.1", + "semver": "^7.3.2" + } + }, + "css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "requires": { + "css": "^2.0.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "detect-passive-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/detect-passive-events/-/detect-passive-events-1.0.5.tgz", + "integrity": "sha512-foW7Q35wwOCxVzW0xLf5XeB5Fhe7oyRgvkBYdiP9IWgLMzjqUqTvsJv9ymuEWGjY6AoDXD3OC294+Z9iuOw0QA==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + } + } + }, + "dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "requires": { + "ssr-window": "^3.0.0-alpha.1" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.741", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.741.tgz", + "integrity": "sha512-4i3T0cwnHo1O4Mnp9JniEco8bZiXoqbm3PhW5hv7uu8YLg35iajYrRnNyKFaN8/8SSTskU2hYqVTeYVPceSpUA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz", + "integrity": "sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.0.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "fastq": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true + }, + "jest-preset-angular": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-8.3.2.tgz", + "integrity": "sha512-mdETK9E5tkCJPnPzB7NLXDB7CULbUEwcrA7eKU7WdR0u7ZIJqP0pvQxK5Cc70KBsOEaiwJK6LSGJm7aeqjSYYA==", + "dev": true, + "requires": { + "pretty-format": "26.x", + "ts-jest": "26.x" + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-worker": { + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", + "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "ws": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "karma-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", + "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.1", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.0", + "minimatch": "^3.0.4" + } + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "less": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", + "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "dev": true, + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "less-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.0.2.tgz", + "integrity": "sha512-7MKlgjnkCf63E3Lv6w2FvAEgLMx3d/tNBExITcanAq7ys5U8VPWT3F6xcRjYmdNfkoQ9udoVFb1r2azSiTnD6w==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "license-webpack-plugin": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.1.tgz", + "integrity": "sha512-yhqTmlYIEpZWA122lf6E0G8+rkn0AzoQ1OpzUKKs/lXUqG1plmGnwmkuuPlfggzJR5y6DLOdot/Tv00CC51CeQ==", + "dev": true, + "requires": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "localforage": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz", + "integrity": "sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==", + "requires": { + "lie": "3.1.1" + }, + "dependencies": { + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.1.tgz", + "integrity": "sha512-G3yw7/TQaPfkuiR73MDcyiqhyP8SnbmLhUbpC76H+wtQxA6wfKhMCQOCb6wnPK0dQbjORAeOILQqEesg4/wF7A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", + "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-request": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", + "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "dev": true, + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "ng-lazyload-image": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/ng-lazyload-image/-/ng-lazyload-image-9.1.0.tgz", + "integrity": "sha512-ZdfCXMTaehfzxcSRRThpz9YZbEA+8LPA086Od6JiylrGj0yNM7Aq830A1x6NE/M8o2VuVq93emH9m8T6SFBHlA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "ng-sidebar": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ng-sidebar/-/ng-sidebar-9.4.2.tgz", + "integrity": "sha512-8KmEQYFhn4S5LDjRDXBhDfCgLchJEj+ClBdiTCAQoRjX8vdh85hmKIGN7aBsh1HNOXKN3rzDu0qmd90193/P3Q==" + }, + "ngx-toastr": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-13.2.1.tgz", + "integrity": "sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg==", + "requires": { + "tslib": "^2.0.0" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "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" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "dev": true, + "optional": true, + "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" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.0.tgz", + "integrity": "sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.5.tgz", + "integrity": "sha512-KCfK3Vi2F+PH1klYauoQzg81GQ8/GGjQRKYY6tRnpQUPKTs/1gBZSRWtTEd7jGdSn1LZL7gpAmJT+BcS55k2XQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz", + "integrity": "sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.0.0", + "semver": "^7.0.0" + } + }, + "npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "requires": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-is": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz", + "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.4.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pacote": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.2.4.tgz", + "integrity": "sha512-GfTeVQGJ6WyBQbQD4t3ocHbyOmTQLmWjkCKSZPmKiGFKYKNUaM5U2gbLzUW8WG1XmS9yQFnsTFA0k3o1+q4klQ==", + "dev": true, + "requires": { + "@npmcli/git": "^2.0.1", + "@npmcli/installed-package-contents": "^1.0.5", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.3.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^9.0.0", + "promise-retry": "^1.1.1", + "read-package-json-fast": "^1.1.3", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.1.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", + "dev": true, + "requires": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "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" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.0.4.tgz", + "integrity": "sha512-pntA9zIR14drQo84yGTjQJg1m7T0DkXR4vXYHBngiRZdJtEeCrojL6lOpqUanMzG375lIJbT4Yug85zC/AJWGw==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "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" + } + }, + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "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" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } + } + }, + "prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "protractor": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", + "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", + "dev": true, + "requires": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.1.7", + "yargs": "^15.3.1" + }, + "dependencies": { + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz", + "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==", + "dev": true, + "requires": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-package-json-fast": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-1.2.2.tgz", + "integrity": "sha512-39DbPJjkltEzfXJXB6D8/Ir3GFOU2YbSKa2HaB/Y3nKrc/zY+0XrALpID6/13ezWyzqvOHrBbR4t4cjQuTdBVQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "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" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "2.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.32.1.tgz", + "integrity": "sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "sass": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.27.0.tgz", + "integrity": "sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.5.tgz", + "integrity": "sha512-2LqoNPtKkZq/XbXNQ4C64GFEleSEHKv6NPSI+bMC/l+jpEXGJhiRYkAQToO24MR7NU4JRY2RpLpJ/gjo2Uf13w==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, + "requires": { + "semver": "^5.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", + "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4", + "socks": "^2.3.3" + }, + "dependencies": { + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.2.tgz", + "integrity": "sha512-bjf6eSENOYBX4JZDfl9vVLNsGAQ6Uz90fLmOazcmMcyDYOBFsGxPNn83jXezWLY9bJsVAo1ObztxPcV8HAbjVA==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.6.1", + "whatwg-mimetype": "^2.3.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", + "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "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" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "dev": true, + "requires": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "stylus-loader": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-4.3.1.tgz", + "integrity": "sha512-apDYJEM5ZpOAWbWInWcsbtI8gHNr/XYVcSY/tWqOUPt7M5tqhtwXVsAkgyiVjhuvw2Yrjq474a9H+g4d047Ebw==", + "dev": true, + "requires": { + "fast-glob": "^3.2.4", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "swiper": { + "version": "6.5.8", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-6.5.8.tgz", + "integrity": "sha512-SW8bNkJf8jCB4VdZsA1EZ3c87xshHS4f83YZVqT9ppkDKgspOfk9/I6dTtKGJFlsZpuE1S5X0LUAa7+QEaC0fQ==", + "requires": { + "dom7": "^3.0.0", + "ssr-window": "^3.0.0" + } + }, + "symbol-observable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", + "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + }, + "tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.7.tgz", + "integrity": "sha512-lJbKdfxWvjpV330U4PBZStCT9h3N9A4zZVA5Y4k9sCWXknrpdyxi1oMsRKLmQ/YDMDxSBKIh88v0SkdhdqX06w==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-jest": { + "version": "26.5.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.1.tgz", + "integrity": "sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==", + "dev": true, + "requires": { + "@types/jest": "26.x", + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", + "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", + "dev": true + } + } + }, + "ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + } + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + }, + "tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", + "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-analytics": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", + "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "request": "^2.88.2", + "uuid": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-to-istanbul": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", + "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "dev": true, + "requires": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.2.0.tgz", + "integrity": "sha512-QBglJBg5+lItm3/Lopv8KDDK01+hjdg2azEwi/4vKJ8ZmGPdtJsTpjtNNOW3a4WiqzXdCATtTudOZJngE7RKkA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", + "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpack-subresource-integrity": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.1.tgz", + "integrity": "sha512-uekbQ93PZ9e7BFB8Hl9cFIVYQyQqiXp2ExKk9Zv+qZfH/zHXHrCFAfw1VW0+NqWbTWrs/HnuDrto3+tiPXh//Q==", + "dev": true, + "requires": { + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", + "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + } + } +} diff --git a/UI/Web/package.json b/UI/Web/package.json new file mode 100644 index 000000000..bafaa04c5 --- /dev/null +++ b/UI/Web/package.json @@ -0,0 +1,78 @@ +{ + "name": "kavita-webui", + "version": "0.4.2", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "prod": "ng build --prod", + "explore": "ng build --stats-json && webpack-bundle-analyzer ../kavita/API/wwwroot/stats.json", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular-slider/ngx-slider": "^2.0.3", + "@angular/animations": "~11.0.0", + "@angular/common": "~11.0.0", + "@angular/compiler": "~11.0.0", + "@angular/core": "~11.0.0", + "@angular/forms": "~11.0.0", + "@angular/localize": "~11.0.0", + "@angular/platform-browser": "~11.0.0", + "@angular/platform-browser-dynamic": "~11.0.0", + "@angular/router": "~11.0.0", + "@fortawesome/fontawesome-free": "^5.15.1", + "@ng-bootstrap/ng-bootstrap": "^9.1.0", + "@ngx-lite/nav-drawer": "^0.4.6", + "@ngx-lite/util": "0.0.0", + "@sentry/angular": "^6.4.1", + "@sentry/integrations": "^6.4.1", + "@types/file-saver": "^2.0.1", + "angular-ng-autocomplete": "^2.0.5", + "bootstrap": "^4.5.0", + "bowser": "^2.11.0", + "file-saver": "^2.0.5", + "ng-lazyload-image": "^9.1.0", + "ng-sidebar": "^9.4.2", + "ngx-toastr": "^13.2.1", + "rxjs": "~6.6.0", + "swiper": "^6.5.8", + "tslib": "^2.0.0", + "zone.js": "~0.10.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.1100.0", + "@angular/cli": "^11.2.11", + "@angular/compiler-cli": "~11.0.0", + "@types/jest": "^26.0.20", + "@types/node": "^12.11.1", + "codelyzer": "^6.0.0", + "jest": "^26.6.3", + "jest-preset-angular": "^8.3.2", + "karma-coverage": "~2.0.3", + "protractor": "~7.0.0", + "ts-node": "~8.3.0", + "tslint": "^6.1.3", + "typescript": "~4.0.2" + }, + "jest": { + "preset": "jest-preset-angular", + "setupFilesAfterEnv": [ + "/setupJest.ts" + ], + "testPathIgnorePatterns": [ + "/node_modules/", + "/dist/" + ], + "globals": { + "ts-jest": { + "tsConfig": "/tsconfig.spec.json", + "stringifyContentPathRegex": "\\.html$" + } + } + } +} diff --git a/UI/Web/setupJest.ts b/UI/Web/setupJest.ts new file mode 100644 index 000000000..bbe6ca22b --- /dev/null +++ b/UI/Web/setupJest.ts @@ -0,0 +1,19 @@ +import 'jest-preset-angular'; + + +/* global mocks for jsdom */ +const mock = () => { + let storage: { [key: string]: string } = {}; + return { + getItem: (key: string) => (key in storage ? storage[key] : null), + setItem: (key: string, value: string) => (storage[key] = value || ''), + removeItem: (key: string) => delete storage[key], + clear: () => (storage = {}) + }; +}; + +Object.defineProperty(window, 'localStorage', { value: mock() }); +Object.defineProperty(window, 'sessionStorage', { value: mock() }); +Object.defineProperty(window, 'getComputedStyle', { + value: () => ['-webkit-appearance'], +}); diff --git a/UI/Web/src/app/_guards/admin.guard.ts b/UI/Web/src/app/_guards/admin.guard.ts new file mode 100644 index 000000000..d59b8643c --- /dev/null +++ b/UI/Web/src/app/_guards/admin.guard.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import { CanActivate } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { User } from '../_models/user'; +import { AccountService } from '../_services/account.service'; + +@Injectable({ + providedIn: 'root' +}) +export class AdminGuard implements CanActivate { + constructor(private accountService: AccountService, private toastr: ToastrService) {} + + canActivate(): Observable { + // this automaticallys subs due to being router guard + return this.accountService.currentUser$.pipe( + map((user: User) => { + if (this.accountService.hasAdminRole(user)) { + return true; + } + + this.toastr.error('You are not authorized to view this page.'); + return false; + }) + ); + } +} diff --git a/UI/Web/src/app/_guards/auth.guard.ts b/UI/Web/src/app/_guards/auth.guard.ts new file mode 100644 index 000000000..4d4aae01b --- /dev/null +++ b/UI/Web/src/app/_guards/auth.guard.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { User } from '../_models/user'; +import { AccountService } from '../_services/account.service'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthGuard implements CanActivate { + constructor(private accountService: AccountService, private router: Router, private toastr: ToastrService) {} + + canActivate(): Observable { + return this.accountService.currentUser$.pipe( + map((user: User) => { + if (user) { + return true; + } + this.toastr.error('You are not authorized to view this page.'); + this.router.navigateByUrl('/home'); + return false; + }) + ); + } +} diff --git a/UI/Web/src/app/_guards/library-access.guard.ts b/UI/Web/src/app/_guards/library-access.guard.ts new file mode 100644 index 000000000..611eb556d --- /dev/null +++ b/UI/Web/src/app/_guards/library-access.guard.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs'; +import { MemberService } from '../_services/member.service'; + +@Injectable({ + providedIn: 'root' +}) +export class LibraryAccessGuard implements CanActivate { + + constructor(private memberService: MemberService) {} + + canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const libraryId = parseInt(state.url.split('library/')[1], 10); + return this.memberService.hasLibraryAccess(libraryId); + } +} diff --git a/UI/Web/src/app/_interceptors/error.interceptor.ts b/UI/Web/src/app/_interceptors/error.interceptor.ts new file mode 100644 index 000000000..941bd14b9 --- /dev/null +++ b/UI/Web/src/app/_interceptors/error.interceptor.ts @@ -0,0 +1,121 @@ +import { Injectable, OnDestroy } from '@angular/core'; +import { + HttpRequest, + HttpHandler, + HttpEvent, + HttpInterceptor +} from '@angular/common/http'; +import { Observable, throwError } from 'rxjs'; +import { Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { catchError, take } from 'rxjs/operators'; +import { AccountService } from '../_services/account.service'; +import { environment } from 'src/environments/environment'; + +@Injectable() +export class ErrorInterceptor implements HttpInterceptor { + + constructor(private router: Router, private toastr: ToastrService, private accountService: AccountService) {} + + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + return next.handle(request).pipe( + catchError(error => { + if (error === undefined || error === null) { + return throwError(error); + } + + if (!environment.production) { + console.error('error:', error); + } + + switch (error.status) { + case 400: + this.handleValidationError(error); + break; + case 401: + this.handleAuthError(error); + break; + case 404: + this.handleNotFound(error); + break; + case 500: + this.handleServerException(error); + break; + default: + // Don't throw multiple Something undexpected went wrong + if (this.toastr.previousToastMessage !== 'Something unexpected went wrong.') { + this.toastr.error('Something unexpected went wrong.'); + } + + // If we are not on no-connection, redirect there and save current url so when we refersh, we redirect back there + if (this.router.url !== '/no-connection') { + localStorage.setItem('kavita--no-connection-url', this.router.url); + this.router.navigateByUrl('/no-connection'); + } + break; + } + return throwError(error); + }) + ); + } + + private handleValidationError(error: any) { + // This 400 can also be a bad request + if (Array.isArray(error.error)) { + const modalStateErrors: any[] = []; + if (error.error.length > 0 && error.error[0].hasOwnProperty('message')) { + error.error.forEach((issue: {status: string, details: string, message: string}) => { + modalStateErrors.push(issue.details); + }); + } else { + error.error.forEach((issue: {code: string, description: string}) => { + modalStateErrors.push(issue.description); + }); + } + throw modalStateErrors.flat(); + } else if (error.error.errors) { + // Validation error + const modalStateErrors = []; + for (const key in error.error.errors) { + if (error.error.errors[key]) { + modalStateErrors.push(error.error.errors[key]); + } + } + throw modalStateErrors.flat(); + } else { + console.error('error:', error); + if (error.statusText === 'Bad Request') { + this.toastr.error(error.error, error.status); + } else { + this.toastr.error(error.statusText === 'OK' ? error.error : error.statusText, error.status); + } + } + } + + private handleNotFound(error: any) { + this.toastr.error('That url does not exist.'); + } + + private handleServerException(error: any) { + console.error('500 error:', error); + const err = error.error; + if (err.hasOwnProperty('message') && err.message.trim() !== '') { + this.toastr.error(err.message); + } else { + this.toastr.error('There was an unknown critical error.'); + } + } + + private handleAuthError(error: any) { + // NOTE: Signin has error.error or error.statusText available. + // if statement is due to http/2 spec issue: https://github.com/angular/angular/issues/23334 + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + if (user) { + this.toastr.error(error.statusText === 'OK' ? 'Unauthorized' : error.statusText, error.status); + } + this.accountService.logout(); + }); + + } +} diff --git a/UI/Web/src/app/_interceptors/jwt.interceptor.ts b/UI/Web/src/app/_interceptors/jwt.interceptor.ts new file mode 100644 index 000000000..014a7ca41 --- /dev/null +++ b/UI/Web/src/app/_interceptors/jwt.interceptor.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@angular/core'; +import { + HttpRequest, + HttpHandler, + HttpEvent, + HttpInterceptor +} from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { AccountService } from '../_services/account.service'; +import { User } from '../_models/user'; +import { take } from 'rxjs/operators'; + +@Injectable() +export class JwtInterceptor implements HttpInterceptor { + + constructor(private accountService: AccountService) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + let currentUser: User; + + // Take 1 means we don't have to unsubscribe because we take 1 then complete + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + currentUser = user; + + if (currentUser) { + request = request.clone({ + setHeaders: { + Authorization: `Bearer ${currentUser.token}` + } + }); + } + }); + + return next.handle(request); + } +} diff --git a/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.html b/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.html new file mode 100644 index 000000000..e2bdd5898 --- /dev/null +++ b/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.html @@ -0,0 +1,53 @@ + + + + diff --git a/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.scss b/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.ts b/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.ts new file mode 100644 index 000000000..c28d1a7bd --- /dev/null +++ b/UI/Web/src/app/_modals/edit-collection-tags/edit-collection-tags.component.ts @@ -0,0 +1,121 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { FormControl, FormGroup } from '@angular/forms'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { ToastrService } from 'ngx-toastr'; +import { forkJoin } from 'rxjs'; +import { ConfirmService } from 'src/app/shared/confirm.service'; +import { SelectionModel } from 'src/app/typeahead/typeahead.component'; +import { CollectionTag } from 'src/app/_models/collection-tag'; +import { Pagination } from 'src/app/_models/pagination'; +import { Series } from 'src/app/_models/series'; +import { CollectionTagService } from 'src/app/_services/collection-tag.service'; +import { LibraryService } from 'src/app/_services/library.service'; +import { SeriesService } from 'src/app/_services/series.service'; + +@Component({ + selector: 'app-edit-collection-tags', + templateUrl: './edit-collection-tags.component.html', + styleUrls: ['./edit-collection-tags.component.scss'] +}) +export class EditCollectionTagsComponent implements OnInit { + + @Input() tag!: CollectionTag; + series: Array = []; + selections!: SelectionModel; + isLoading: boolean = true; + + pagination!: Pagination; + selectAll: boolean = true; + libraryNames!: any; + collectionTagForm!: FormGroup; + + + constructor(public modal: NgbActiveModal, private seriesService: SeriesService, + private collectionService: CollectionTagService, private toastr: ToastrService, + private confirmSerivce: ConfirmService, private libraryService: LibraryService) { } + + ngOnInit(): void { + if (this.pagination == undefined) { + this.pagination = {totalPages: 1, totalItems: 200, itemsPerPage: 200, currentPage: 0}; + } + this.collectionTagForm = new FormGroup({ + summary: new FormControl(this.tag.summary, []), + }); + this.loadSeries(); + } + + onPageChange(pageNum: number) { + this.pagination.currentPage = pageNum; + this.loadSeries(); + } + + toggleAll() { + this.selectAll = !this.selectAll; + this.series.forEach(s => this.selections.toggle(s, this.selectAll)); + } + + loadSeries() { + forkJoin([ + this.seriesService.getSeriesForTag(this.tag.id, this.pagination.currentPage, this.pagination.itemsPerPage), + this.libraryService.getLibraryNames() + ]).subscribe(results => { + const series = results[0]; + + this.pagination = series.pagination; + this.series = series.result; + this.selections = new SelectionModel(true, this.series); + this.isLoading = false; + + this.libraryNames = results[1]; + }); + } + + handleSelection(item: Series) { + this.selections.toggle(item); + const numberOfSelected = this.selections.selected().length; + if (numberOfSelected == 0) { + this.selectAll = false; + } else if (numberOfSelected == this.series.length) { + this.selectAll = true; + } + } + + togglePromotion() { + const originalPromotion = this.tag.promoted; + this.tag.promoted = !this.tag.promoted; + this.collectionService.updateTag(this.tag).subscribe(res => { + this.toastr.success('Tag updated successfully'); + }, err => { + this.tag.promoted = originalPromotion; + }); + } + + libraryName(libraryId: number) { + return this.libraryNames[libraryId]; + } + + close() { + this.modal.close(false); + } + + async save() { + const unselectedIds = this.selections.unselected().map(s => s.id); + const tag: CollectionTag = {...this.tag}; + tag.summary = this.collectionTagForm.get('summary')?.value; + + if (unselectedIds.length == this.series.length && !await this.confirmSerivce.confirm('Warning! No series are selected, saving will delete the tag. Are you sure you want to continue?')) { + return; + } + + this.collectionService.updateSeriesForTag(tag, this.selections.unselected().map(s => s.id)).subscribe(() => { + this.toastr.success('Tag updated'); + this.modal.close(true); + }); + } + + get someSelected() { + const selected = this.selections.selected(); + return (selected.length != this.series.length && selected.length != 0); + } + +} diff --git a/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html new file mode 100644 index 000000000..614880bb3 --- /dev/null +++ b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html @@ -0,0 +1,169 @@ +
+ + + +
+ + diff --git a/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.scss b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.scss new file mode 100644 index 000000000..afb1e98eb --- /dev/null +++ b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.scss @@ -0,0 +1,3 @@ +.scrollable-modal { + height: 600px; +} \ No newline at end of file diff --git a/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.ts b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.ts new file mode 100644 index 000000000..b5272f47f --- /dev/null +++ b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.ts @@ -0,0 +1,148 @@ +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { forkJoin, Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { UtilityService } from 'src/app/shared/_services/utility.service'; +import { TypeaheadSettings } from 'src/app/typeahead/typeahead-settings'; +import { Chapter } from 'src/app/_models/chapter'; +import { CollectionTag } from 'src/app/_models/collection-tag'; +import { Series } from 'src/app/_models/series'; +import { SeriesMetadata } from 'src/app/_models/series-metadata'; +import { CollectionTagService } from 'src/app/_services/collection-tag.service'; +import { ImageService } from 'src/app/_services/image.service'; +import { LibraryService } from 'src/app/_services/library.service'; +import { SeriesService } from 'src/app/_services/series.service'; + +@Component({ + selector: 'app-edit-series-modal', + templateUrl: './edit-series-modal.component.html', + styleUrls: ['./edit-series-modal.component.scss'] +}) +export class EditSeriesModalComponent implements OnInit, OnDestroy { + + @Input() series!: Series; + seriesVolumes: any[] = []; + isLoadingVolumes = false; + + isCollapsed = true; + volumeCollapsed: any = {}; + tabs = ['General', 'Fix Match', 'Cover Image', 'Info']; + active = this.tabs[0]; + editSeriesForm!: FormGroup; + libraryName: string | undefined = undefined; + private readonly onDestroy = new Subject(); + + settings: TypeaheadSettings = new TypeaheadSettings(); + tags: CollectionTag[] = []; + metadata!: SeriesMetadata; + + constructor(public modal: NgbActiveModal, + private seriesService: SeriesService, + public utilityService: UtilityService, + private fb: FormBuilder, + public imageService: ImageService, + private libraryService: LibraryService, + private collectionService: CollectionTagService) { } + + ngOnInit(): void { + + this.libraryService.getLibraryNames().pipe(takeUntil(this.onDestroy)).subscribe(names => { + this.libraryName = names[this.series.libraryId]; + }); + + this.setupTypeaheadSettings(); + + + + this.editSeriesForm = this.fb.group({ + id: new FormControl(this.series.id, []), + summary: new FormControl(this.series.summary, []), + name: new FormControl(this.series.name, []), + localizedName: new FormControl(this.series.localizedName, []), + sortName: new FormControl(this.series.sortName, []), + rating: new FormControl(this.series.userRating, []), + + genres: new FormControl('', []), + author: new FormControl('', []), + artist: new FormControl('', []), + + coverImageIndex: new FormControl(0, []) + }); + + this.seriesService.getMetadata(this.series.id).subscribe(metadata => { + if (metadata) { + this.metadata = metadata; + this.settings.savedData = metadata.tags; + } + }); + + this.isLoadingVolumes = true; + this.seriesService.getVolumes(this.series.id).subscribe(volumes => { + this.seriesVolumes = volumes; + this.isLoadingVolumes = false; + + volumes.forEach(v => { + this.volumeCollapsed[v.name] = true; + }); + this.seriesVolumes.forEach(vol => { + vol.volumeFiles = vol.chapters?.sort(this.utilityService.sortChapters).map((c: Chapter) => c.files.map((f: any) => { + f.chapter = c.number; + return f; + })).flat(); + }); + }); + } + + ngOnDestroy() { + this.onDestroy.next(); + this.onDestroy.complete(); + } + + setupTypeaheadSettings() { + this.settings.minCharacters = 0; + this.settings.multiple = true; + this.settings.id = 'collections'; + this.settings.unique = true; + this.settings.addIfNonExisting = true; + this.settings.fetchFn = (filter: string) => this.fetchCollectionTags(filter); + this.settings.addTransformFn = ((title: string) => { + return {id: 0, title: title, promoted: false, coverImage: '', summary: '' }; + }); + this.settings.compareFn = (options: CollectionTag[], filter: string) => { + const f = filter.toLowerCase(); + return options.filter(m => m.title.toLowerCase() === f); + } + } + + close() { + this.modal.close({success: false, series: undefined}); + } + + fetchCollectionTags(filter: string = '') { + return this.collectionService.search(filter); + } + + formatChapterNumber(chapter: Chapter) { + if (chapter.number === '0') { + return '1'; + } + return chapter.number; + } + + save() { + // TODO: In future (once locking or metadata implemented), do a converstion to updateSeriesDto + + forkJoin([ + this.seriesService.updateSeries(this.editSeriesForm.value), + this.seriesService.updateMetadata(this.metadata, this.tags) + ]).subscribe(results => { + this.modal.close({success: true, series: this.editSeriesForm.value}); + }); + } + + updateCollections(tags: CollectionTag[]) { + this.tags = tags; + } + +} diff --git a/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.html b/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.html new file mode 100644 index 000000000..b6fbedd6c --- /dev/null +++ b/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.html @@ -0,0 +1,32 @@ +
+ + + +
+ + diff --git a/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.scss b/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.ts b/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.ts new file mode 100644 index 000000000..c50db026b --- /dev/null +++ b/UI/Web/src/app/_modals/review-series-modal/review-series-modal.component.ts @@ -0,0 +1,41 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { FormControl, FormGroup } from '@angular/forms'; +import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Series } from 'src/app/_models/series'; +import { SeriesService } from 'src/app/_services/series.service'; + +@Component({ + selector: 'app-review-series-modal', + templateUrl: './review-series-modal.component.html', + styleUrls: ['./review-series-modal.component.scss'] +}) +export class ReviewSeriesModalComponent implements OnInit { + + @Input() series!: Series; + reviewGroup!: FormGroup; + + constructor(public modal: NgbActiveModal, private seriesService: SeriesService) {} + + ngOnInit(): void { + this.reviewGroup = new FormGroup({ + review: new FormControl(this.series.userReview, []), + rating: new FormControl(this.series.userRating, []) + }); + } + + close() { + this.modal.close({success: false, review: null}); + } + + clearRating() { + this.reviewGroup.get('rating')?.setValue(0); + } + + save() { + const model = this.reviewGroup.value; + this.seriesService.updateRating(this.series?.id, model.rating, model.review).subscribe(() => { + this.modal.close({success: true, review: model.review, rating: model.rating}); + }); + } + +} diff --git a/UI/Web/src/app/_models/bookmark.ts b/UI/Web/src/app/_models/bookmark.ts new file mode 100644 index 000000000..801cc399a --- /dev/null +++ b/UI/Web/src/app/_models/bookmark.ts @@ -0,0 +1,5 @@ +export interface Bookmark { + pageNum: number; + chapterId: number; + bookScrollId?: string; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/chapter.ts b/UI/Web/src/app/_models/chapter.ts new file mode 100644 index 000000000..d3971b320 --- /dev/null +++ b/UI/Web/src/app/_models/chapter.ts @@ -0,0 +1,14 @@ +import { MangaFile } from './manga-file'; + +export interface Chapter { + id: number; + range: string; + number: string; + files: Array; + coverImage: string; + pages: number; + volumeId: number; + pagesRead: number; // Attached for the given user when requesting from API + isSpecial: boolean; + title: string; +} diff --git a/UI/Web/src/app/_models/client-info.ts b/UI/Web/src/app/_models/client-info.ts new file mode 100644 index 000000000..c4a5cd6b1 --- /dev/null +++ b/UI/Web/src/app/_models/client-info.ts @@ -0,0 +1,12 @@ +import { DetailsVersion } from "./details-version"; + + +export interface ClientInfo { + os: DetailsVersion, + browser: DetailsVersion, + platformType: string, + kavitaUiVersion: string, + screenResolution: string; + + collectedAt?: Date; +} diff --git a/UI/Web/src/app/_models/collection-tag.ts b/UI/Web/src/app/_models/collection-tag.ts new file mode 100644 index 000000000..564aa9e1e --- /dev/null +++ b/UI/Web/src/app/_models/collection-tag.ts @@ -0,0 +1,7 @@ +export interface CollectionTag { + id: number; + title: string; + promoted: boolean; + coverImage: string; + summary: string; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/details-version.ts b/UI/Web/src/app/_models/details-version.ts new file mode 100644 index 000000000..10ce38263 --- /dev/null +++ b/UI/Web/src/app/_models/details-version.ts @@ -0,0 +1,4 @@ +export interface DetailsVersion { + name: string; + version: string; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/in-progress-chapter.ts b/UI/Web/src/app/_models/in-progress-chapter.ts new file mode 100644 index 000000000..1fd6133d2 --- /dev/null +++ b/UI/Web/src/app/_models/in-progress-chapter.ts @@ -0,0 +1,14 @@ +//TODO: Refactor this name to something better +export interface InProgressChapter { + id: number; + range: string; + number: string; + pages: number; + volumeId: number; + pagesRead: number; + seriesId: number; + seriesName: string; + coverImage: string; + libraryId: number; + libraryName: string; +} diff --git a/UI/Web/src/app/_models/library.ts b/UI/Web/src/app/_models/library.ts new file mode 100644 index 000000000..f4998747a --- /dev/null +++ b/UI/Web/src/app/_models/library.ts @@ -0,0 +1,15 @@ +export enum LibraryType { + Manga = 0, + Comic = 1, + Book = 2, + MangaImages = 3, + ComicImages = 4 +} + +export interface Library { + id: number; + name: string; + coverImage: string; + type: LibraryType; + folders: string[]; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/manga-file.ts b/UI/Web/src/app/_models/manga-file.ts new file mode 100644 index 000000000..159656807 --- /dev/null +++ b/UI/Web/src/app/_models/manga-file.ts @@ -0,0 +1,7 @@ +import { MangaFormat } from './manga-format'; + +export interface MangaFile { + filePath: string; + pages: number; + format: MangaFormat; +} diff --git a/UI/Web/src/app/_models/manga-format.ts b/UI/Web/src/app/_models/manga-format.ts new file mode 100644 index 000000000..21fd7d450 --- /dev/null +++ b/UI/Web/src/app/_models/manga-format.ts @@ -0,0 +1,6 @@ +export enum MangaFormat { + IMAGE = 0, + ARCHIVE = 1, + UNKNOWN = 2, + BOOK = 3 +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/member.ts b/UI/Web/src/app/_models/member.ts new file mode 100644 index 000000000..0b8f17423 --- /dev/null +++ b/UI/Web/src/app/_models/member.ts @@ -0,0 +1,10 @@ +import { Library } from './library'; + +export interface Member { + username: string; + lastActive: string; // datetime + created: string; // datetime + isAdmin: boolean; + roles: string[]; + libraries: Library[]; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/pagination.ts b/UI/Web/src/app/_models/pagination.ts new file mode 100644 index 000000000..c007c528a --- /dev/null +++ b/UI/Web/src/app/_models/pagination.ts @@ -0,0 +1,11 @@ +export interface Pagination { + currentPage: number; + itemsPerPage: number; + totalItems: number; + totalPages: number; +} + +export class PaginatedResult { + result!: T; + pagination!: Pagination; +} diff --git a/UI/Web/src/app/_models/person.ts b/UI/Web/src/app/_models/person.ts new file mode 100644 index 000000000..a8a60436d --- /dev/null +++ b/UI/Web/src/app/_models/person.ts @@ -0,0 +1,10 @@ +export enum PersonRole { + Other = 0, + Author = 1, + Artist = 2 +} + +export interface Person { + name: string; + role: PersonRole; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/preferences/page-split-option.ts b/UI/Web/src/app/_models/preferences/page-split-option.ts new file mode 100644 index 000000000..ed977a7bf --- /dev/null +++ b/UI/Web/src/app/_models/preferences/page-split-option.ts @@ -0,0 +1,5 @@ +export enum PageSplitOption { + SplitLeftToRight = 0, + SplitRightToLeft = 1, + NoSplit = 2 +} diff --git a/UI/Web/src/app/_models/preferences/preferences.ts b/UI/Web/src/app/_models/preferences/preferences.ts new file mode 100644 index 000000000..b36160b9c --- /dev/null +++ b/UI/Web/src/app/_models/preferences/preferences.ts @@ -0,0 +1,30 @@ +import { PageSplitOption } from './page-split-option'; +import { READER_MODE } from './reader-mode'; +import { ReadingDirection } from './reading-direction'; +import { ScalingOption } from './scaling-option'; + +export interface Preferences { + // Manga Reader + readingDirection: ReadingDirection; + scalingOption: ScalingOption; + pageSplitOption: PageSplitOption; + readerMode: READER_MODE; + autoCloseMenu: boolean; + + // Book Reader + bookReaderDarkMode: boolean; + bookReaderMargin: number; + bookReaderLineSpacing: number; + bookReaderFontSize: number; + bookReaderFontFamily: string; + bookReaderTapToPaginate: boolean; + bookReaderReadingDirection: ReadingDirection; + + // Global + siteDarkMode: boolean; +} + +export const readingDirections = [{text: 'Left to Right', value: ReadingDirection.LeftToRight}, {text: 'Right to Left', value: ReadingDirection.RightToLeft}]; +export const scalingOptions = [{text: 'Automatic', value: ScalingOption.Automatic}, {text: 'Fit to Height', value: ScalingOption.FitToHeight}, {text: 'Fit to Width', value: ScalingOption.FitToWidth}, {text: 'Original', value: ScalingOption.Original}]; +export const pageSplitOptions = [{text: 'Right to Left', value: PageSplitOption.SplitRightToLeft}, {text: 'Left to Right', value: PageSplitOption.SplitLeftToRight}, {text: 'No Split', value: PageSplitOption.NoSplit}]; +export const readingModes = [{text: 'Left to Right', value: READER_MODE.MANGA_LR}, {text: 'Up to Down', value: READER_MODE.MANGA_UD}/*, {text: 'Webtoon', value: READER_MODE.WEBTOON}*/]; diff --git a/UI/Web/src/app/_models/preferences/reader-mode.ts b/UI/Web/src/app/_models/preferences/reader-mode.ts new file mode 100644 index 000000000..3e3e16c96 --- /dev/null +++ b/UI/Web/src/app/_models/preferences/reader-mode.ts @@ -0,0 +1,14 @@ +export enum READER_MODE { + /** + * Manga default left/right to page + */ + MANGA_LR = 0, + /** + * Manga up and down to page + */ + MANGA_UD = 1, + /** + * Webtoon reading (scroll) with optional areas to tap + */ + WEBTOON = 2 +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/preferences/reading-direction.ts b/UI/Web/src/app/_models/preferences/reading-direction.ts new file mode 100644 index 000000000..48fab8ee1 --- /dev/null +++ b/UI/Web/src/app/_models/preferences/reading-direction.ts @@ -0,0 +1,4 @@ +export enum ReadingDirection { + LeftToRight = 0, + RightToLeft = 1 +} diff --git a/UI/Web/src/app/_models/preferences/scaling-option.ts b/UI/Web/src/app/_models/preferences/scaling-option.ts new file mode 100644 index 000000000..60d7d4e68 --- /dev/null +++ b/UI/Web/src/app/_models/preferences/scaling-option.ts @@ -0,0 +1,6 @@ +export enum ScalingOption { + FitToHeight = 0, + FitToWidth = 1, + Original = 2, + Automatic = 3 +} diff --git a/UI/Web/src/app/_models/search-result.ts b/UI/Web/src/app/_models/search-result.ts new file mode 100644 index 000000000..1a1fe9aa6 --- /dev/null +++ b/UI/Web/src/app/_models/search-result.ts @@ -0,0 +1,9 @@ +export interface SearchResult { + seriesId: number; + libraryId: number; + libraryName: string; + name: string; + originalName: string; + sortName: string; + coverImage: string; // byte64 encoded +} diff --git a/UI/Web/src/app/_models/series-metadata.ts b/UI/Web/src/app/_models/series-metadata.ts new file mode 100644 index 000000000..4cba7848f --- /dev/null +++ b/UI/Web/src/app/_models/series-metadata.ts @@ -0,0 +1,10 @@ +import { CollectionTag } from "./collection-tag"; +import { Person } from "./person"; + +export interface SeriesMetadata { + publisher: string; + genres: Array; + tags: Array; + persons: Array; + seriesId: number; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/series.ts b/UI/Web/src/app/_models/series.ts new file mode 100644 index 000000000..73b843bfe --- /dev/null +++ b/UI/Web/src/app/_models/series.ts @@ -0,0 +1,18 @@ +import { Volume } from './volume'; + +export interface Series { + id: number; + name: string; + originalName: string; // This is not shown to user + localizedName: string; + sortName: string; + summary: string; + coverImage: string; + volumes: Volume[]; + pages: number; // Total pages in series + pagesRead: number; // Total pages the logged in user has read + userRating: number; // User rating + userReview: string; // User review + libraryId: number; + created: string; // DateTime when entity was created +} diff --git a/UI/Web/src/app/_models/user.ts b/UI/Web/src/app/_models/user.ts new file mode 100644 index 000000000..56caf5c33 --- /dev/null +++ b/UI/Web/src/app/_models/user.ts @@ -0,0 +1,9 @@ +import { Preferences } from './preferences/preferences'; + +// This interface is only used for login and storing/retreiving JWT from local storage +export interface User { + username: string; + token: string; + roles: string[]; + preferences: Preferences; +} \ No newline at end of file diff --git a/UI/Web/src/app/_models/volume.ts b/UI/Web/src/app/_models/volume.ts new file mode 100644 index 000000000..c318f56ac --- /dev/null +++ b/UI/Web/src/app/_models/volume.ts @@ -0,0 +1,13 @@ +import { Chapter } from './chapter'; + +export interface Volume { + id: number; + number: number; + name: string; + coverImage: string; + created: string; + lastModified: string; + pages: number; + pagesRead: number; + chapters?: Array; +} diff --git a/UI/Web/src/app/_services/account.service.ts b/UI/Web/src/app/_services/account.service.ts new file mode 100644 index 000000000..f3847a524 --- /dev/null +++ b/UI/Web/src/app/_services/account.service.ts @@ -0,0 +1,126 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable, OnDestroy } from '@angular/core'; +import { Observable, ReplaySubject, Subject } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; +import { environment } from 'src/environments/environment'; +import { Preferences } from '../_models/preferences/preferences'; +import { User } from '../_models/user'; +import * as Sentry from "@sentry/angular"; +import { Router } from '@angular/router'; + +@Injectable({ + providedIn: 'root' +}) +export class AccountService implements OnDestroy { + + baseUrl = environment.apiUrl; + userKey = 'kavita-user'; + currentUser: User | undefined; + + // Stores values, when someone subscribes gives (1) of last values seen. + private currentUserSource = new ReplaySubject(1); + currentUser$ = this.currentUserSource.asObservable(); + + private readonly onDestroy = new Subject(); + + constructor(private httpClient: HttpClient, private router: Router) {} + + ngOnDestroy(): void { + this.onDestroy.next(); + this.onDestroy.complete(); + } + + hasAdminRole(user: User) { + return user && user.roles.includes('Admin'); + } + + hasDownloadRole(user: User) { + return user && user.roles.includes('Download'); + } + + getRoles() { + return this.httpClient.get(this.baseUrl + 'account/roles'); + } + + login(model: any): Observable { + return this.httpClient.post(this.baseUrl + 'account/login', model).pipe( + map((response: User) => { + const user = response; + if (user) { + this.setCurrentUser(user); + } + }), + takeUntil(this.onDestroy) + ); + } + + setCurrentUser(user?: User) { + if (user) { + user.roles = []; + const roles = this.getDecodedToken(user.token).role; + Array.isArray(roles) ? user.roles = roles : user.roles.push(roles); + Sentry.setContext('admin', {'admin': this.hasAdminRole(user)}); + Sentry.configureScope(scope => { + scope.setUser({ + username: user.username + }); + }); + + localStorage.setItem(this.userKey, JSON.stringify(user)); + } + + this.currentUserSource.next(user); + this.currentUser = user; + } + + logout() { + localStorage.removeItem(this.userKey); + this.currentUserSource.next(undefined); + this.currentUser = undefined; + // Upon logout, perform redirection + this.router.navigateByUrl('/login'); + } + + register(model: {username: string, password: string, isAdmin?: boolean}) { + if (!model.hasOwnProperty('isAdmin')) { + model.isAdmin = false; + } + + return this.httpClient.post(this.baseUrl + 'account/register', model).pipe( + map((user: User) => { + return user; + }), + takeUntil(this.onDestroy) + ); + } + + getDecodedToken(token: string) { + return JSON.parse(atob(token.split('.')[1])); + } + + resetPassword(username: string, password: string) { + return this.httpClient.post(this.baseUrl + 'account/reset-password', {username, password}, {responseType: 'json' as 'text'}); + } + + updatePreferences(userPreferences: Preferences) { + return this.httpClient.post(this.baseUrl + 'users/update-preferences', userPreferences).pipe(map(settings => { + if (this.currentUser !== undefined || this.currentUser != null) { + this.currentUser.preferences = settings; + this.setCurrentUser(this.currentUser); + } + return settings; + }), takeUntil(this.onDestroy)); + } + + getUserFromLocalStorage(): User | undefined { + + const userString = localStorage.getItem(this.userKey); + + if (userString) { + return JSON.parse(userString) + }; + + return undefined; + } + +} diff --git a/UI/Web/src/app/_services/action-factory.service.ts b/UI/Web/src/app/_services/action-factory.service.ts new file mode 100644 index 000000000..2e0db2452 --- /dev/null +++ b/UI/Web/src/app/_services/action-factory.service.ts @@ -0,0 +1,202 @@ +import { Injectable } from '@angular/core'; +import { Chapter } from '../_models/chapter'; +import { CollectionTag } from '../_models/collection-tag'; +import { Library } from '../_models/library'; +import { Series } from '../_models/series'; +import { Volume } from '../_models/volume'; +import { AccountService } from './account.service'; + +export enum Action { + MarkAsRead = 0, + MarkAsUnread = 1, + ScanLibrary = 2, + Delete = 3, + Edit = 4, + Info = 5, + RefreshMetadata = 6, + Download = 7 +} + +export interface ActionItem { + title: string; + action: Action; + callback: (action: Action, data: T) => void; + +} + +@Injectable({ + providedIn: 'root' +}) +export class ActionFactoryService { + + libraryActions: Array> = []; + + seriesActions: Array> = []; + + volumeActions: Array> = []; + + chapterActions: Array> = []; + + collectionTagActions: Array> = []; + + isAdmin = false; + hasDownloadRole = false; + + constructor(private accountService: AccountService) { + this.accountService.currentUser$.subscribe(user => { + if (user) { + this.isAdmin = this.accountService.hasAdminRole(user); + this.hasDownloadRole = this.accountService.hasDownloadRole(user); + } else { + this._resetActions(); + return; // If user is logged out, we don't need to do anything + } + + this._resetActions(); + + if (this.isAdmin) { + this.collectionTagActions.push({ + action: Action.Edit, + title: 'Edit', + callback: this.dummyCallback + }); + + this.seriesActions.push({ + action: Action.ScanLibrary, + title: 'Scan Series', + callback: this.dummyCallback + }); + + this.seriesActions.push({ + action: Action.RefreshMetadata, + title: 'Refresh Metadata', + callback: this.dummyCallback + }); + + this.seriesActions.push({ + action: Action.Delete, + title: 'Delete', + callback: this.dummyCallback + }); + + this.seriesActions.push({ + action: Action.Edit, + title: 'Edit', + callback: this.dummyCallback + }); + + this.libraryActions.push({ + action: Action.ScanLibrary, + title: 'Scan Library', + callback: this.dummyCallback + }); + + this.libraryActions.push({ + action: Action.RefreshMetadata, + title: 'Refresh Metadata', + callback: this.dummyCallback + }); + } + + if (this.hasDownloadRole || this.isAdmin) { + this.volumeActions.push({ + action: Action.Download, + title: 'Download', + callback: this.dummyCallback + }); + + this.chapterActions.push({ + action: Action.Download, + title: 'Download', + callback: this.dummyCallback + }); + } + }); + } + + getLibraryActions(callback: (action: Action, library: Library) => void) { + this.libraryActions.forEach(action => action.callback = callback); + return this.libraryActions; + } + + getSeriesActions(callback: (action: Action, series: Series) => void) { + this.seriesActions.forEach(action => action.callback = callback); + return this.seriesActions; + } + + getVolumeActions(callback: (action: Action, volume: Volume) => void) { + this.volumeActions.forEach(action => action.callback = callback); + return this.volumeActions; + } + + getChapterActions(callback: (action: Action, chapter: Chapter) => void) { + this.chapterActions.forEach(action => action.callback = callback); + return this.chapterActions; + } + + getCollectionTagActions(callback: (action: Action, collectionTag: CollectionTag) => void) { + this.collectionTagActions.forEach(action => action.callback = callback); + return this.collectionTagActions; + } + + dummyCallback(action: Action, data: any) {} + + _resetActions() { + this.libraryActions = []; + + this.collectionTagActions = []; + + this.seriesActions = [ + { + action: Action.MarkAsRead, + title: 'Mark as Read', + callback: this.dummyCallback + }, + { + action: Action.MarkAsUnread, + title: 'Mark as Unread', + callback: this.dummyCallback + } + ]; + + this.volumeActions = [ + { + action: Action.MarkAsRead, + title: 'Mark as Read', + callback: this.dummyCallback + }, + { + action: Action.MarkAsUnread, + title: 'Mark as Unread', + callback: this.dummyCallback + } + ]; + + this.chapterActions = [ + { + action: Action.MarkAsRead, + title: 'Mark as Read', + callback: this.dummyCallback + }, + { + action: Action.MarkAsUnread, + title: 'Mark as Unread', + callback: this.dummyCallback + } + ]; + + this.volumeActions.push({ + action: Action.Info, + title: 'Info', + callback: this.dummyCallback + }); + + this.chapterActions.push({ + action: Action.Info, + title: 'Info', + callback: this.dummyCallback + }); + + + } +} diff --git a/UI/Web/src/app/_services/action.service.ts b/UI/Web/src/app/_services/action.service.ts new file mode 100644 index 000000000..78e5d9f83 --- /dev/null +++ b/UI/Web/src/app/_services/action.service.ts @@ -0,0 +1,199 @@ +import { Injectable, OnDestroy } from '@angular/core'; +import { ToastrService } from 'ngx-toastr'; +import { forkJoin, Subject } from 'rxjs'; +import { take, takeUntil } from 'rxjs/operators'; +import { Chapter } from '../_models/chapter'; +import { Library } from '../_models/library'; +import { Series } from '../_models/series'; +import { Volume } from '../_models/volume'; +import { LibraryService } from './library.service'; +import { ReaderService } from './reader.service'; +import { SeriesService } from './series.service'; + +export type LibraryActionCallback = (library: Partial) => void; +export type SeriesActionCallback = (series: Series) => void; +export type VolumeActionCallback = (volume: Volume) => void; +export type ChapterActionCallback = (chapter: Chapter) => void; + +/** + * Responsible for executing actions + */ +@Injectable({ + providedIn: 'root' +}) +export class ActionService implements OnDestroy { + + private readonly onDestroy = new Subject(); + + constructor(private libraryService: LibraryService, private seriesService: SeriesService, + private readerService: ReaderService, private toastr: ToastrService) { } + + ngOnDestroy() { + this.onDestroy.next(); + this.onDestroy.complete(); + } + + /** + * Request a file scan for a given Library + * @param library Partial Library, must have id and name populated + * @param callback Optional callback to perform actions after API completes + * @returns + */ + scanLibrary(library: Partial, callback?: LibraryActionCallback) { + if (!library.hasOwnProperty('id') || library.id === undefined) { + return; + } + this.libraryService.scan(library?.id).pipe(take(1)).subscribe((res: any) => { + this.toastr.success('Scan started for ' + library.name); + if (callback) { + callback(library); + } + }); + } + + /** + * Request a refresh of Metadata for a given Library + * @param library Partial Library, must have id and name populated + * @param callback Optional callback to perform actions after API completes + * @returns + */ + refreshMetadata(library: Partial, callback?: LibraryActionCallback) { + if (!library.hasOwnProperty('id') || library.id === undefined) { + return; + } + + this.libraryService.refreshMetadata(library?.id).pipe(take(1)).subscribe((res: any) => { + this.toastr.success('Scan started for ' + library.name); + if (callback) { + callback(library); + } + }); + } + + /** + * Mark a series as read; updates the series pagesRead + * @param series Series, must have id and name populated + * @param callback Optional callback to perform actions after API completes + */ + markSeriesAsRead(series: Series, callback?: SeriesActionCallback) { + this.seriesService.markRead(series.id).pipe(take(1)).subscribe(res => { + series.pagesRead = series.pages; + this.toastr.success(series.name + ' is now read'); + if (callback) { + callback(series); + } + }); + } + + /** + * Mark a series as unread; updates the series pagesRead + * @param series Series, must have id and name populated + * @param callback Optional callback to perform actions after API completes + */ + markSeriesAsUnread(series: Series, callback?: SeriesActionCallback) { + this.seriesService.markUnread(series.id).pipe(take(1)).subscribe(res => { + series.pagesRead = 0; + this.toastr.success(series.name + ' is now unread'); + if (callback) { + callback(series); + } + }); + } + + /** + * Start a file scan for a Series (currently just does the library not the series directly) + * @param series Series, must have libraryId and name populated + * @param callback Optional callback to perform actions after API completes + */ + scanSeries(series: Series, callback?: SeriesActionCallback) { + this.seriesService.scan(series.libraryId, series.id).pipe(take(1)).subscribe((res: any) => { + this.toastr.success('Scan started for ' + series.name); + if (callback) { + callback(series); + } + }); + } + + /** + * Start a metadata refresh for a Series + * @param series Series, must have libraryId, id and name populated + * @param callback Optional callback to perform actions after API completes + */ + refreshMetdata(series: Series, callback?: SeriesActionCallback) { + this.seriesService.refreshMetadata(series).pipe(take(1)).subscribe((res: any) => { + this.toastr.success('Refresh started for ' + series.name); + if (callback) { + callback(series); + } + }); + } + + /** + * Mark all chapters and the volume as Read + * @param seriesId Series Id + * @param volume Volume, should have id, chapters and pagesRead populated + * @param callback Optional callback to perform actions after API completes + */ + markVolumeAsRead(seriesId: number, volume: Volume, callback?: VolumeActionCallback) { + this.readerService.markVolumeRead(seriesId, volume.id).pipe(take(1)).subscribe(() => { + volume.pagesRead = volume.pages; + volume.chapters?.forEach(c => c.pagesRead = c.pages); + this.toastr.success('Marked as Read'); + + if (callback) { + callback(volume); + } + }); + } + + /** + * Mark all chapters and the volume as unread + * @param seriesId Series Id + * @param volume Volume, should have id, chapters and pagesRead populated + * @param callback Optional callback to perform actions after API completes + */ + markVolumeAsUnread(seriesId: number, volume: Volume, callback?: VolumeActionCallback) { + forkJoin(volume.chapters?.map(chapter => this.readerService.bookmark(seriesId, volume.id, chapter.id, 0))).pipe(takeUntil(this.onDestroy)).subscribe(results => { + volume.pagesRead = 0; + volume.chapters?.forEach(c => c.pagesRead = 0); + this.toastr.success('Marked as Unread'); + if (callback) { + callback(volume); + } + }); + } + + /** + * Mark a chapter as read + * @param seriesId Series Id + * @param chapter Chapter, should have id, pages, volumeId populated + * @param callback Optional callback to perform actions after API completes + */ + markChapterAsRead(seriesId: number, chapter: Chapter, callback?: ChapterActionCallback) { + this.readerService.bookmark(seriesId, chapter.volumeId, chapter.id, chapter.pages).pipe(take(1)).subscribe(results => { + chapter.pagesRead = chapter.pages; + this.toastr.success('Marked as Read'); + if (callback) { + callback(chapter); + } + }); + } + + /** + * Mark a chapter as unread + * @param seriesId Series Id + * @param chapter Chapter, should have id, pages, volumeId populated + * @param callback Optional callback to perform actions after API completes + */ + markChapterAsUnread(seriesId: number, chapter: Chapter, callback?: ChapterActionCallback) { + this.readerService.bookmark(seriesId, chapter.volumeId, chapter.id, chapter.pages).pipe(take(1)).subscribe(results => { + chapter.pagesRead = 0; + this.toastr.success('Marked as unread'); + if (callback) { + callback(chapter); + } + }); + } + + +} diff --git a/UI/Web/src/app/_services/collection-tag.service.ts b/UI/Web/src/app/_services/collection-tag.service.ts new file mode 100644 index 000000000..92590df4d --- /dev/null +++ b/UI/Web/src/app/_services/collection-tag.service.ts @@ -0,0 +1,38 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { map } from 'rxjs/operators'; +import { environment } from 'src/environments/environment'; +import { CollectionTag } from '../_models/collection-tag'; +import { ImageService } from './image.service'; + +@Injectable({ + providedIn: 'root' +}) +export class CollectionTagService { + + baseUrl = environment.apiUrl; + + constructor(private httpClient: HttpClient, private imageService: ImageService) { } + + allTags() { + return this.httpClient.get(this.baseUrl + 'collection/').pipe(map(tags => { + tags.forEach(s => s.coverImage = this.imageService.getCollectionCoverImage(s.id)); + return tags; + })); + } + + search(query: string) { + return this.httpClient.get(this.baseUrl + 'collection/search?queryString=' + encodeURIComponent(query)).pipe(map(tags => { + tags.forEach(s => s.coverImage = this.imageService.getCollectionCoverImage(s.id)); + return tags; + })); + } + + updateTag(tag: CollectionTag) { + return this.httpClient.post(this.baseUrl + 'collection/update', tag, {responseType: 'text' as 'json'}); + } + + updateSeriesForTag(tag: CollectionTag, seriesIdsToRemove: Array) { + return this.httpClient.post(this.baseUrl + 'collection/update-series', {tag, seriesIdsToRemove}, {responseType: 'text' as 'json'}); + } +} diff --git a/UI/Web/src/app/_services/image.service.ts b/UI/Web/src/app/_services/image.service.ts new file mode 100644 index 000000000..4135b34b9 --- /dev/null +++ b/UI/Web/src/app/_services/image.service.ts @@ -0,0 +1,41 @@ +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; +import { NavService } from './nav.service'; + +@Injectable({ + providedIn: 'root' +}) +export class ImageService { + + baseUrl = environment.apiUrl; + public placeholderImage = 'assets/images/image-placeholder-min.png'; + public errorImage = 'assets/images/error-placeholder2-min.png'; + + constructor(private navSerivce: NavService) { + this.navSerivce.darkMode$.subscribe(res => { + if (res) { + this.placeholderImage = 'assets/images/image-placeholder.dark-min.png'; + this.errorImage = 'assets/images/error-placeholder2.dark-min.png'; + } else { + this.placeholderImage = 'assets/images/image-placeholder-min.png'; + this.errorImage = 'assets/images/error-placeholder2-min.png'; + } + }); + } + + getVolumeCoverImage(volumeId: number) { + return this.baseUrl + 'image/volume-cover?volumeId=' + volumeId; + } + + getSeriesCoverImage(seriesId: number) { + return this.baseUrl + 'image/series-cover?seriesId=' + seriesId; + } + + getCollectionCoverImage(collectionTagId: number) { + return this.baseUrl + 'image/collection-cover?collectionTagId=' + collectionTagId; + } + + getChapterCoverImage(chapterId: number) { + return this.baseUrl + 'image/chapter-cover?chapterId=' + chapterId; + } +} diff --git a/UI/Web/src/app/_services/library.service.ts b/UI/Web/src/app/_services/library.service.ts new file mode 100644 index 000000000..cfba02d99 --- /dev/null +++ b/UI/Web/src/app/_services/library.service.ts @@ -0,0 +1,89 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { environment } from 'src/environments/environment'; +import { Library, LibraryType } from '../_models/library'; +import { SearchResult } from '../_models/search-result'; + + +@Injectable({ + providedIn: 'root' +}) +export class LibraryService { + + baseUrl = environment.apiUrl; + + libraryNames: {[key:number]: string} | undefined = undefined; + + constructor(private httpClient: HttpClient) {} + + getLibraryNames() { + if (this.libraryNames != undefined) { + return of(this.libraryNames); + } + return this.httpClient.get(this.baseUrl + 'library').pipe(map(l => { + this.libraryNames = {}; + l.forEach(lib => { + if (this.libraryNames !== undefined) { + this.libraryNames[lib.id] = lib.name; + } + }); + return this.libraryNames; + })); + } + + listDirectories(rootPath: string) { + let query = ''; + if (rootPath !== undefined && rootPath.length > 0) { + query = '?path=' + rootPath; + } + + return this.httpClient.get(this.baseUrl + 'library/list' + query); + } + + getLibraries() { + return this.httpClient.get(this.baseUrl + 'library'); + } + + getLibrariesForMember() { + return this.httpClient.get(this.baseUrl + 'library/libraries'); + } + + updateLibrariesForMember(username: string, selectedLibraries: Library[]) { + return this.httpClient.post(this.baseUrl + 'library/grant-access', {username, selectedLibraries}); + } + + scan(libraryId: number) { + return this.httpClient.post(this.baseUrl + 'library/scan?libraryId=' + libraryId, {}); + } + + refreshMetadata(libraryId: number) { + return this.httpClient.post(this.baseUrl + 'library/refresh-metadata?libraryId=' + libraryId, {}); + } + + create(model: {name: string, type: number, folders: string[]}) { + return this.httpClient.post(this.baseUrl + 'library/create', model); + } + + delete(libraryId: number) { + return this.httpClient.delete(this.baseUrl + 'library/delete?libraryId=' + libraryId, {}); + } + + update(model: {name: string, folders: string[], id: number}) { + return this.httpClient.post(this.baseUrl + 'library/update', model); + } + + getLibraryType(libraryId: number) { + // TODO: Cache this in browser + return this.httpClient.get(this.baseUrl + 'library/type?libraryId=' + libraryId); + } + + search(term: string) { + if (term === '') { + return of([]); + } + return this.httpClient.get(this.baseUrl + 'library/search?queryString=' + encodeURIComponent(term)); + } + +} diff --git a/UI/Web/src/app/_services/member.service.ts b/UI/Web/src/app/_services/member.service.ts new file mode 100644 index 000000000..519807bb9 --- /dev/null +++ b/UI/Web/src/app/_services/member.service.ts @@ -0,0 +1,38 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; +import { Member } from '../_models/member'; + +@Injectable({ + providedIn: 'root' +}) +export class MemberService { + + baseUrl = environment.apiUrl; + + constructor(private httpClient: HttpClient) { } + + getMembers() { + return this.httpClient.get(this.baseUrl + 'users'); + } + + adminExists() { + return this.httpClient.get(this.baseUrl + 'admin/exists'); + } + + deleteMember(username: string) { + return this.httpClient.delete(this.baseUrl + 'users/delete-user?username=' + username); + } + + hasLibraryAccess(libraryId: number) { + return this.httpClient.get(this.baseUrl + 'users/has-library-access?libraryId=' + libraryId); + } + + hasReadingProgress(librayId: number) { + return this.httpClient.get(this.baseUrl + 'users/has-reading-progress?libraryId=' + librayId); + } + + updateMemberRoles(username: string, roles: string[]) { + return this.httpClient.post(this.baseUrl + 'account/update-rbs', {username, roles}); + } +} diff --git a/UI/Web/src/app/_services/nav.service.ts b/UI/Web/src/app/_services/nav.service.ts new file mode 100644 index 000000000..2412c794a --- /dev/null +++ b/UI/Web/src/app/_services/nav.service.ts @@ -0,0 +1,39 @@ +import { Injectable } from '@angular/core'; +import { ReplaySubject } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class NavService { + + private navbarVisibleSource = new ReplaySubject(1); + navbarVisible$ = this.navbarVisibleSource.asObservable(); + + private darkMode: boolean = true; + private darkModeSource = new ReplaySubject(1); + darkMode$ = this.darkModeSource.asObservable(); + + constructor() { + this.showNavBar(); + } + + showNavBar() { + this.navbarVisibleSource.next(true); + } + + hideNavBar() { + this.navbarVisibleSource.next(false); + } + + toggleDarkMode() { + this.darkMode = !this.darkMode; + this.darkModeSource.next(this.darkMode); + } + + setDarkMode(mode: boolean) { + this.darkMode = mode; + this.darkModeSource.next(this.darkMode); + } + + +} diff --git a/UI/Web/src/app/_services/reader.service.ts b/UI/Web/src/app/_services/reader.service.ts new file mode 100644 index 000000000..056169644 --- /dev/null +++ b/UI/Web/src/app/_services/reader.service.ts @@ -0,0 +1,107 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +//import * as console.log from 'console.log'; +import { environment } from 'src/environments/environment'; +import { ChapterInfo } from '../manga-reader/_models/chapter-info'; +import { UtilityService } from '../shared/_services/utility.service'; +import { Bookmark } from '../_models/bookmark'; +import { Chapter } from '../_models/chapter'; +import { Volume } from '../_models/volume'; + +@Injectable({ + providedIn: 'root' +}) +export class ReaderService { + + baseUrl = environment.apiUrl; + + // Override background color for reader and restore it onDestroy + private originalBodyColor!: string; + + constructor(private httpClient: HttpClient, private utilityService: UtilityService) { } + + getBookmark(chapterId: number) { + return this.httpClient.get(this.baseUrl + 'reader/get-bookmark?chapterId=' + chapterId); + } + + getPageUrl(chapterId: number, page: number) { + return this.baseUrl + 'reader/image?chapterId=' + chapterId + '&page=' + page; + } + + getChapterInfo(chapterId: number) { + return this.httpClient.get(this.baseUrl + 'reader/chapter-info?chapterId=' + chapterId); + } + + bookmark(seriesId: number, volumeId: number, chapterId: number, page: number, bookScrollId: string | null = null) { + return this.httpClient.post(this.baseUrl + 'reader/bookmark', {seriesId, volumeId, chapterId, pageNum: page, bookScrollId}); + } + + markVolumeRead(seriesId: number, volumeId: number) { + return this.httpClient.post(this.baseUrl + 'reader/mark-volume-read', {seriesId, volumeId}); + } + + getNextChapter(seriesId: number, volumeId: number, currentChapterId: number) { + return this.httpClient.get(this.baseUrl + 'reader/next-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId); + } + + getPrevChapter(seriesId: number, volumeId: number, currentChapterId: number) { + return this.httpClient.get(this.baseUrl + 'reader/prev-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId); + } + + getCurrentChapter(volumes: Array): Chapter { + let currentlyReadingChapter: Chapter | undefined = undefined; + const chapters = volumes.filter(v => v.number !== 0).map(v => v.chapters || []).flat().sort(this.utilityService.sortChapters); // changed from === 0 to != 0 + + for (const c of chapters) { + if (c.pagesRead < c.pages) { + currentlyReadingChapter = c; + break; + } + } + + if (currentlyReadingChapter === undefined) { + // Check if there are specials we can load: + const specials = volumes.filter(v => v.number === 0).map(v => v.chapters || []).flat().sort(this.utilityService.sortChapters); + for (const c of specials) { + if (c.pagesRead < c.pages) { + currentlyReadingChapter = c; + break; + } + } + if (currentlyReadingChapter === undefined) { + // Default to first chapter + currentlyReadingChapter = chapters[0]; + } + } + + return currentlyReadingChapter; + } + + /** + * Captures current body color and forces background color to be black. Call @see resetOverrideStyles() on destroy of component to revert changes + */ + setOverrideStyles() { + const bodyNode = document.querySelector('body'); + if (bodyNode !== undefined && bodyNode !== null) { + this.originalBodyColor = bodyNode.style.background; + bodyNode.setAttribute('style', 'background-color: black !important'); + } + } + + resetOverrideStyles() { + const bodyNode = document.querySelector('body'); + if (bodyNode !== undefined && bodyNode !== null && this.originalBodyColor !== undefined) { + bodyNode.style.background = this.originalBodyColor; + } + } + + /** + * Parses out the page number from a Image src url + * @param imageSrc Src attribute of Image + * @returns + */ + imageUrlToPageNum(imageSrc: string) { + if (imageSrc === undefined || imageSrc === '') { return -1; } + return parseInt(imageSrc.split('&page=')[1], 10); + } +} diff --git a/UI/Web/src/app/_services/series.service.ts b/UI/Web/src/app/_services/series.service.ts new file mode 100644 index 000000000..033c34b35 --- /dev/null +++ b/UI/Web/src/app/_services/series.service.ts @@ -0,0 +1,163 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { environment } from 'src/environments/environment'; +import { Chapter } from '../_models/chapter'; +import { CollectionTag } from '../_models/collection-tag'; +import { InProgressChapter } from '../_models/in-progress-chapter'; +import { PaginatedResult } from '../_models/pagination'; +import { Series } from '../_models/series'; +import { SeriesMetadata } from '../_models/series-metadata'; +import { Volume } from '../_models/volume'; +import { ImageService } from './image.service'; + +@Injectable({ + providedIn: 'root' +}) +export class SeriesService { + + baseUrl = environment.apiUrl; + paginatedResults: PaginatedResult = new PaginatedResult(); + paginatedSeriesForTagsResults: PaginatedResult = new PaginatedResult(); + + constructor(private httpClient: HttpClient, private imageService: ImageService) { } + + _cachePaginatedResults(response: any, paginatedVariable: PaginatedResult) { + if (response.body === null) { + paginatedVariable.result = []; + } else { + paginatedVariable.result = response.body; + } + + const pageHeader = response.headers.get('Pagination'); + if (pageHeader !== null) { + paginatedVariable.pagination = JSON.parse(pageHeader); + } + + return paginatedVariable; + } + + getSeriesForLibrary(libraryId: number, pageNum?: number, itemsPerPage?: number) { + let params = new HttpParams(); + + params = this._addPaginationIfExists(params, pageNum, itemsPerPage); + + return this.httpClient.get>(this.baseUrl + 'series?libraryId=' + libraryId, {observe: 'response', params}).pipe( + map((response: any) => { + return this._cachePaginatedResults(response, this.paginatedResults); + }) + ); + } + + getSeries(seriesId: number) { + return this.httpClient.get(this.baseUrl + 'series/' + seriesId); + } + + getVolumes(seriesId: number) { + return this.httpClient.get(this.baseUrl + 'series/volumes?seriesId=' + seriesId); + } + + getVolume(volumeId: number) { + return this.httpClient.get(this.baseUrl + 'series/volume?volumeId=' + volumeId); + } + + getChapter(chapterId: number) { + return this.httpClient.get(this.baseUrl + 'series/chapter?chapterId=' + chapterId); + } + + getData(id: number) { + return of(id); + } + + delete(seriesId: number) { + return this.httpClient.delete(this.baseUrl + 'series/' + seriesId); + } + + updateRating(seriesId: number, userRating: number, userReview: string) { + return this.httpClient.post(this.baseUrl + 'series/update-rating', {seriesId, userRating, userReview}); + } + + updateSeries(model: any) { + return this.httpClient.post(this.baseUrl + 'series/', model); + } + + markRead(seriesId: number) { + return this.httpClient.post(this.baseUrl + 'reader/mark-read', {seriesId}); + } + + markUnread(seriesId: number) { + return this.httpClient.post(this.baseUrl + 'reader/mark-unread', {seriesId}); + } + + getRecentlyAdded(libraryId: number = 0, pageNum?: number, itemsPerPage?: number) { + let params = new HttpParams(); + + params = this._addPaginationIfExists(params, pageNum, itemsPerPage); + + return this.httpClient.get(this.baseUrl + 'series/recently-added', {observe: 'response', params}).pipe( + map((response: any) => { + return this._cachePaginatedResults(response, this.paginatedSeriesForTagsResults); + }) + ); + } + + getInProgress(libraryId: number = 0) { + return this.httpClient.get(this.baseUrl + 'series/in-progress?libraryId=' + libraryId).pipe(map(series => { + series.forEach(s => s.coverImage = this.imageService.getSeriesCoverImage(s.id)); + return series; + })); + } + + getContinueReading(libraryId: number = 0) { + return this.httpClient.get(this.baseUrl + 'series/continue-reading?libraryId=' + libraryId); + } + + refreshMetadata(series: Series) { + return this.httpClient.post(this.baseUrl + 'series/refresh-metadata', {libraryId: series.libraryId, seriesId: series.id}); + } + + scan(libraryId: number, seriesId: number) { + return this.httpClient.post(this.baseUrl + 'series/scan', {libraryId: libraryId, seriesId: seriesId}); + } + + getMetadata(seriesId: number) { + return this.httpClient.get(this.baseUrl + 'series/metadata?seriesId=' + seriesId).pipe(map(items => { + items?.tags.forEach(tag => tag.coverImage = this.imageService.getCollectionCoverImage(tag.id)); + return items; + })); + } + + updateMetadata(seriesMetadata: SeriesMetadata, tags: CollectionTag[]) { + const data = { + seriesMetadata, + tags + }; + return this.httpClient.post(this.baseUrl + 'series/metadata', data, {responseType: 'text' as 'json'}); + } + + getSeriesForTag(collectionTagId: number, pageNum?: number, itemsPerPage?: number) { + let params = new HttpParams(); + + params = this._addPaginationIfExists(params, pageNum, itemsPerPage); + + // NOTE: I'm not sure the paginated result is doing anything + // if (this.paginatedSeriesForTagsResults?.pagination !== undefined && this.paginatedSeriesForTagsResults?.pagination?.currentPage === pageNum) { + // return of(this.paginatedSeriesForTagsResults); + // } + + return this.httpClient.get>(this.baseUrl + 'series/series-by-collection?collectionId=' + collectionTagId, {observe: 'response', params}).pipe( + map((response: any) => { + return this._cachePaginatedResults(response, this.paginatedSeriesForTagsResults); + }) + ); + } + + _addPaginationIfExists(params: HttpParams, pageNum?: number, itemsPerPage?: number) { + if (pageNum !== null && pageNum !== undefined && itemsPerPage !== null && itemsPerPage !== undefined) { + params = params.append('pageNumber', pageNum + ''); + params = params.append('pageSize', itemsPerPage + ''); + } + return params; + } +} diff --git a/UI/Web/src/app/_services/server.service.ts b/UI/Web/src/app/_services/server.service.ts new file mode 100644 index 000000000..9d4e9e848 --- /dev/null +++ b/UI/Web/src/app/_services/server.service.ts @@ -0,0 +1,26 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; +import { ServerInfo } from '../admin/_models/server-info'; + +@Injectable({ + providedIn: 'root' +}) +export class ServerService { + + baseUrl = environment.apiUrl; + + constructor(private httpClient: HttpClient) { } + + restart() { + return this.httpClient.post(this.baseUrl + 'server/restart', {}); + } + + fetchLogs() { + return this.httpClient.get(this.baseUrl + 'server/logs', {responseType: 'blob' as 'text'}); + } + + getServerInfo() { + return this.httpClient.get(this.baseUrl + 'server/server-info'); + } +} diff --git a/UI/Web/src/app/_services/stats.service.ts b/UI/Web/src/app/_services/stats.service.ts new file mode 100644 index 000000000..56d56d633 --- /dev/null +++ b/UI/Web/src/app/_services/stats.service.ts @@ -0,0 +1,18 @@ +import { HttpClient } from "@angular/common/http"; +import { Injectable } from "@angular/core"; +import { environment } from "src/environments/environment"; +import { ClientInfo } from "../_models/client-info"; + +@Injectable({ + providedIn: 'root' +}) +export class StatsService { + + baseUrl = environment.apiUrl; + + constructor(private httpClient: HttpClient) { } + + public sendClientInfo(clientInfo: ClientInfo) { + return this.httpClient.post(this.baseUrl + 'stats/client-info', clientInfo); + } +} \ No newline at end of file diff --git a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html new file mode 100644 index 000000000..78440a06b --- /dev/null +++ b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html @@ -0,0 +1,54 @@ + + + + diff --git a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.scss b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.scss new file mode 100644 index 000000000..eb27b2165 --- /dev/null +++ b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.scss @@ -0,0 +1,15 @@ + +$breadcrumb-divider: quote(">"); + +.breadcrumb-item + .breadcrumb-item::before { + content: $breadcrumb-divider; +} + +.scrollable { + overflow-y: auto; + max-height: 400px; +} + +.btn-outline-secondary { + border: 1px solid #ced4da; +} \ No newline at end of file diff --git a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts new file mode 100644 index 000000000..fc5a5d2ee --- /dev/null +++ b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts @@ -0,0 +1,110 @@ +import { Component, OnInit } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Stack } from 'src/app/shared/data-structures/stack'; +import { LibraryService } from '../../../_services/library.service'; + + +export interface DirectoryPickerResult { + success: boolean; + folderPath: string; +} + + +@Component({ + selector: 'app-directory-picker', + templateUrl: './directory-picker.component.html', + styleUrls: ['./directory-picker.component.scss'] +}) +export class DirectoryPickerComponent implements OnInit { + + currentRoot = ''; + folders: string[] = []; + routeStack: Stack = new Stack(); + filterQuery: string = ''; + + constructor(public modal: NgbActiveModal, private libraryService: LibraryService) { + + } + + ngOnInit(): void { + this.loadChildren(this.currentRoot); + } + + filterFolder = (folder: string) => { + return folder.toLowerCase().indexOf((this.filterQuery || '').toLowerCase()) >= 0; + } + + selectNode(folderName: string) { + this.currentRoot = folderName; + this.routeStack.push(folderName); + const fullPath = this.routeStack.items.join('/'); + this.loadChildren(fullPath); + } + + goBack() { + // BUG: When Going back to initial listing, this code gets stuck on first drive + this.routeStack.pop(); + const stackPeek = this.routeStack.peek(); + if (stackPeek !== undefined) { + this.currentRoot = stackPeek; + const fullPath = this.routeStack.items.join('/'); + this.loadChildren(fullPath); + } else { + this.currentRoot = ''; + this.loadChildren(this.currentRoot); + } + + } + + loadChildren(path: string) { + this.libraryService.listDirectories(path).subscribe(folders => { + this.folders = folders; + }, err => { + // If there was an error, pop off last directory added to stack + this.routeStack.pop(); + }); + } + + shareFolder(folderName: string, event: any) { + event.preventDefault(); + event.stopPropagation(); + + let fullPath = folderName; + if (this.routeStack.items.length > 0) { + const pathJoin = this.routeStack.items.join('/'); + fullPath = pathJoin + ((pathJoin.endsWith('/') || pathJoin.endsWith('\\')) ? '' : '/') + folderName; + } + + this.modal.close({success: true, folderPath: fullPath}); + } + + close() { + this.modal.close({success: false, folderPath: undefined}); + } + + getStem(path: string): string { + + const lastPath = this.routeStack.peek(); + if (lastPath && lastPath != path) { + let replaced = path.replace(lastPath, ''); + if (replaced.startsWith('/') || replaced.startsWith('\\')) { + replaced = replaced.substr(1, replaced.length); + } + return replaced; + } + + return path; + } + + navigateTo(index: number) { + const numberOfPops = this.routeStack.items.length - index; + if (this.routeStack.items.length - numberOfPops > this.routeStack.items.length) { + this.routeStack.items = []; + } + for (let i = 0; i < numberOfPops; i++) { + this.routeStack.pop(); + } + + this.loadChildren(this.routeStack.peek() || ''); + } +} diff --git a/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.html b/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.html new file mode 100644 index 000000000..205195384 --- /dev/null +++ b/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.html @@ -0,0 +1,23 @@ + + + + diff --git a/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.scss b/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts b/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts new file mode 100644 index 000000000..ee659adf6 --- /dev/null +++ b/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts @@ -0,0 +1,70 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Member } from 'src/app/_models/member'; +import { AccountService } from 'src/app/_services/account.service'; +import { MemberService } from 'src/app/_services/member.service'; + +@Component({ + selector: 'app-edit-rbs-modal', + templateUrl: './edit-rbs-modal.component.html', + styleUrls: ['./edit-rbs-modal.component.scss'] +}) +export class EditRbsModalComponent implements OnInit { + + @Input() member: Member | undefined; + allRoles: string[] = []; + selectedRoles: Array<{selected: boolean, data: string}> = []; + + constructor(public modal: NgbActiveModal, private accountService: AccountService, private memberService: MemberService) { } + + ngOnInit(): void { + this.accountService.getRoles().subscribe(roles => { + roles = roles.filter(item => item != 'Admin' && item != 'Pleb'); // Do not allow the user to modify Account RBS + this.allRoles = roles; + this.selectedRoles = roles.map(item => { + return {selected: false, data: item}; + }); + + this.preselect(); + }); + } + + close() { + this.modal.close(false); + } + + save() { + if (this.member?.username === undefined) { + return; + } + + const selectedRoles = this.selectedRoles.filter(item => item.selected).map(item => item.data); + this.memberService.updateMemberRoles(this.member?.username, selectedRoles).subscribe(() => { + if (this.member) { + this.member.roles = selectedRoles; + } + this.modal.close(true); + }); + } + + reset() { + this.selectedRoles = this.allRoles.map(item => { + return {selected: false, data: item}; + }); + + + this.preselect(); + } + + preselect() { + if (this.member !== undefined) { + this.member.roles.forEach(role => { + const foundRole = this.selectedRoles.filter(item => item.data === role); + if (foundRole.length > 0) { + foundRole[0].selected = true; + } + }); + } + } + +} diff --git a/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.html b/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.html new file mode 100644 index 000000000..458880b5e --- /dev/null +++ b/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.html @@ -0,0 +1,23 @@ + + + + diff --git a/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.scss b/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.ts b/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.ts new file mode 100644 index 000000000..5ebcdaebc --- /dev/null +++ b/UI/Web/src/app/admin/_modals/library-access-modal/library-access-modal.component.ts @@ -0,0 +1,70 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { FormBuilder } from '@angular/forms'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Library } from 'src/app/_models/library'; +import { Member } from 'src/app/_models/member'; +import { LibraryService } from 'src/app/_services/library.service'; + +@Component({ + selector: 'app-library-access-modal', + templateUrl: './library-access-modal.component.html', + styleUrls: ['./library-access-modal.component.scss'] +}) +export class LibraryAccessModalComponent implements OnInit { + + @Input() member: Member | undefined; + allLibraries: Library[] = []; + selectedLibraries: Array<{selected: boolean, data: Library}> = []; + + constructor(public modal: NgbActiveModal, private libraryService: LibraryService, private fb: FormBuilder) { } + + ngOnInit(): void { + this.libraryService.getLibraries().subscribe(libs => { + this.allLibraries = libs; + this.selectedLibraries = libs.map(item => { + return {selected: false, data: item}; + }); + + if (this.member !== undefined) { + this.member.libraries.forEach(lib => { + const foundLibrary = this.selectedLibraries.filter(item => item.data.name === lib.name); + if (foundLibrary.length > 0) { + foundLibrary[0].selected = true; + } + }); + } + }); + } + + close() { + this.modal.close(false); + } + + save() { + if (this.member?.username === undefined) { + return; + } + + const selectedLibraries = this.selectedLibraries.filter(item => item.selected).map(item => item.data); + this.libraryService.updateLibrariesForMember(this.member?.username, selectedLibraries).subscribe(() => { + this.modal.close(true); + }); + } + + reset() { + this.selectedLibraries = this.allLibraries.map(item => { + return {selected: false, data: item}; + }); + + + if (this.member !== undefined) { + this.member.libraries.forEach(lib => { + const foundLibrary = this.selectedLibraries.filter(item => item.data.name === lib.name); + if (foundLibrary.length > 0) { + foundLibrary[0].selected = true; + } + }); + } + } + +} diff --git a/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.html b/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.html new file mode 100644 index 000000000..867be0a4a --- /dev/null +++ b/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.html @@ -0,0 +1,40 @@ + +
+ + + +
\ No newline at end of file diff --git a/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.scss b/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.ts b/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.ts new file mode 100644 index 000000000..f1257aa8d --- /dev/null +++ b/UI/Web/src/app/admin/_modals/library-editor-modal/library-editor-modal.component.ts @@ -0,0 +1,104 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { Library } from 'src/app/_models/library'; +import { LibraryService } from 'src/app/_services/library.service'; +import { SettingsService } from '../../settings.service'; +import { DirectoryPickerComponent, DirectoryPickerResult } from '../directory-picker/directory-picker.component'; + +@Component({ + selector: 'app-library-editor-modal', + templateUrl: './library-editor-modal.component.html', + styleUrls: ['./library-editor-modal.component.scss'] +}) +export class LibraryEditorModalComponent implements OnInit { + + @Input() library: Library | undefined = undefined; + + libraryForm: FormGroup = new FormGroup({ + name: new FormControl('', [Validators.required]), + type: new FormControl(0, [Validators.required]) + }); + + selectedFolders: string[] = []; + errorMessage = ''; + madeChanges = false; + libraryTypes: string[] = [] + + + constructor(private modalService: NgbModal, private libraryService: LibraryService, public modal: NgbActiveModal, private settingService: SettingsService) { } + + ngOnInit(): void { + + this.settingService.getLibraryTypes().subscribe((types) => { + this.libraryTypes = types; + }); + this.setValues(); + + } + + + removeFolder(folder: string) { + this.selectedFolders = this.selectedFolders.filter(item => item !== folder); + this.madeChanges = true; + } + + submitLibrary() { + const model = this.libraryForm.value; + model.folders = this.selectedFolders; + + if (this.libraryForm.errors) { + return; + } + + if (this.library !== undefined) { + model.id = this.library.id; + model.folders = model.folders.map((item: string) => item.startsWith('\\') ? item.substr(1, item.length) : item); + model.type = parseInt(model.type, 10); + this.libraryService.update(model).subscribe(() => { + this.close(true); + }, err => { + this.errorMessage = err; + }); + } else { + model.folders = model.folders.map((item: string) => item.startsWith('\\') ? item.substr(1, item.length) : item); + model.type = parseInt(model.type, 10); + this.libraryService.create(model).subscribe(() => { + this.close(true); + }, err => { + this.errorMessage = err; + }); + } + } + + close(returnVal= false) { + const model = this.libraryForm.value; + this.modal.close(returnVal); + } + + reset() { + this.setValues(); + } + + setValues() { + if (this.library !== undefined) { + this.libraryForm.get('name')?.setValue(this.library.name); + this.libraryForm.get('type')?.setValue(this.library.type); + this.selectedFolders = this.library.folders; + this.madeChanges = false; + } + } + + openDirectoryPicker() { + const modalRef = this.modalService.open(DirectoryPickerComponent, { scrollable: true, size: 'lg' }); + modalRef.closed.subscribe((closeResult: DirectoryPickerResult) => { + if (closeResult.success) { + if (!this.selectedFolders.includes(closeResult.folderPath)) { + this.selectedFolders.push(closeResult.folderPath); + this.madeChanges = true; + } + } + }); + } + +} diff --git a/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.html b/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.html new file mode 100644 index 000000000..c7f16ebef --- /dev/null +++ b/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.html @@ -0,0 +1,21 @@ +
+ + + +
\ No newline at end of file diff --git a/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.scss b/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.ts b/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.ts new file mode 100644 index 000000000..5cee429c1 --- /dev/null +++ b/UI/Web/src/app/admin/_modals/reset-password-modal/reset-password-modal.component.ts @@ -0,0 +1,36 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { FormGroup, FormControl, Validators } from '@angular/forms'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Member } from 'src/app/_models/member'; +import { AccountService } from 'src/app/_services/account.service'; +import { MemberService } from 'src/app/_services/member.service'; + +@Component({ + selector: 'app-reset-password-modal', + templateUrl: './reset-password-modal.component.html', + styleUrls: ['./reset-password-modal.component.scss'] +}) +export class ResetPasswordModalComponent implements OnInit { + + @Input() member!: Member; + errorMessage = ''; + resetPasswordForm: FormGroup = new FormGroup({ + password: new FormControl('', [Validators.required]), + }); + + constructor(public modal: NgbActiveModal, private accountService: AccountService) { } + + ngOnInit(): void { + } + + save() { + this.accountService.resetPassword(this.member.username, this.resetPasswordForm.value.password).subscribe(() => { + this.modal.close(); + }); + } + + close() { + this.modal.close(); + } + +} diff --git a/UI/Web/src/app/admin/_models/server-info.ts b/UI/Web/src/app/admin/_models/server-info.ts new file mode 100644 index 000000000..5fc3150f9 --- /dev/null +++ b/UI/Web/src/app/admin/_models/server-info.ts @@ -0,0 +1,8 @@ +export interface ServerInfo { + os: string; + dotNetVersion: string; + runTimeVersion: string; + kavitaVersion: string; + buildBranch: string; + culture: string; +} \ No newline at end of file diff --git a/UI/Web/src/app/admin/_models/server-settings.ts b/UI/Web/src/app/admin/_models/server-settings.ts new file mode 100644 index 000000000..6d4150899 --- /dev/null +++ b/UI/Web/src/app/admin/_models/server-settings.ts @@ -0,0 +1,8 @@ +export interface ServerSettings { + cacheDirectory: string; + taskScan: string; + taskBackup: string; + loggingLevel: string; + port: number; + allowStatCollection: boolean; +} diff --git a/UI/Web/src/app/admin/admin-routing.module.ts b/UI/Web/src/app/admin/admin-routing.module.ts new file mode 100644 index 000000000..166b8706a --- /dev/null +++ b/UI/Web/src/app/admin/admin-routing.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { AdminGuard } from '../_guards/admin.guard'; +import { DashboardComponent } from './dashboard/dashboard.component'; + +const routes: Routes = [ + {path: '**', component: DashboardComponent, pathMatch: 'full'}, + { + runGuardsAndResolvers: 'always', + canActivate: [AdminGuard], + children: [ + {path: '/dashboard', component: DashboardComponent}, + ] + } +]; + + +@NgModule({ + imports: [RouterModule.forChild(routes), ], + exports: [RouterModule] +}) +export class AdminRoutingModule { } diff --git a/UI/Web/src/app/admin/admin.module.ts b/UI/Web/src/app/admin/admin.module.ts new file mode 100644 index 000000000..fe9125b5c --- /dev/null +++ b/UI/Web/src/app/admin/admin.module.ts @@ -0,0 +1,47 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { AdminRoutingModule } from './admin-routing.module'; +import { DashboardComponent } from './dashboard/dashboard.component'; +import { NgbNavModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; +import { ManageLibraryComponent } from './manage-library/manage-library.component'; +import { ManageUsersComponent } from './manage-users/manage-users.component'; +import { LibraryEditorModalComponent } from './_modals/library-editor-modal/library-editor-modal.component'; +import { SharedModule } from '../shared/shared.module'; +import { LibraryAccessModalComponent } from './_modals/library-access-modal/library-access-modal.component'; +import { DirectoryPickerComponent } from './_modals/directory-picker/directory-picker.component'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ResetPasswordModalComponent } from './_modals/reset-password-modal/reset-password-modal.component'; +import { ManageSettingsComponent } from './manage-settings/manage-settings.component'; +import { FilterPipe } from './filter.pipe'; +import { EditRbsModalComponent } from './_modals/edit-rbs-modal/edit-rbs-modal.component'; +import { ManageSystemComponent } from './manage-system/manage-system.component'; + + + + +@NgModule({ + declarations: [ + ManageUsersComponent, + DashboardComponent, + ManageLibraryComponent, + LibraryEditorModalComponent, + LibraryAccessModalComponent, + DirectoryPickerComponent, + ResetPasswordModalComponent, + ManageSettingsComponent, + FilterPipe, + EditRbsModalComponent, + ManageSystemComponent + ], + imports: [ + CommonModule, + AdminRoutingModule, + ReactiveFormsModule, + FormsModule, + NgbNavModule, + NgbTooltipModule, + SharedModule, + ], + providers: [] +}) +export class AdminModule { } diff --git a/UI/Web/src/app/admin/dashboard/dashboard.component.html b/UI/Web/src/app/admin/dashboard/dashboard.component.html new file mode 100644 index 000000000..c206f7c34 --- /dev/null +++ b/UI/Web/src/app/admin/dashboard/dashboard.component.html @@ -0,0 +1,29 @@ +
+

Admin Dashboard

+ +
+ +
+ + +
+ +
\ No newline at end of file diff --git a/UI/Web/src/app/admin/dashboard/dashboard.component.scss b/UI/Web/src/app/admin/dashboard/dashboard.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/dashboard/dashboard.component.ts b/UI/Web/src/app/admin/dashboard/dashboard.component.ts new file mode 100644 index 000000000..48bced7d2 --- /dev/null +++ b/UI/Web/src/app/admin/dashboard/dashboard.component.ts @@ -0,0 +1,52 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { ServerService } from 'src/app/_services/server.service'; +import { saveAs } from 'file-saver'; + + + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.scss'] +}) +export class DashboardComponent implements OnInit { + + tabs: Array<{title: string, fragment: string}> = [ + {title: 'General', fragment: ''}, + {title: 'Users', fragment: 'users'}, + {title: 'Libraries', fragment: 'libraries'}, + {title: 'System', fragment: 'system'} + ]; + counter = this.tabs.length + 1; + active = this.tabs[0]; + + constructor(public route: ActivatedRoute, private serverService: ServerService, private toastr: ToastrService) { + this.route.fragment.subscribe(frag => { + const tab = this.tabs.filter(item => item.fragment === frag); + if (tab.length > 0) { + this.active = tab[0]; + } else { + this.active = this.tabs[0]; // Default to first tab + } + }); + + } + + ngOnInit() {} + + restartServer() { + this.serverService.restart().subscribe(() => { + setTimeout(() => this.toastr.success('Please reload.'), 1000); + }); + } + + fetchLogs() { + this.serverService.fetchLogs().subscribe(res => { + const blob = new Blob([res], {type: 'text/plain;charset=utf-8'}); + saveAs(blob, 'kavita.zip'); + }); + } + +} diff --git a/UI/Web/src/app/admin/filter.pipe.ts b/UI/Web/src/app/admin/filter.pipe.ts new file mode 100644 index 000000000..749425a27 --- /dev/null +++ b/UI/Web/src/app/admin/filter.pipe.ts @@ -0,0 +1,16 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'filter', + pure: false +}) +export class FilterPipe implements PipeTransform { + + transform(items: any[], callback: (item: any) => boolean): any { + if (!items || !callback) { + return items; + } + return items.filter(item => callback(item)); +} + +} diff --git a/UI/Web/src/app/admin/manage-library/manage-library.component.html b/UI/Web/src/app/admin/manage-library/manage-library.component.html new file mode 100644 index 000000000..44cf374e6 --- /dev/null +++ b/UI/Web/src/app/admin/manage-library/manage-library.component.html @@ -0,0 +1,33 @@ +
+
+

Libraries

+
+
+
    +
  • +
    +

    + {{library.name | titlecase}} +
    + + + +
    +

    +
    +
    Type: {{libraryType(library.type)}}
    +
    Shared Folders: {{library.folders.length + ' folders'}}
    +
  • +
  • +
    + +
    +
  • +
  • + There are no libraries. Try creating one. +
  • +
+ + + +
\ No newline at end of file diff --git a/UI/Web/src/app/admin/manage-library/manage-library.component.scss b/UI/Web/src/app/admin/manage-library/manage-library.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/manage-library/manage-library.component.ts b/UI/Web/src/app/admin/manage-library/manage-library.component.ts new file mode 100644 index 000000000..f0aae12e9 --- /dev/null +++ b/UI/Web/src/app/admin/manage-library/manage-library.component.ts @@ -0,0 +1,98 @@ +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { ToastrService } from 'ngx-toastr'; +import { Subject } from 'rxjs'; +import { take, takeUntil } from 'rxjs/operators'; +import { ConfirmService } from 'src/app/shared/confirm.service'; +import { Library, LibraryType } from 'src/app/_models/library'; +import { LibraryService } from 'src/app/_services/library.service'; +import { LibraryEditorModalComponent } from '../_modals/library-editor-modal/library-editor-modal.component'; + +@Component({ + selector: 'app-manage-library', + templateUrl: './manage-library.component.html', + styleUrls: ['./manage-library.component.scss'] +}) +export class ManageLibraryComponent implements OnInit, OnDestroy { + + libraries: Library[] = []; + createLibraryToggle = false; + loading = false; + /** + * If a deletion is in progress for a library + */ + deletionInProgress: boolean = false; + + private readonly onDestroy = new Subject(); + + constructor(private modalService: NgbModal, private libraryService: LibraryService, private toastr: ToastrService, private confirmService: ConfirmService) { } + + ngOnInit(): void { + this.getLibraries(); + } + + ngOnDestroy() { + this.onDestroy.next(); + this.onDestroy.complete(); + } + + getLibraries() { + this.loading = true; + this.libraryService.getLibraries().pipe(take(1)).subscribe(libraries => { + this.libraries = libraries; + this.loading = false; + }); + } + + editLibrary(library: Library) { + const modalRef = this.modalService.open(LibraryEditorModalComponent); + modalRef.componentInstance.library = library; + modalRef.closed.pipe(takeUntil(this.onDestroy)).subscribe(refresh => { + if (refresh) { + this.getLibraries(); + } + }); + } + + addLibrary() { + const modalRef = this.modalService.open(LibraryEditorModalComponent); + modalRef.closed.pipe(takeUntil(this.onDestroy)).subscribe(refresh => { + if (refresh) { + this.getLibraries(); + } + }); + } + + async deleteLibrary(library: Library) { + if (await this.confirmService.confirm('Are you sure you want to delete this library? You cannot undo this action.')) { + this.deletionInProgress = true; + this.libraryService.delete(library.id).pipe(take(1)).subscribe(() => { + this.deletionInProgress = false; + this.getLibraries(); + this.toastr.success('Library has been removed'); // BUG: This is not causing a refresh + }); + } + } + + scanLibrary(library: Library) { + this.libraryService.scan(library.id).pipe(take(1)).subscribe(() => { + this.toastr.success('A scan has been queued for ' + library.name); + }); + } + + libraryType(libraryType: LibraryType) { + switch(libraryType) { + case LibraryType.Book: + return 'Book'; + case LibraryType.Comic: + return 'Comic'; + case LibraryType.Manga: + return 'Manga'; + case LibraryType.MangaImages: + return 'Images (Manga)'; + case LibraryType.ComicImages: + return 'Images (Comic)'; + } + } + +} diff --git a/UI/Web/src/app/admin/manage-settings/manage-settings.component.html b/UI/Web/src/app/admin/manage-settings/manage-settings.component.html new file mode 100644 index 000000000..c3a94bd0e --- /dev/null +++ b/UI/Web/src/app/admin/manage-settings/manage-settings.component.html @@ -0,0 +1,64 @@ +
+
+

Port and Logging Level require a manual restart of Kavita to take effect.

+
+   + Where the server place temporary files when reading. This will be cleaned up on a regular basis. + Where the server place temporary files when reading. This will be cleaned up on a regular basis. + +
+ +
+   + Port the server listens on. This is fixed if you are running on Docker. Requires restart to take effect. + Port the server listens on. This is fixed if you are running on Docker. Requires restart to take effect. + +
+ +
+   + Use debug to help identify issues. Debug can eat up a lot of disk space. Requires restart to take effect. + Port the server listens on. Requires restart to take effect. + +
+ +
+   + Send anonymous usage and error information to Kavita's servers. This includes information on your browser, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes. Requires restart to take effect. + Send anonymous usage and error information to Kavita's servers. This includes information on your browser, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes. Requires restart to take effect. +

Send anonymous usage and error information to Kavita's servers. This includes information on your browser, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes. Requires restart to take effect

+
+ + +
+
+ + + +

Reoccuring Tasks

+
+   + How often Kavita will scan and refresh metatdata around manga files. + How often Kavita will scan and refresh metatdata around manga files. + +
+ +
+   + How often Kavita will backup the database. + How often Kavita will backup the database. + +
+ +
+ + +
+
+
\ No newline at end of file diff --git a/UI/Web/src/app/admin/manage-settings/manage-settings.component.scss b/UI/Web/src/app/admin/manage-settings/manage-settings.component.scss new file mode 100644 index 000000000..52237a3ea --- /dev/null +++ b/UI/Web/src/app/admin/manage-settings/manage-settings.component.scss @@ -0,0 +1,11 @@ +@import '../../../assets/themes/dark.scss'; + +.accent { + font-style: italic; + font-size: 0.7rem; + background-color: $dark-form-background; + padding: 10px; + color: lightgray; + border-radius: 6px; + box-shadow: inset 0px 0px 8px 1px $dark-form-background +} \ No newline at end of file diff --git a/UI/Web/src/app/admin/manage-settings/manage-settings.component.ts b/UI/Web/src/app/admin/manage-settings/manage-settings.component.ts new file mode 100644 index 000000000..4f070d62b --- /dev/null +++ b/UI/Web/src/app/admin/manage-settings/manage-settings.component.ts @@ -0,0 +1,61 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormControl, Validators } from '@angular/forms'; +import { ToastrService } from 'ngx-toastr'; +import { take } from 'rxjs/operators'; +import { SettingsService } from '../settings.service'; +import { ServerSettings } from '../_models/server-settings'; + +@Component({ + selector: 'app-manage-settings', + templateUrl: './manage-settings.component.html', + styleUrls: ['./manage-settings.component.scss'] +}) +export class ManageSettingsComponent implements OnInit { + + serverSettings!: ServerSettings; + settingsForm: FormGroup = new FormGroup({}); + taskFrequencies: Array = []; + logLevels: Array = []; + + constructor(private settingsService: SettingsService, private toastr: ToastrService) { } + + ngOnInit(): void { + this.settingsService.getTaskFrequencies().pipe(take(1)).subscribe(frequencies => { + this.taskFrequencies = frequencies; + }); + this.settingsService.getLoggingLevels().pipe(take(1)).subscribe(levels => { + this.logLevels = levels; + }); + this.settingsService.getServerSettings().pipe(take(1)).subscribe((settings: ServerSettings) => { + this.serverSettings = settings; + this.settingsForm.addControl('cacheDirectory', new FormControl(this.serverSettings.cacheDirectory, [Validators.required])); + this.settingsForm.addControl('taskScan', new FormControl(this.serverSettings.taskScan, [Validators.required])); + this.settingsForm.addControl('taskBackup', new FormControl(this.serverSettings.taskBackup, [Validators.required])); + this.settingsForm.addControl('port', new FormControl(this.serverSettings.port, [Validators.required])); + this.settingsForm.addControl('loggingLevel', new FormControl(this.serverSettings.loggingLevel, [Validators.required])); + this.settingsForm.addControl('allowStatCollection', new FormControl(this.serverSettings.allowStatCollection, [Validators.required])); + }); + } + + resetForm() { + this.settingsForm.get('cacheDirectory')?.setValue(this.serverSettings.cacheDirectory); + this.settingsForm.get('scanTask')?.setValue(this.serverSettings.taskScan); + this.settingsForm.get('taskBackup')?.setValue(this.serverSettings.taskBackup); + this.settingsForm.get('port')?.setValue(this.serverSettings.port); + this.settingsForm.get('loggingLevel')?.setValue(this.serverSettings.loggingLevel); + this.settingsForm.get('allowStatCollection')?.setValue(this.serverSettings.allowStatCollection); + } + + saveSettings() { + const modelSettings = this.settingsForm.value; + + this.settingsService.updateServerSettings(modelSettings).pipe(take(1)).subscribe((settings: ServerSettings) => { + this.serverSettings = settings; + this.resetForm(); + this.toastr.success('Server settings updated'); + }, (err: any) => { + console.error('error: ', err); + }); + } + +} diff --git a/UI/Web/src/app/admin/manage-system/manage-system.component.html b/UI/Web/src/app/admin/manage-system/manage-system.component.html new file mode 100644 index 000000000..440192f4c --- /dev/null +++ b/UI/Web/src/app/admin/manage-system/manage-system.component.html @@ -0,0 +1,43 @@ +
+ +

About System

+
+
+
+
Version
+
{{serverInfo.kavitaVersion}}
+ +
.NET Version
+
{{serverInfo.dotNetVersion}}
+
+
+ +

More Info

+
+
+
+
Home page:
+ +
+
+
Wiki:
+ +
+
+
Discord:
+ +
+
+
Donations:
+ +
+ +
+
Feature Requests:
+ +
+
\ No newline at end of file diff --git a/UI/Web/src/app/admin/manage-system/manage-system.component.scss b/UI/Web/src/app/admin/manage-system/manage-system.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/manage-system/manage-system.component.ts b/UI/Web/src/app/admin/manage-system/manage-system.component.ts new file mode 100644 index 000000000..30481a5d0 --- /dev/null +++ b/UI/Web/src/app/admin/manage-system/manage-system.component.ts @@ -0,0 +1,61 @@ +import { Component, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { ToastrService } from 'ngx-toastr'; +import { take } from 'rxjs/operators'; +import { ServerService } from 'src/app/_services/server.service'; +import { SettingsService } from '../settings.service'; +import { ServerInfo } from '../_models/server-info'; +import { ServerSettings } from '../_models/server-settings'; + +@Component({ + selector: 'app-manage-system', + templateUrl: './manage-system.component.html', + styleUrls: ['./manage-system.component.scss'] +}) +export class ManageSystemComponent implements OnInit { + + settingsForm: FormGroup = new FormGroup({}); + serverSettings!: ServerSettings; + serverInfo!: ServerInfo; + + constructor(private settingsService: SettingsService, private toastr: ToastrService, private serverService: ServerService) { } + + ngOnInit(): void { + + this.serverService.getServerInfo().pipe(take(1)).subscribe(info => { + this.serverInfo = info; + }); + + this.settingsService.getServerSettings().pipe(take(1)).subscribe((settings: ServerSettings) => { + this.serverSettings = settings; + this.settingsForm.addControl('cacheDirectory', new FormControl(this.serverSettings.cacheDirectory, [Validators.required])); + this.settingsForm.addControl('taskScan', new FormControl(this.serverSettings.taskScan, [Validators.required])); + this.settingsForm.addControl('taskBackup', new FormControl(this.serverSettings.taskBackup, [Validators.required])); + this.settingsForm.addControl('port', new FormControl(this.serverSettings.port, [Validators.required])); + this.settingsForm.addControl('loggingLevel', new FormControl(this.serverSettings.loggingLevel, [Validators.required])); + this.settingsForm.addControl('allowStatCollection', new FormControl(this.serverSettings.allowStatCollection, [Validators.required])); + }); + } + + resetForm() { + this.settingsForm.get('cacheDirectory')?.setValue(this.serverSettings.cacheDirectory); + this.settingsForm.get('scanTask')?.setValue(this.serverSettings.taskScan); + this.settingsForm.get('taskBackup')?.setValue(this.serverSettings.taskBackup); + this.settingsForm.get('port')?.setValue(this.serverSettings.port); + this.settingsForm.get('loggingLevel')?.setValue(this.serverSettings.loggingLevel); + this.settingsForm.get('allowStatCollection')?.setValue(this.serverSettings.allowStatCollection); + } + + saveSettings() { + const modelSettings = this.settingsForm.value; + + this.settingsService.updateServerSettings(modelSettings).pipe(take(1)).subscribe((settings: ServerSettings) => { + this.serverSettings = settings; + this.resetForm(); + this.toastr.success('Server settings updated'); + }, (err: any) => { + console.error('error: ', err); + }); + } + +} diff --git a/UI/Web/src/app/admin/manage-users/manage-users.component.html b/UI/Web/src/app/admin/manage-users/manage-users.component.html new file mode 100644 index 000000000..6d4f93352 --- /dev/null +++ b/UI/Web/src/app/admin/manage-users/manage-users.component.html @@ -0,0 +1,50 @@ + + +
+
+

Users

+
+
+
    +
  • +
    +

    + {{member.username | titlecase}} Admin +
    + + + +
    +

    +
    Last Active: + Never + + {{member.lastActive | date: 'MM/dd/yyyy'}} + +
    +
    Sharing: {{formatLibraries(member)}}
    +
    + Roles: None + + {{role}} + + +
    +
    +
  • +
  • +
    + +
    +
  • +
  • + There are no other users. +
  • +
+ + + +
\ No newline at end of file diff --git a/UI/Web/src/app/admin/manage-users/manage-users.component.scss b/UI/Web/src/app/admin/manage-users/manage-users.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/admin/manage-users/manage-users.component.ts b/UI/Web/src/app/admin/manage-users/manage-users.component.ts new file mode 100644 index 000000000..402cde3f2 --- /dev/null +++ b/UI/Web/src/app/admin/manage-users/manage-users.component.ts @@ -0,0 +1,107 @@ +import { Component, OnInit } from '@angular/core'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { take } from 'rxjs/operators'; +import { MemberService } from 'src/app/_services/member.service'; +import { Member } from 'src/app/_models/member'; +import { User } from 'src/app/_models/user'; +import { AccountService } from 'src/app/_services/account.service'; +import { LibraryAccessModalComponent } from '../_modals/library-access-modal/library-access-modal.component'; +import { ToastrService } from 'ngx-toastr'; +import { ResetPasswordModalComponent } from '../_modals/reset-password-modal/reset-password-modal.component'; +import { ConfirmService } from 'src/app/shared/confirm.service'; +import { EditRbsModalComponent } from '../_modals/edit-rbs-modal/edit-rbs-modal.component'; + +@Component({ + selector: 'app-manage-users', + templateUrl: './manage-users.component.html', + styleUrls: ['./manage-users.component.scss'] +}) +export class ManageUsersComponent implements OnInit { + + members: Member[] = []; + loggedInUsername = ''; + + // Create User functionality + createMemberToggle = false; + loadingMembers = false; + + constructor(private memberService: MemberService, + private accountService: AccountService, + private modalService: NgbModal, + private toastr: ToastrService, + private confirmService: ConfirmService) { + this.accountService.currentUser$.pipe(take(1)).subscribe((user: User) => { + this.loggedInUsername = user.username; + }); + } + + ngOnInit(): void { + this.loadMembers(); + } + + loadMembers() { + this.loadingMembers = true; + this.memberService.getMembers().subscribe(members => { + this.members = members.filter(member => member.username !== this.loggedInUsername); + this.loadingMembers = false; + }); + } + + canEditMember(member: Member): boolean { + return this.loggedInUsername !== member.username; + } + + createMember() { + this.createMemberToggle = true; + } + + onMemberCreated(success: boolean) { + this.createMemberToggle = false; + this.loadMembers(); + } + + openEditLibraryAccess(member: Member) { + const modalRef = this.modalService.open(LibraryAccessModalComponent); + modalRef.componentInstance.member = member; + modalRef.closed.subscribe(result => { + if (result) { + this.loadMembers(); + } + }); + } + + async deleteUser(member: Member) { + if (await this.confirmService.confirm('Are you sure you want to delete this user?')) { + this.memberService.deleteMember(member.username).subscribe(() => { + this.loadMembers(); + this.toastr.success(member.username + ' has been deleted.'); + }); + } + } + + openEditRole(member: Member) { + const modalRef = this.modalService.open(EditRbsModalComponent); + modalRef.componentInstance.member = member; + } + + updatePassword(member: Member) { + const modalRef = this.modalService.open(ResetPasswordModalComponent); + modalRef.componentInstance.member = member; + } + + formatLibraries(member: Member) { + if (member.libraries.length === 0) { + return 'None'; + } + + return member.libraries.map(item => item.name).join(', '); + } + + hasAdminRole(member: Member) { + return member.roles.indexOf('Admin') >= 0; + } + + getRoles(member: Member) { + return member.roles.filter(item => item != 'Pleb'); + } +} diff --git a/UI/Web/src/app/admin/settings.service.ts b/UI/Web/src/app/admin/settings.service.ts new file mode 100644 index 000000000..c791d9abf --- /dev/null +++ b/UI/Web/src/app/admin/settings.service.ts @@ -0,0 +1,34 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; +import { ServerSettings } from './_models/server-settings'; + +@Injectable({ + providedIn: 'root' +}) +export class SettingsService { + + baseUrl = environment.apiUrl; + + constructor(private http: HttpClient) { } + + getServerSettings() { + return this.http.get(this.baseUrl + 'settings'); + } + + updateServerSettings(model: ServerSettings) { + return this.http.post(this.baseUrl + 'settings', model); + } + + getTaskFrequencies() { + return this.http.get(this.baseUrl + 'settings/task-frequencies'); + } + + getLoggingLevels() { + return this.http.get(this.baseUrl + 'settings/log-levels'); + } + + getLibraryTypes() { + return this.http.get(this.baseUrl + 'settings/library-types'); + } +} diff --git a/UI/Web/src/app/all-collections/all-collections.component.html b/UI/Web/src/app/all-collections/all-collections.component.html new file mode 100644 index 000000000..38b7195f3 --- /dev/null +++ b/UI/Web/src/app/all-collections/all-collections.component.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UI/Web/src/app/all-collections/all-collections.component.scss b/UI/Web/src/app/all-collections/all-collections.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/all-collections/all-collections.component.ts b/UI/Web/src/app/all-collections/all-collections.component.ts new file mode 100644 index 000000000..6a37eb3d3 --- /dev/null +++ b/UI/Web/src/app/all-collections/all-collections.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { ToastrService } from 'ngx-toastr'; +import { EditCollectionTagsComponent } from '../_modals/edit-collection-tags/edit-collection-tags.component'; +import { CollectionTag } from '../_models/collection-tag'; +import { Pagination } from '../_models/pagination'; +import { Series } from '../_models/series'; +import { Action, ActionFactoryService, ActionItem } from '../_services/action-factory.service'; +import { CollectionTagService } from '../_services/collection-tag.service'; +import { SeriesService } from '../_services/series.service'; + +/** + * This component is used as a standard layout for any card detail. ie) series, in-progress, collections, etc. + */ +@Component({ + selector: 'app-all-collections', + templateUrl: './all-collections.component.html', + styleUrls: ['./all-collections.component.scss'] +}) +export class AllCollectionsComponent implements OnInit { + + isLoading: boolean = true; + collections: CollectionTag[] = []; + collectionTagId: number = 0; // 0 is not a valid id, if 0, we will load all tags + collectionTagName: string = ''; + series: Array = []; + seriesPagination!: Pagination; + collectionTagActions: ActionItem[] = []; + + constructor(private collectionService: CollectionTagService, private router: Router, private route: ActivatedRoute, private seriesService: SeriesService, private toastr: ToastrService, private actionFactoryService: ActionFactoryService, private modalService: NgbModal) { + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + + const routeId = this.route.snapshot.paramMap.get('id'); + if (routeId != null) { + this.collectionTagId = parseInt(routeId, 10); + this.collectionService.allTags().subscribe(tags => { + this.collections = tags; + const matchingTags = this.collections.filter(t => t.id === this.collectionTagId); + if (matchingTags.length === 0) { + this.toastr.error('You don\'t have access to any libraries this tag belongs to or this tag is invalid'); + this.router.navigate(['collections']); + return; + } + this.collectionTagName = tags.filter(item => item.id === this.collectionTagId)[0].title; + }); + } + } + + ngOnInit() { + this.loadPage(); + this.collectionTagActions = this.actionFactoryService.getCollectionTagActions(this.handleCollectionActionCallback.bind(this)); + } + + + loadCollection(item: CollectionTag) { + this.collectionTagId = item.id; + this.collectionTagName = item.title; + this.router.navigate(['collections', this.collectionTagId]); + this.loadPage(); + } + + onPageChange(pagination: Pagination) { + this.router.navigate(['collections', this.collectionTagId], {replaceUrl: true, queryParamsHandling: 'merge', queryParams: {page: this.seriesPagination.currentPage} }); + } + + loadPage() { + // TODO: See if we can move this pagination code into layout code + const page = this.route.snapshot.queryParamMap.get('page'); + if (page != null) { + if (this.seriesPagination === undefined || this.seriesPagination === null) { + this.seriesPagination = {currentPage: 0, itemsPerPage: 30, totalItems: 0, totalPages: 1}; + } + this.seriesPagination.currentPage = parseInt(page, 10); + } + // Reload page after a series is updated or first load + if (this.collectionTagId === 0) { + this.collectionService.allTags().subscribe(tags => { + this.collections = tags; + this.isLoading = false; + }); + } else { + this.seriesService.getSeriesForTag(this.collectionTagId, this.seriesPagination?.currentPage, this.seriesPagination?.itemsPerPage).subscribe(tags => { + this.series = tags.result; + this.seriesPagination = tags.pagination; + this.isLoading = false; + window.scrollTo(0, 0); + }); + } + } + + handleCollectionActionCallback(action: Action, collectionTag: CollectionTag) { + switch (action) { + case(Action.Edit): + const modalRef = this.modalService.open(EditCollectionTagsComponent, { size: 'lg', scrollable: true }); + modalRef.componentInstance.tag = collectionTag; + modalRef.closed.subscribe((reloadNeeded: boolean) => { + if (reloadNeeded) { + this.loadPage(); + } + }); + break; + default: + break; + } + } + +} diff --git a/UI/Web/src/app/app-routing.module.ts b/UI/Web/src/app/app-routing.module.ts new file mode 100644 index 000000000..691410f7c --- /dev/null +++ b/UI/Web/src/app/app-routing.module.ts @@ -0,0 +1,61 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { AllCollectionsComponent } from './all-collections/all-collections.component'; +import { HomeComponent } from './home/home.component'; +import { LibraryDetailComponent } from './library-detail/library-detail.component'; +import { LibraryComponent } from './library/library.component'; +import { NotConnectedComponent } from './not-connected/not-connected.component'; +import { SeriesDetailComponent } from './series-detail/series-detail.component'; +import { RecentlyAddedComponent } from './recently-added/recently-added.component'; +import { UserLoginComponent } from './user-login/user-login.component'; +import { UserPreferencesComponent } from './user-preferences/user-preferences.component'; +import { AuthGuard } from './_guards/auth.guard'; +import { LibraryAccessGuard } from './_guards/library-access.guard'; + +// TODO: Once we modularize the components, use this and measure performance impact: https://angular.io/guide/lazy-loading-ngmodules#preloading-modules + +const routes: Routes = [ + {path: '', component: HomeComponent}, + { + path: 'admin', + loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) + }, + {path: 'library', component: LibraryComponent}, + { + path: '', + runGuardsAndResolvers: 'always', + canActivate: [AuthGuard, LibraryAccessGuard], + children: [ + {path: 'library/:id', component: LibraryDetailComponent}, + {path: 'library/:libraryId/series/:seriesId', component: SeriesDetailComponent}, + { + path: 'library/:libraryId/series/:seriesId/manga', + loadChildren: () => import('../app/manga-reader/manga-reader.module').then(m => m.MangaReaderModule) + }, + { + path: 'library/:libraryId/series/:seriesId/book', + loadChildren: () => import('../app/book-reader/book-reader.module').then(m => m.BookReaderModule) + } + ] + }, + { + path: '', + runGuardsAndResolvers: 'always', + canActivate: [AuthGuard], + children: [ + {path: 'recently-added', component: RecentlyAddedComponent}, + {path: 'collections', component: AllCollectionsComponent}, + {path: 'collections/:id', component: AllCollectionsComponent}, + ] + }, + {path: 'login', component: UserLoginComponent}, + {path: 'preferences', component: UserPreferencesComponent}, + {path: 'no-connection', component: NotConnectedComponent}, + {path: '**', component: HomeComponent, pathMatch: 'full'} +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled'})], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/UI/Web/src/app/app.component.html b/UI/Web/src/app/app.component.html new file mode 100644 index 000000000..5b37261b3 --- /dev/null +++ b/UI/Web/src/app/app.component.html @@ -0,0 +1,5 @@ + +
+ + +
diff --git a/UI/Web/src/app/app.component.scss b/UI/Web/src/app/app.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/app.component.ts b/UI/Web/src/app/app.component.ts new file mode 100644 index 000000000..3e9952e6e --- /dev/null +++ b/UI/Web/src/app/app.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; +import { AccountService } from './_services/account.service'; +import { NavService } from './_services/nav.service'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent implements OnInit { + + constructor(private accountService: AccountService, public navService: NavService) { } + + ngOnInit(): void { + this.setCurrentUser(); + } + + + setCurrentUser() { + const user = this.accountService.getUserFromLocalStorage(); + + this.accountService.setCurrentUser(user); + + if (user) { + this.navService.setDarkMode(user.preferences.siteDarkMode); + } else { + this.navService.setDarkMode(true); + } + } +} diff --git a/UI/Web/src/app/app.module.ts b/UI/Web/src/app/app.module.ts new file mode 100644 index 000000000..cfb9f8084 --- /dev/null +++ b/UI/Web/src/app/app.module.ts @@ -0,0 +1,142 @@ +import { BrowserModule, Title } from '@angular/platform-browser'; +import { APP_INITIALIZER, ErrorHandler, NgModule } from '@angular/core'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { HomeComponent } from './home/home.component'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { NgbAccordionModule, NgbCollapseModule, NgbDropdownModule, NgbNavModule, NgbPaginationModule, NgbRatingModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; +import { NavHeaderComponent } from './nav-header/nav-header.component'; +import { JwtInterceptor } from './_interceptors/jwt.interceptor'; +import { UserLoginComponent } from './user-login/user-login.component'; +import { ToastrModule } from 'ngx-toastr'; +import { ErrorInterceptor } from './_interceptors/error.interceptor'; +import { LibraryComponent } from './library/library.component'; +import { SharedModule } from './shared/shared.module'; +import { LibraryDetailComponent } from './library-detail/library-detail.component'; +import { SeriesDetailComponent } from './series-detail/series-detail.component'; +import { NotConnectedComponent } from './not-connected/not-connected.component'; +import { UserPreferencesComponent } from './user-preferences/user-preferences.component'; +import { AutocompleteLibModule } from 'angular-ng-autocomplete'; +import { EditSeriesModalComponent } from './_modals/edit-series-modal/edit-series-modal.component'; +import { ReviewSeriesModalComponent } from './_modals/review-series-modal/review-series-modal.component'; +import { LazyLoadImageModule} from 'ng-lazyload-image'; +import { CarouselModule } from './carousel/carousel.module'; +import { NgxSliderModule } from '@angular-slider/ngx-slider'; + +import * as Sentry from '@sentry/angular'; +import { environment } from 'src/environments/environment'; +import { version } from 'package.json'; +import { Router } from '@angular/router'; +import { RewriteFrames as RewriteFramesIntegration } from '@sentry/integrations'; +import { Dedupe as DedupeIntegration } from '@sentry/integrations'; +import { PersonBadgeComponent } from './person-badge/person-badge.component'; +import { TypeaheadModule } from './typeahead/typeahead.module'; +import { AllCollectionsComponent } from './all-collections/all-collections.component'; +import { EditCollectionTagsComponent } from './_modals/edit-collection-tags/edit-collection-tags.component'; +import { RecentlyAddedComponent } from './recently-added/recently-added.component'; + +let sentryProviders: any[] = []; + +if (environment.production) { + Sentry.init({ + dsn: 'https://db1a1f6445994b13a6f479512aecdd48@o641015.ingest.sentry.io/5757426', + environment: environment.production ? 'prod' : 'dev', + release: version, + integrations: [ + new Sentry.Integrations.GlobalHandlers({ + onunhandledrejection: true, + onerror: true + }), + new DedupeIntegration(), + new RewriteFramesIntegration(), + ], + ignoreErrors: [new RegExp(/\/api\/admin/)], + tracesSampleRate: 0, + }); + + Sentry.configureScope(scope => { + scope.setUser({ + username: 'Not authorized' + }); + scope.setTag('production', environment.production); + scope.setTag('version', version); + }); + + sentryProviders = [{ + provide: ErrorHandler, + useValue: Sentry.createErrorHandler({ + showDialog: false, + }), + }, + { + provide: Sentry.TraceService, + deps: [Router], + }, + { + provide: APP_INITIALIZER, + useFactory: () => () => {}, + deps: [Sentry.TraceService], + multi: true, + }]; +} + +@NgModule({ + declarations: [ + AppComponent, + HomeComponent, + NavHeaderComponent, + UserLoginComponent, + LibraryComponent, + LibraryDetailComponent, + SeriesDetailComponent, + NotConnectedComponent, // Move into ExtrasModule + UserPreferencesComponent, // Move into SettingsModule + EditSeriesModalComponent, + ReviewSeriesModalComponent, + PersonBadgeComponent, + AllCollectionsComponent, + EditCollectionTagsComponent, + RecentlyAddedComponent, + ], + imports: [ + HttpClientModule, + BrowserModule, + AppRoutingModule, + BrowserAnimationsModule, + ReactiveFormsModule, + NgbDropdownModule, // Nav + AutocompleteLibModule, // Nav + NgbTooltipModule, // Shared & SettingsModule + NgbRatingModule, // Series Detail + NgbCollapseModule, // Series Edit Modal + NgbNavModule, // Series Edit Modal + NgbAccordionModule, // User Preferences + NgxSliderModule, // User Preference + NgbPaginationModule, + LazyLoadImageModule, + SharedModule, + CarouselModule, + TypeaheadModule, + FormsModule, // EditCollection Modal + ToastrModule.forRoot({ + positionClass: 'toast-bottom-right', + preventDuplicates: true, + timeOut: 6000, + countDuplicates: true, + autoDismiss: true + }), + ], + providers: [ + {provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true}, + {provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true}, + //{ provide: LAZYLOAD_IMAGE_HOOKS, useClass: ScrollHooks } // Great, but causes flashing after modals close + Title, + ...sentryProviders, + ], + entryComponents: [], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/UI/Web/src/app/book-reader/_models/book-chapter-item.ts b/UI/Web/src/app/book-reader/_models/book-chapter-item.ts new file mode 100644 index 000000000..75a58d3d5 --- /dev/null +++ b/UI/Web/src/app/book-reader/_models/book-chapter-item.ts @@ -0,0 +1,6 @@ +export interface BookChapterItem { + title: string; + page: number; + part: string; + children: Array; +} diff --git a/UI/Web/src/app/book-reader/book-reader.module.ts b/UI/Web/src/app/book-reader/book-reader.module.ts new file mode 100644 index 000000000..a327128e5 --- /dev/null +++ b/UI/Web/src/app/book-reader/book-reader.module.ts @@ -0,0 +1,25 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { BookReaderComponent } from './book-reader/book-reader.component'; +import { BookReaderRoutingModule } from './book-reader.router.module'; +import { SharedModule } from '../shared/shared.module'; +import { SafeStylePipe } from './safe-style.pipe'; +import { ReactiveFormsModule } from '@angular/forms'; +import { NgbProgressbarModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; + + +@NgModule({ + declarations: [BookReaderComponent, SafeStylePipe], + imports: [ + CommonModule, + BookReaderRoutingModule, + ReactiveFormsModule, + SharedModule, + NgbProgressbarModule, + NgbTooltipModule + ], exports: [ + BookReaderComponent, + SafeStylePipe + ] +}) +export class BookReaderModule { } diff --git a/UI/Web/src/app/book-reader/book-reader.router.module.ts b/UI/Web/src/app/book-reader/book-reader.router.module.ts new file mode 100644 index 000000000..a82163c83 --- /dev/null +++ b/UI/Web/src/app/book-reader/book-reader.router.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { BookReaderComponent } from './book-reader/book-reader.component'; + +const routes: Routes = [ + { + path: ':chapterId', + component: BookReaderComponent, + } +]; + + +@NgModule({ + imports: [RouterModule.forChild(routes), ], + exports: [RouterModule] +}) +export class BookReaderRoutingModule { } diff --git a/UI/Web/src/app/book-reader/book-reader/book-reader.component.html b/UI/Web/src/app/book-reader/book-reader/book-reader.component.html new file mode 100644 index 000000000..fb727f93f --- /dev/null +++ b/UI/Web/src/app/book-reader/book-reader/book-reader.component.html @@ -0,0 +1,134 @@ +
+
+ Skip to main content + + +
+

Book Settings + +

+ +
+
+
+
+ +
+
+ + +
+
+
+
+ + + {{pageStyles['font-size']}} + +
+
+ + + {{pageStyles['line-height']}} + +
+
+ + + {{pageStyles['margin-right']}} + +
+
+ + +
+
+ + + +
+
+ + The ability to click the sides of the page to page left and right + The ability to click the sides of the page to page left and right + +
+
+ + +
+
+
+
{{pageNum}}
+
+ +
+
{{maxPages - 1}}
+
+
+

Table of Contents

+
+ This book does not have Table of Contents set in the metadata or a toc file +
+
+ +
+ + + +
+
+
+
+ + + +
+
+ +
+
+
+
+ +
+ +
+
+ + +
+ + + +
{{bookTitle}}
+ + +
+
+ +
\ No newline at end of file diff --git a/UI/Web/src/app/book-reader/book-reader/book-reader.component.scss b/UI/Web/src/app/book-reader/book-reader/book-reader.component.scss new file mode 100644 index 000000000..042274399 --- /dev/null +++ b/UI/Web/src/app/book-reader/book-reader/book-reader.component.scss @@ -0,0 +1,203 @@ +@font-face { + font-family: "Fira_Sans"; + src: url(../../../assets/fonts/Fira_Sans/FiraSans-Regular.ttf) format("truetype"); +} + +@font-face { + font-family: "Lato"; + src: url(../../../assets/fonts/Lato/Lato-Regular.ttf) format("truetype"); +} + +@font-face { + font-family: "Libre_Baskerville"; + src: url(../../../assets/fonts/Libre_Baskerville/LibreBaskerville-Regular.ttf) format("truetype"); +} + +@font-face { + font-family: "Merriweather"; + src: url(../../../assets/fonts/Merriweather/Merriweather-Regular.ttf) format("truetype"); +} + +@font-face { + font-family: "Nanum_Gothic"; + src: url(../../../assets/fonts/Nanum_Gothic/NanumGothic-Regular.ttf) format("truetype"); +} + +@font-face { + font-family: "RocknRoll_One"; + src: url(../../../assets/fonts/RocknRoll_One/RocknRollOne-Regular.ttf) format("truetype"); +} + +$primary-color: #0062cc; + +.control-container { + padding-bottom: 5px; +} + +.table-of-contents li { + cursor: pointer; + + &.active { + font-weight: bold; + } +} + + +.dark-mode { + + color: #dcdcdc !important; + background-image: none !important; + background-color: #292929 !important; + + *:not(code), *:not(a) { + background-color: #292929; + box-shadow: none; + text-shadow: none; + border-radius: unset; + color: #dcdcdc !important; + } + + *:not(input), *:not(code), *:not(:link) { + color: #dcdcdc !important; + } + + code { + color: #e83e8c !important; + } + + .btn-icon { + background-color: transparent; + } + + :link, a { + color: #8db2e5 !important; + } + + // Coppied + // html, body { + // color: #dcdcdc !important; + // background-image: none !important; + // background-color: #292929 !important; + // } + + // html::before, body::before { + // background-image: none !important; + // } + + // html *:not(input) {color: #dcdcdc !important} + // html * {background-color: rgb(41, 41, 41, 0.90) !important} + + // html *, html *[id], html *[class] { + // box-shadow: none !important; + // text-shadow: none !important; + // border-radius: unset !important; + // border-color: #555555 !important; + // outline-color: #555555 !important; + // } + + img, img[src] { + z-index: 1; + filter: brightness(0.85) !important; + background-color: initial !important; + } + + // video, video[src] { + // z-index: 1; + // background-color: transparent !important; + // } + + // input:not([type='button']):not([type='submit']) { + // color: #dcdcdc !important; + // background-image: none !important; + // background-color: #333333 !important; + // } + + // textarea, textarea[class], input[type='text'], input[type='text'][class] { + // color: #dcdcdc !important; + // background-color: #555555 !important; + // } + + // svg:not([fill]) {fill: #7d7d7d !important} + // li, select {background-image: none !important} + // input[type='text'], input[type='search'] {text-indent: 10px} + // a {background-color: rgba(255, 255, 255, 0.01) !important} + // html cite, html cite *, html cite *[class] {color: #029833 !important} + // svg[fill], button, input[type='button'], input[type='submit'] {opacity: 0.85 !important} + + // :before {color: #dcdcdc !important} + // :link:not(cite), :link *:not(cite) {color: #8db2e5 !important} + // :visited, :visited *, :visited *[class] {color: rgb(211, 138, 138) !important} + :visited, :visited *, :visited *[class] {color: rgb(211, 138, 138) !important} + :link:not(cite), :link *:not(cite) {color: #8db2e5 !important} +} + +.reading-bar { + background-color: white; + overflow: hidden; +} + +@media(max-width: 875px) { + .book-title { + display: none; + } + +} + +.book-title { + margin-top: 10px; + text-align: center; + text-transform: capitalize; +} + +.reading-section { + height: 100vh; +} + +.drawer-body { + padding-bottom: 20px; +} + + + +// Click to Paginate styles +.icon-primary-color { + color: $primary-color; +} + +.dark-mode .overlay { + opacity: 0; +} + + +.right { + position: fixed; + right: 0px; + top: 0px; + width: 20%; + height: 100%; + z-index: 2; + cursor: pointer; + opacity: 0; + background: transparent; +} + +.left { + position: fixed; + left: 0px; + top: 0px; + width: 20%; + height: 100%; + z-index: 2; + cursor: pointer; + opacity: 0; + background: transparent; +} + +.highlight { + background-color: rgba(65, 225, 100, 0.5) !important; + animation: fadein .5s both; +} +.highlight-2 { + background-color: rgba(65, 105, 225, 0.5) !important; + animation: fadein .5s both; +} \ No newline at end of file diff --git a/UI/Web/src/app/book-reader/book-reader/book-reader.component.ts b/UI/Web/src/app/book-reader/book-reader/book-reader.component.ts new file mode 100644 index 000000000..8f6d6c8ca --- /dev/null +++ b/UI/Web/src/app/book-reader/book-reader/book-reader.component.ts @@ -0,0 +1,811 @@ +import { AfterViewInit, Component, ElementRef, HostListener, OnDestroy, OnInit, Renderer2, RendererStyleFlags2, ViewChild } from '@angular/core'; +import {Location} from '@angular/common'; +import { FormControl, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { forkJoin, fromEvent, Subject } from 'rxjs'; +import { debounceTime, take, takeUntil } from 'rxjs/operators'; +import { Chapter } from 'src/app/_models/chapter'; +import { User } from 'src/app/_models/user'; +import { AccountService } from 'src/app/_services/account.service'; +import { NavService } from 'src/app/_services/nav.service'; +import { ReaderService } from 'src/app/_services/reader.service'; +import { SeriesService } from 'src/app/_services/series.service'; +import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; + +import { BookService } from '../book.service'; +import { KEY_CODES } from 'src/app/shared/_services/utility.service'; +import { BookChapterItem } from '../_models/book-chapter-item'; +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { Stack } from 'src/app/shared/data-structures/stack'; +import { Preferences } from 'src/app/_models/preferences/preferences'; +import { MemberService } from 'src/app/_services/member.service'; +import { ReadingDirection } from 'src/app/_models/preferences/reading-direction'; + + +interface PageStyle { + 'font-family': string; + 'font-size': string; + 'line-height': string; + 'margin-left': string; + 'margin-right': string; +} + +interface HistoryPoint { + page: number; + scrollOffset: number; +} + +const TOP_OFFSET = -50 * 1.5; // px the sticky header takes up +const SCROLL_PART_TIMEOUT = 5000; + +@Component({ + selector: 'app-book-reader', + templateUrl: './book-reader.component.html', + styleUrls: ['./book-reader.component.scss'], + animations: [ + trigger('isLoading', [ + state('false', style({opacity: 1})), + state('true', style({opacity: 0})), + transition('false <=> true', animate('200ms')) + ]), + trigger('fade', [ + state('true', style({opacity: 0})), + state('false', style({opacity: 0.5})), + transition('false <=> true', animate('4000ms')) + ]) + ] +}) +export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy { + + libraryId!: number; + seriesId!: number; + volumeId!: number; + chapterId!: number; + chapter!: Chapter; + + chapters: Array = []; + + pageNum = 0; + maxPages = 1; + adhocPageHistory: Stack = new Stack(); + + user!: User; + + drawerOpen = false; + isLoading = true; + bookTitle: string = ''; + settingsForm: FormGroup = new FormGroup({}); + clickToPaginate = false; + + clickToPaginateVisualOverlay = false; + clickToPaginateVisualOverlayTimeout: any = undefined; // For animation + clickToPaginateVisualOverlayTimeout2: any = undefined; // For kicking off animation, giving enough time to render html + + page: SafeHtml | undefined = undefined; // This is the html we get from the server + styles: SafeHtml | undefined = undefined; // This is the css we get from the server + + @ViewChild('readingHtml', {static: false}) readingHtml!: ElementRef; + @ViewChild('readingSection', {static: false}) readingSectionElemRef!: ElementRef; + @ViewChild('stickyTop', {static: false}) stickyTopElemRef!: ElementRef; + + + /** + * Internal property used to capture all the different css properties to render on all elements + */ + pageStyles!: PageStyle; + /** + * List of all font families user can select from + */ + fontFamilies: Array = []; + + + darkMode = false; + backgroundColor: string = 'white'; + readerStyles: string = ''; + darkModeStyleElem!: HTMLElement; + topOffset: number = 0; // Offset for drawer and rendering canvas + scrollbarNeeded = false; // Used for showing/hiding bottom action bar + readingDirection: ReadingDirection = ReadingDirection.LeftToRight; + + private readonly onDestroy = new Subject(); + + pageAnchors: {[n: string]: number } = {}; + currentPageAnchor: string = ''; + intersectionObserver: IntersectionObserver = new IntersectionObserver((entries) => this.handleIntersection(entries), { threshold: [1] }); + /** + * Last seen bookmark part path + */ + lastSeenScrollPartPath: string = ''; + + // Temp hack: Override background color for reader and restore it onDestroy + originalBodyColor: string | undefined; + + + + darkModeStyles = ` + *:not(input), *:not(select), *:not(code), *:not(:link), *:not(.ngx-toastr) { + color: #dcdcdc !important; + } + + code { + color: #e83e8c !important; + } + + // .btn-icon { + // background-color: transparent; + // } + + :link, a { + color: #8db2e5 !important; + } + + img, img[src] { + z-index: 1; + filter: brightness(0.85) !important; + background-color: initial !important; + } + `; + + constructor(private route: ActivatedRoute, private router: Router, private accountService: AccountService, + private seriesService: SeriesService, private readerService: ReaderService, private location: Location, + private renderer: Renderer2, private navService: NavService, private toastr: ToastrService, + private domSanitizer: DomSanitizer, private bookService: BookService, private memberService: MemberService) { + this.navService.hideNavBar(); + + this.darkModeStyleElem = this.renderer.createElement('style'); + this.darkModeStyleElem.innerHTML = this.darkModeStyles; + this.fontFamilies = this.bookService.getFontFamilies(); + + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + if (user) { + this.user = user; + + if (this.user.preferences.bookReaderFontFamily === undefined) { + this.user.preferences.bookReaderFontFamily = 'default'; + } + if (this.user.preferences.bookReaderFontSize === undefined) { + this.user.preferences.bookReaderFontSize = 100; + } + if (this.user.preferences.bookReaderLineSpacing === undefined) { + this.user.preferences.bookReaderLineSpacing = 100; + } + if (this.user.preferences.bookReaderMargin === undefined) { + this.user.preferences.bookReaderMargin = 0; + } + if (this.user.preferences.bookReaderReadingDirection === undefined) { + this.user.preferences.bookReaderReadingDirection = ReadingDirection.LeftToRight; + } + + this.readingDirection = this.user.preferences.bookReaderReadingDirection; + + this.clickToPaginate = this.user.preferences.bookReaderTapToPaginate; + + this.settingsForm.addControl('bookReaderFontFamily', new FormControl(user.preferences.bookReaderFontFamily, [])); + + this.settingsForm.get('bookReaderFontFamily')!.valueChanges.pipe(takeUntil(this.onDestroy)).subscribe(changes => { + this.updateFontFamily(changes); + }); + } + + const bodyNode = document.querySelector('body'); + if (bodyNode !== undefined && bodyNode !== null) { + this.originalBodyColor = bodyNode.style.background; + } + this.resetSettings(); + }); + } + + ngAfterViewInit() { + // check scroll offset and if offset is after any of the "id" markers, bookmark it + fromEvent(window, 'scroll') + .pipe(debounceTime(200), takeUntil(this.onDestroy)).subscribe((event) => { + if (this.isLoading) return; + if (Object.keys(this.pageAnchors).length === 0) return; + // get the height of the document so we can capture markers that are halfway on the document viewport + const verticalOffset = (window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop || 0) + (document.body.offsetHeight / 2); + + const alreadyReached = Object.values(this.pageAnchors).filter((i: number) => i <= verticalOffset); + if (alreadyReached.length > 0) { + this.currentPageAnchor = Object.keys(this.pageAnchors)[alreadyReached.length - 1]; + } else { + this.currentPageAnchor = ''; + } + + if (this.lastSeenScrollPartPath !== '') { + this.readerService.bookmark(this.seriesId, this.volumeId, this.chapterId, this.pageNum, this.lastSeenScrollPartPath).pipe(take(1)).subscribe(() => {/* No operation */}); + } + }); + } + + ngOnDestroy(): void { + const bodyNode = document.querySelector('body'); + if (bodyNode !== undefined && bodyNode !== null && this.originalBodyColor !== undefined) { + bodyNode.style.background = this.originalBodyColor; + if (this.user.preferences.siteDarkMode) { + bodyNode.classList.add('bg-dark'); + } + } + this.navService.showNavBar(); + + const head = document.querySelector('head'); + this.renderer.removeChild(head, this.darkModeStyleElem); + + if (this.clickToPaginateVisualOverlayTimeout !== undefined) { + clearTimeout(this.clickToPaginateVisualOverlayTimeout); + this.clickToPaginateVisualOverlayTimeout = undefined; + } + if (this.clickToPaginateVisualOverlayTimeout2 !== undefined) { + clearTimeout(this.clickToPaginateVisualOverlayTimeout2); + this.clickToPaginateVisualOverlayTimeout2 = undefined; + } + + this.onDestroy.next(); + this.onDestroy.complete(); + this.intersectionObserver.disconnect(); + } + + ngOnInit(): void { + const libraryId = this.route.snapshot.paramMap.get('libraryId'); + const seriesId = this.route.snapshot.paramMap.get('seriesId'); + const chapterId = this.route.snapshot.paramMap.get('chapterId'); + + if (libraryId === null || seriesId === null || chapterId === null) { + this.router.navigateByUrl('/home'); + return; + } + + + this.libraryId = parseInt(libraryId, 10); + this.seriesId = parseInt(seriesId, 10); + this.chapterId = parseInt(chapterId, 10); + + this.memberService.hasReadingProgress(this.libraryId).pipe(take(1)).subscribe(hasProgress => { + if (!hasProgress) { + this.toggleDrawer(); + this.toastr.info('You can modify book settings, save those settings for all books, and view table of contents from the drawer.'); + } + }); + + forkJoin({ + chapter: this.seriesService.getChapter(this.chapterId), + bookmark: this.readerService.getBookmark(this.chapterId), + chapters: this.bookService.getBookChapters(this.chapterId), + info: this.bookService.getBookInfo(this.chapterId) + }).pipe(take(1)).subscribe(results => { + this.chapter = results.chapter; + this.volumeId = results.chapter.volumeId; + this.maxPages = results.chapter.pages; + this.chapters = results.chapters; + this.pageNum = results.bookmark.pageNum; + this.bookTitle = results.info; + + + if (this.pageNum >= this.maxPages) { + this.pageNum = this.maxPages - 1; + this.readerService.bookmark(this.seriesId, this.volumeId, this.chapterId, this.pageNum).pipe(take(1)).subscribe(() => {/* No operation */}); + } + + // Check if user bookmark has part, if so load it so we scroll to it + this.loadPage(results.bookmark.bookScrollId || undefined); + }, () => { + setTimeout(() => { + this.closeReader(); + }, 200); + }); + } + + @HostListener('window:keydown', ['$event']) + handleKeyPress(event: KeyboardEvent) { + if (event.key === KEY_CODES.RIGHT_ARROW) { + this.nextPage(); + } else if (event.key === KEY_CODES.LEFT_ARROW) { + this.prevPage(); + } else if (event.key === KEY_CODES.ESC_KEY) { + this.closeReader(); + } else if (event.key === KEY_CODES.SPACE) { + this.toggleDrawer(); + event.stopPropagation(); + event.preventDefault(); + } else if (event.key === KEY_CODES.G) { + this.goToPage(); + } + } + + handleIntersection(entries: IntersectionObserverEntry[]) { + const intersectingEntries = Array.from(entries).filter(entry => entry.isIntersecting).map(entry => entry.target); + intersectingEntries.sort((a: Element, b: Element) => { + const aTop = a.getBoundingClientRect().top; + const bTop = b.getBoundingClientRect().top; + if (aTop < bTop) { + return -1; + } + if (aTop > bTop) { + return 1; + } + + return 0; + }); + + if (intersectingEntries.length > 0) { + let path = this.getXPathTo(intersectingEntries[0]); + if (path === '') { return; } + if (!path.startsWith('id')) { + path = '//html[1]/' + path; + } + this.lastSeenScrollPartPath = path; + } + } + + loadChapter(pageNum: number, part: string) { + this.setPageNum(pageNum); + this.loadPage('id("' + part + '")'); + } + + closeReader() { + this.location.back(); + } + + resetSettings() { + const windowWidth = window.innerWidth + || document.documentElement.clientWidth + || document.body.clientWidth; + + let margin = '15%'; + if (windowWidth <= 700) { + margin = '0%'; + } + if (this.user) { + if (windowWidth > 700) { + margin = this.user.preferences.bookReaderMargin + '%'; + } + this.pageStyles = {'font-family': this.user.preferences.bookReaderFontFamily, 'font-size': this.user.preferences.bookReaderFontSize + '%', 'margin-left': margin, 'margin-right': margin, 'line-height': this.user.preferences.bookReaderLineSpacing + '%'}; + if (this.user.preferences.siteDarkMode && !this.user.preferences.bookReaderDarkMode) { + this.user.preferences.bookReaderDarkMode = true; + } + this.toggleDarkMode(this.user.preferences.bookReaderDarkMode); + } else { + this.pageStyles = {'font-family': 'default', 'font-size': '100%', 'margin-left': margin, 'margin-right': margin, 'line-height': '100%'}; + this.toggleDarkMode(false); + } + + this.settingsForm.get('bookReaderFontFamily')?.setValue(this.user.preferences.bookReaderFontFamily); + this.updateReaderStyles(); + } + + /** + * Adds a click handler for any anchors that have 'kavita-page'. If 'kavita-page' present, changes page to kavita-page and optionally passes a part value + * from 'kavita-part', which will cause the reader to scroll to the marker. + */ + addLinkClickHandlers() { + var links = this.readingSectionElemRef.nativeElement.querySelectorAll('a'); + links.forEach((link: any) => { + link.addEventListener('click', (e: any) => { + if (!e.target.attributes.hasOwnProperty('kavita-page')) { return; } + var page = parseInt(e.target.attributes['kavita-page'].value, 10); + if (this.adhocPageHistory.peek()?.page !== this.pageNum) { + this.adhocPageHistory.push({page: this.pageNum, scrollOffset: window.pageYOffset}); + } + + var partValue = e.target.attributes.hasOwnProperty('kavita-part') ? e.target.attributes['kavita-part'].value : undefined; + if (partValue && page === this.pageNum) { + this.scrollTo(e.target.attributes['kavita-part'].value); + return; + } + + this.setPageNum(page); + this.loadPage(partValue); + }); + }); + } + + moveFocus() { + const elems = document.getElementsByClassName('reading-section'); + if (elems.length > 0) { + (elems[0] as HTMLDivElement).focus(); + } + } + + promptForPage() { + const question = 'There are ' + (this.maxPages - 1) + ' pages. What page do you want to go to?'; + const goToPageNum = window.prompt(question, ''); + if (goToPageNum === null || goToPageNum.trim().length === 0) { return null; } + return goToPageNum; + } + + goToPage(pageNum?: number) { + let page = pageNum; + if (pageNum === null || pageNum === undefined) { + const goToPageNum = this.promptForPage(); + if (goToPageNum === null) { return; } + page = parseInt(goToPageNum.trim(), 10); + } + + if (page === undefined || this.pageNum === page) { return; } + + if (page > this.maxPages) { + page = this.maxPages; + } else if (page < 0) { + page = 0; + } + + if (!(page === 0 || page === this.maxPages - 1)) { + page -= 1; + } + + this.pageNum = page; + this.loadPage(); + + } + + cleanIdSelector(id: string) { + const tokens = id.split('/'); + if (tokens.length > 0) { + return tokens[0]; + } + return id; + } + + getPageMarkers(ids: Array) { + try { + return document.querySelectorAll(ids.map(id => '#' + this.cleanIdSelector(id)).join(', ')); + } catch (Exception) { + // Fallback to anchors instead. Some books have ids that are not valid for querySelectors, so anchors should be used instead + return document.querySelectorAll(ids.map(id => '[href="#' + id + '"]').join(', ')); + } + } + + setupPageAnchors() { + this.readingSectionElemRef.nativeElement.querySelectorAll('div,o,p,ul,li,a,img,h1,h2,h3,h4,h5,h6,span').forEach(elem => { + this.intersectionObserver.observe(elem); + }); + + this.pageAnchors = {}; + this.currentPageAnchor = ''; + const ids = this.chapters.map(item => item.children).flat().filter(item => item.page === this.pageNum).map(item => item.part).filter(item => item.length > 0); + if (ids.length > 0) { + const elems = this.getPageMarkers(ids); + elems.forEach(elem => { + this.pageAnchors[elem.id] = elem.getBoundingClientRect().top; + }); + } + } + + loadPage(part?: string | undefined, scrollTop?: number | undefined) { + this.isLoading = true; + + this.readerService.bookmark(this.seriesId, this.volumeId, this.chapterId, this.pageNum).pipe(take(1)).subscribe(() => {/* No operation */}); + + this.bookService.getBookPage(this.chapterId, this.pageNum).pipe(take(1)).subscribe(content => { + this.page = this.domSanitizer.bypassSecurityTrustHtml(content); + setTimeout(() => { + this.addLinkClickHandlers(); + this.updateReaderStyles(); + this.topOffset = this.stickyTopElemRef.nativeElement?.offsetHeight; + + const imgs = this.readingSectionElemRef.nativeElement.querySelectorAll('img'); + if (imgs === null || imgs.length === 0) { + this.setupPage(part, scrollTop); + return; + } + Promise.all(Array.from(imgs) + .filter(img => !img.complete) + .map(img => new Promise(resolve => { img.onload = img.onerror = resolve; }))) + .then(() => { + this.setupPage(part, scrollTop); + }); + }, 10); + }); + } + + setupPage(part?: string | undefined, scrollTop?: number | undefined) { + this.isLoading = false; + this.scrollbarNeeded = this.readingSectionElemRef.nativeElement.scrollHeight > this.readingSectionElemRef.nativeElement.clientHeight; + + // Find all the part ids and their top offset + this.setupPageAnchors(); + + + if (part !== undefined && part !== '') { + this.scrollTo(part); + } else if (scrollTop !== undefined && scrollTop !== 0) { + window.scroll({ + top: scrollTop, + behavior: 'smooth' + }); + } else { + window.scroll({ + top: 0, + behavior: 'smooth' + }); + } + } + + setPageNum(pageNum: number) { + if (pageNum < 0) { + this.pageNum = 0; + } else if (pageNum >= this.maxPages - 1) { + this.pageNum = this.maxPages - 1; + } else { + this.pageNum = pageNum; + } + } + + goBack() { + if (!this.adhocPageHistory.isEmpty()) { + const page = this.adhocPageHistory.pop(); + if (page !== undefined) { + this.setPageNum(page.page); + this.loadPage(undefined, page.scrollOffset); + } + } + } + + clickOverlayClass(side: 'right' | 'left') { + if (!this.clickToPaginateVisualOverlay) { + return ''; + } + + if (this.readingDirection === ReadingDirection.LeftToRight) { + return side === 'right' ? 'highlight' : 'highlight-2'; + } + return side === 'right' ? 'highlight-2' : 'highlight'; + } + + prevPage() { + const oldPageNum = this.pageNum; + if (this.readingDirection === ReadingDirection.LeftToRight) { + this.setPageNum(this.pageNum - 1); + } else { + this.setPageNum(this.pageNum + 1); + } + + if (oldPageNum === this.pageNum) { return; } + this.loadPage(); + } + + nextPage(event?: any) { + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + + const oldPageNum = this.pageNum; + if (this.readingDirection === ReadingDirection.LeftToRight) { + this.setPageNum(this.pageNum + 1); + } else { + this.setPageNum(this.pageNum - 1); + } + + if (oldPageNum === this.pageNum) { return; } + + this.loadPage(); + } + + updateFontSize(amount: number) { + let val = parseInt(this.pageStyles['font-size'].substr(0, this.pageStyles['font-size'].length - 1), 10); + + if (val + amount > 300 || val + amount < 50) { + return; + } + + this.pageStyles['font-size'] = val + amount + '%'; + this.updateReaderStyles(); + } + + updateFontFamily(familyName: string) { + if (familyName === null) familyName = ''; + let cleanedName = familyName.replace(' ', '_').replace('!important', '').trim(); + if (cleanedName === 'default') { + this.pageStyles['font-family'] = 'inherit'; + } else { + this.pageStyles['font-family'] = "'" + cleanedName + "'"; + } + + this.updateReaderStyles(); + } + + updateMargin(amount: number) { + let cleanedValue = this.pageStyles['margin-left'].replace('%', '').replace('!important', '').trim(); + let val = parseInt(cleanedValue, 10); + + if (val + amount > 30 || val + amount < 0) { + return; + } + + this.pageStyles['margin-left'] = (val + amount) + '%'; + this.pageStyles['margin-right'] = (val + amount) + '%'; + + this.updateReaderStyles(); + } + + updateLineSpacing(amount: number) { + const cleanedValue = parseInt(this.pageStyles['line-height'].replace('%', '').replace('!important', '').trim(), 10); + + if (cleanedValue + amount > 250 || cleanedValue + amount < 100) { + return; + } + + this.pageStyles['line-height'] = (cleanedValue + amount) + '%'; + + this.updateReaderStyles(); + } + + updateReaderStyles() { + if (this.readingHtml != undefined && this.readingHtml.nativeElement) { + for(let i = 0; i < this.readingHtml.nativeElement.children.length; i++) { + const elem = this.readingHtml.nativeElement.children.item(i); + if (elem?.tagName != 'STYLE') { + Object.entries(this.pageStyles).forEach(item => { + this.renderer.setStyle(elem, item[0], item[1], RendererStyleFlags2.Important); + }); + } + } + } + } + + + toggleDarkMode(force?: boolean) { + if (force !== undefined) { + this.darkMode = force; + } else { + this.darkMode = !this.darkMode; + } + + this.setOverrideStyles(); + } + + toggleReadingDirection() { + if (this.readingDirection === ReadingDirection.LeftToRight) { + this.readingDirection = ReadingDirection.RightToLeft; + } else { + this.readingDirection = ReadingDirection.LeftToRight; + } + } + + getDarkModeBackgroundColor() { + return this.darkMode ? '#292929' : '#fff'; + } + + setOverrideStyles() { + const bodyNode = document.querySelector('body'); + if (bodyNode !== undefined && bodyNode !== null) { + if (this.user.preferences.siteDarkMode) { + bodyNode.classList.remove('bg-dark'); + } + + bodyNode.style.background = this.getDarkModeBackgroundColor(); + } + this.backgroundColor = this.getDarkModeBackgroundColor(); + const head = document.querySelector('head'); + if (this.darkMode) { + this.renderer.appendChild(head, this.darkModeStyleElem) + } else { + this.renderer.removeChild(head, this.darkModeStyleElem); + } + } + + saveSettings() { + if (this.user === undefined) return; + const modelSettings = this.settingsForm.value; + const data: Preferences = { + readingDirection: this.user.preferences.readingDirection, + scalingOption: this.user.preferences.scalingOption, + pageSplitOption: this.user.preferences.pageSplitOption, + autoCloseMenu: this.user.preferences.autoCloseMenu, + readerMode: this.user.preferences.readerMode, + bookReaderDarkMode: this.darkMode, + bookReaderFontFamily: modelSettings.bookReaderFontFamily, + bookReaderFontSize: parseInt(this.pageStyles['font-size'].substr(0, this.pageStyles['font-size'].length - 1), 10), + bookReaderLineSpacing: parseInt(this.pageStyles['line-height'].replace('!important', '').trim(), 10), + bookReaderMargin: parseInt(this.pageStyles['margin-left'].replace('%', '').replace('!important', '').trim(), 10), + bookReaderTapToPaginate: this.clickToPaginate, + bookReaderReadingDirection: this.readingDirection, + siteDarkMode: this.user.preferences.siteDarkMode, + }; + this.accountService.updatePreferences(data).pipe(take(1)).subscribe((updatedPrefs) => { + this.toastr.success('User settings updated'); + if (this.user) { + this.user.preferences = updatedPrefs; + } + this.resetSettings(); + }); + } + + toggleDrawer() { + this.topOffset = this.stickyTopElemRef.nativeElement?.offsetHeight; + this.drawerOpen = !this.drawerOpen; + } + + closeDrawer() { + this.drawerOpen = false; + } + + handleReaderClick(event: MouseEvent) { + if (this.drawerOpen) { + this.closeDrawer(); + event.stopPropagation(); + event.preventDefault(); + } + } + + + scrollTo(partSelector: string) { + if (partSelector.startsWith('#')) { + partSelector = partSelector.substr(1, partSelector.length); + } + + let element = null; + if (partSelector.startsWith('//') || partSelector.startsWith('id(')) { + // Part selector is a XPATH + element = this.getElementFromXPath(partSelector); + } else { + element = document.querySelector('*[id="' + partSelector + '"]'); + } + + if (element === null) return; + + window.scroll({ + top: element.getBoundingClientRect().top + window.pageYOffset + TOP_OFFSET, + behavior: 'smooth' + }); + } + + toggleClickToPaginate() { + this.clickToPaginate = !this.clickToPaginate; + + if (this.clickToPaginateVisualOverlayTimeout2 !== undefined) { + clearTimeout(this.clickToPaginateVisualOverlayTimeout2); + this.clickToPaginateVisualOverlayTimeout2 = undefined; + } + if (!this.clickToPaginate) { return; } + + this.clickToPaginateVisualOverlayTimeout2 = setTimeout(() => { + this.showClickToPaginateVisualOverlay(); + }, 200); + } + + showClickToPaginateVisualOverlay() { + this.clickToPaginateVisualOverlay = true; + + if (this.clickToPaginateVisualOverlay && this.clickToPaginateVisualOverlayTimeout !== undefined) { + clearTimeout(this.clickToPaginateVisualOverlayTimeout); + this.clickToPaginateVisualOverlayTimeout = undefined; + } + this.clickToPaginateVisualOverlayTimeout = setTimeout(() => { + this.clickToPaginateVisualOverlay = false; + }, 1000); + + } + + getElementFromXPath(path: string) { + const node = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + if (node?.nodeType === Node.ELEMENT_NODE) { + return node as Element; + } + return null; + } + + getXPathTo(element: any): string { + if (element === null) return ''; + if (element.id !== '') { return 'id("' + element.id + '")'; } + if (element === document.body) { return element.tagName; } + + + let ix = 0; + const siblings = element.parentNode?.childNodes || []; + for (let sibling of siblings) { + if (sibling === element) { + return this.getXPathTo(element.parentNode) + '/' + element.tagName + '[' + (ix + 1) + ']'; + } + if (sibling.nodeType === 1 && sibling.tagName === element.tagName) { + ix++; + } + + } + return ''; + } + +} diff --git a/UI/Web/src/app/book-reader/book.service.ts b/UI/Web/src/app/book-reader/book.service.ts new file mode 100644 index 000000000..d3d650600 --- /dev/null +++ b/UI/Web/src/app/book-reader/book.service.ts @@ -0,0 +1,41 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; +import { BookChapterItem } from './_models/book-chapter-item'; + +export interface BookPage { + bookTitle: string; + styles: string; + html: string; +} + + +@Injectable({ + providedIn: 'root' +}) +export class BookService { + + baseUrl = environment.apiUrl; + + constructor(private http: HttpClient) { } + + getFontFamilies() { + return ['default', 'EBGaramond', 'Fira Sans', 'Lato', 'Libre Baskerville', 'Merriweather', 'Nanum Gothic', 'RocknRoll One']; + } + + getBookChapters(chapterId: number) { + return this.http.get>(this.baseUrl + 'book/' + chapterId + '/chapters'); + } + + getBookPage(chapterId: number, page: number) { + return this.http.get(this.baseUrl + 'book/' + chapterId + '/book-page?page=' + page, {responseType: 'text' as 'json'}); + } + + getBookInfo(chapterId: number) { + return this.http.get(this.baseUrl + 'book/' + chapterId + '/book-info', {responseType: 'text' as 'json'}); + } + + getBookPageUrl(chapterId: number, page: number) { + return this.baseUrl + 'book/' + chapterId + '/book-page?page=' + page; + } +} diff --git a/UI/Web/src/app/book-reader/safe-style.pipe.ts b/UI/Web/src/app/book-reader/safe-style.pipe.ts new file mode 100644 index 000000000..597faf1c8 --- /dev/null +++ b/UI/Web/src/app/book-reader/safe-style.pipe.ts @@ -0,0 +1,15 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { DomSanitizer } from '@angular/platform-browser'; + +@Pipe({ + name: 'safeStyle' +}) +export class SafeStylePipe implements PipeTransform { + + constructor(private sanitizer: DomSanitizer) {} + + transform(value: string): unknown { + return this.sanitizer.bypassSecurityTrustStyle(value); + } + +} diff --git a/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.html b/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.html new file mode 100644 index 000000000..3932dd110 --- /dev/null +++ b/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.html @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.scss b/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.scss new file mode 100644 index 000000000..b16ff9de3 --- /dev/null +++ b/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.scss @@ -0,0 +1,49 @@ +.carousel-container { + overflow: hidden; + padding-top: 15px; + width: 100%; + position: relative; + display: flex; + float: left; + flex-direction: column; +} + +.section-title { + font-size: 1.6rem; + font-weight: 400; + margin-left: 10px; + color: black; + + :hover { + text-decoration: underline; + } + + :active { + text-decoration: underline; + } + + :focus { + text-decoration: underline; + } +} + +::ng-deep .bg-light { + .section-title { + color: black !important; + } + +} +// These are needed due to nested css within another component +::ng-deep .bg-dark { + .section-title { + color: #efefef !important; + } +} + +::ng-deep .swiper-slide { + width: auto !important; +} + +::ng-deep .swiper-slide { + width: auto !important; +} diff --git a/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.ts b/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.ts new file mode 100644 index 000000000..372fed44f --- /dev/null +++ b/UI/Web/src/app/carousel/carousel-reel/carousel-reel.component.ts @@ -0,0 +1,42 @@ +import { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core'; +import Swiper from 'swiper'; + +@Component({ + selector: 'app-carousel-reel', + templateUrl: './carousel-reel.component.html', + styleUrls: ['./carousel-reel.component.scss'] +}) +export class CarouselReelComponent implements OnInit { + + @ContentChild('carouselItem') carouselItemTemplate!: TemplateRef; + @Input() items: any[] = []; + @Input() title = ''; + @Output() sectionClick = new EventEmitter(); + + + swiper!: Swiper; + + constructor() { } + + ngOnInit(): void {} + + nextPage() { + if (this.swiper) { + this.swiper.setProgress(this.swiper.progress + 0.25, 600); + } + } + + prevPage() { + if (this.swiper) { + this.swiper.setProgress(this.swiper.progress - 0.25, 600); + } + } + + sectionClicked(event: any) { + this.sectionClick.emit(this.title); + } + + onSwiper(swiper: any) { + this.swiper = swiper; + } +} diff --git a/UI/Web/src/app/carousel/carousel.module.ts b/UI/Web/src/app/carousel/carousel.module.ts new file mode 100644 index 000000000..98017f81f --- /dev/null +++ b/UI/Web/src/app/carousel/carousel.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CarouselReelComponent } from './carousel-reel/carousel-reel.component'; +import { SwiperModule } from 'swiper/angular'; + + + +@NgModule({ + declarations: [CarouselReelComponent], + imports: [ + CommonModule, + SwiperModule + ], + exports: [ + CarouselReelComponent + ] +}) +export class CarouselModule { } diff --git a/UI/Web/src/app/home/home.component.html b/UI/Web/src/app/home/home.component.html new file mode 100644 index 000000000..9b23d9c1b --- /dev/null +++ b/UI/Web/src/app/home/home.component.html @@ -0,0 +1,11 @@ +
+ +

Please create an admin account for yourself to start your reading journey.

+ +
+
+ + + + + diff --git a/UI/Web/src/app/home/home.component.scss b/UI/Web/src/app/home/home.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/home/home.component.ts b/UI/Web/src/app/home/home.component.ts new file mode 100644 index 000000000..0ee803e1e --- /dev/null +++ b/UI/Web/src/app/home/home.component.ts @@ -0,0 +1,58 @@ +import { Component, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; +import { take } from 'rxjs/operators'; +import { MemberService } from '../_services/member.service'; +import { AccountService } from '../_services/account.service'; +import { StatsService } from '../_services/stats.service'; +import * as ClientUtils from "../shared/utils/clientUtils"; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'] +}) +export class HomeComponent implements OnInit { + + firstTimeFlow = false; + model: any = {}; + registerForm: FormGroup = new FormGroup({ + username: new FormControl('', [Validators.required]), + password: new FormControl('', [Validators.required]) + }); + + constructor(public accountService: AccountService, private memberService: MemberService, private router: Router, private statsService: StatsService) { + } + + ngOnInit(): void { + + this.memberService.adminExists().subscribe(adminExists => { + this.firstTimeFlow = !adminExists; + + if (this.firstTimeFlow) { + return; + } + + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + + this.statsService.sendClientInfo(ClientUtils.getClientInfo()) + .pipe(take(1)) + .subscribe(resp => {/* No Operation */}); + + if (user) { + // User is logged in, redirect to libraries + this.router.navigateByUrl('/library'); + } else { + this.router.navigateByUrl('/login'); + } + }); + }); + } + + + onAdminCreated(success: boolean) { + if (success) { + this.router.navigateByUrl('/login'); + } + } +} diff --git a/UI/Web/src/app/library-detail/library-detail.component.html b/UI/Web/src/app/library-detail/library-detail.component.html new file mode 100644 index 000000000..df19322f7 --- /dev/null +++ b/UI/Web/src/app/library-detail/library-detail.component.html @@ -0,0 +1,11 @@ + + + + + diff --git a/UI/Web/src/app/library-detail/library-detail.component.scss b/UI/Web/src/app/library-detail/library-detail.component.scss new file mode 100644 index 000000000..9863b1284 --- /dev/null +++ b/UI/Web/src/app/library-detail/library-detail.component.scss @@ -0,0 +1,11 @@ +.card { + height: 400; + width: 200; +} + + +.viewport { + width: 600px; + height: 100%; + overflow-y: auto; + } \ No newline at end of file diff --git a/UI/Web/src/app/library-detail/library-detail.component.ts b/UI/Web/src/app/library-detail/library-detail.component.ts new file mode 100644 index 000000000..616afb110 --- /dev/null +++ b/UI/Web/src/app/library-detail/library-detail.component.ts @@ -0,0 +1,91 @@ +import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; +import { ActivatedRoute, Router } from '@angular/router'; +import { take } from 'rxjs/operators'; +import { Library } from '../_models/library'; +import { Pagination } from '../_models/pagination'; +import { Series } from '../_models/series'; +import { Action, ActionFactoryService, ActionItem } from '../_services/action-factory.service'; +import { ActionService } from '../_services/action.service'; +import { LibraryService } from '../_services/library.service'; +import { SeriesService } from '../_services/series.service'; + +@Component({ + selector: 'app-library-detail', + templateUrl: './library-detail.component.html', + styleUrls: ['./library-detail.component.scss'] +}) +export class LibraryDetailComponent implements OnInit { + + libraryId!: number; + libraryName = ''; + series: Series[] = []; + loadingSeries = false; + pagination!: Pagination; + actions: ActionItem[] = []; + + constructor(private route: ActivatedRoute, private router: Router, private seriesService: SeriesService, + private libraryService: LibraryService, private titleService: Title, private actionFactoryService: ActionFactoryService, private actionService: ActionService) { + const routeId = this.route.snapshot.paramMap.get('id'); + if (routeId === null) { + this.router.navigateByUrl('/home'); + return; + } + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + this.libraryId = parseInt(routeId, 10); + this.libraryService.getLibraryNames().pipe(take(1)).subscribe(names => { + this.libraryName = names[this.libraryId]; + this.titleService.setTitle('Kavita - ' + this.libraryName); + }) + this.loadPage(); + this.actions = this.actionFactoryService.getLibraryActions(this.handleAction.bind(this)); + } + + ngOnInit(): void { + } + + handleAction(action: Action, library: Library) { + let lib: Partial = library; + if (library === undefined) { + lib = {id: this.libraryId, name: this.libraryName}; + } + switch (action) { + case(Action.ScanLibrary): + this.actionService.scanLibrary(lib); + break; + case(Action.RefreshMetadata): + this.actionService.refreshMetadata(lib); + break; + default: + break; + } + } + + loadPage() { + const page = this.route.snapshot.queryParamMap.get('page'); + if (page != null) { + if (this.pagination == undefined || this.pagination == null) { + this.pagination = {currentPage: 0, itemsPerPage: 30, totalItems: 0, totalPages: 1}; + } + this.pagination.currentPage = parseInt(page, 10); + } + this.loadingSeries = true; + this.seriesService.getSeriesForLibrary(this.libraryId, this.pagination?.currentPage, this.pagination?.itemsPerPage).pipe(take(1)).subscribe(series => { + this.series = series.result; + this.pagination = series.pagination; + this.loadingSeries = false; + window.scrollTo(0, 0); + }); + } + + onPageChange(pagination: Pagination) { + this.router.navigate(['library', this.libraryId], {replaceUrl: true, queryParamsHandling: 'merge', queryParams: {page: this.pagination.currentPage} }); + } + + seriesClicked(series: Series) { + this.router.navigate(['library', this.libraryId, 'series', series.id]); + } + + trackByIdentity = (index: number, item: Series) => `${item.name}_${item.originalName}_${item.localizedName}`; + +} diff --git a/UI/Web/src/app/library/library.component.html b/UI/Web/src/app/library/library.component.html new file mode 100644 index 000000000..e8e5ba1b9 --- /dev/null +++ b/UI/Web/src/app/library/library.component.html @@ -0,0 +1,33 @@ + +
+
+

There are no libraries setup yet. Configure some in Server settings.

+
+
+

You haven't been granted access to any libraries.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/UI/Web/src/app/library/library.component.scss b/UI/Web/src/app/library/library.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/library/library.component.ts b/UI/Web/src/app/library/library.component.ts new file mode 100644 index 000000000..c7f852e2f --- /dev/null +++ b/UI/Web/src/app/library/library.component.ts @@ -0,0 +1,118 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { take } from 'rxjs/operators'; +import { EditCollectionTagsComponent } from '../_modals/edit-collection-tags/edit-collection-tags.component'; +import { CollectionTag } from '../_models/collection-tag'; +import { InProgressChapter } from '../_models/in-progress-chapter'; +import { Library } from '../_models/library'; +import { Series } from '../_models/series'; +import { User } from '../_models/user'; +import { AccountService } from '../_services/account.service'; +import { Action, ActionFactoryService, ActionItem } from '../_services/action-factory.service'; +import { CollectionTagService } from '../_services/collection-tag.service'; +import { LibraryService } from '../_services/library.service'; +import { SeriesService } from '../_services/series.service'; + +@Component({ + selector: 'app-library', + templateUrl: './library.component.html', + styleUrls: ['./library.component.scss'] +}) +export class LibraryComponent implements OnInit { + + user: User | undefined; + libraries: Library[] = []; + isLoading = false; + isAdmin = false; + + recentlyAdded: Series[] = []; + inProgress: Series[] = []; + continueReading: InProgressChapter[] = []; + collectionTags: CollectionTag[] = []; + collectionTagActions: ActionItem[] = []; + + seriesTrackBy = (index: number, item: any) => `${item.name}_${item.pagesRead}`; + + constructor(public accountService: AccountService, private libraryService: LibraryService, private seriesService: SeriesService, private actionFactoryService: ActionFactoryService, private collectionService: CollectionTagService, private router: Router, private modalService: NgbModal) { } + + ngOnInit(): void { + this.isLoading = true; + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + this.user = user; + this.isAdmin = this.accountService.hasAdminRole(this.user); + this.libraryService.getLibrariesForMember().subscribe(libraries => { + this.libraries = libraries; + this.isLoading = false; + }); + }); + + this.collectionTagActions = this.actionFactoryService.getCollectionTagActions(this.handleCollectionActionCallback.bind(this)); + + this.reloadSeries(); + } + + reloadSeries() { + this.seriesService.getRecentlyAdded(0, 0, 20).subscribe(updatedSeries => { + this.recentlyAdded = updatedSeries.result; + }); + + this.seriesService.getInProgress().subscribe((updatedSeries) => { + this.inProgress = updatedSeries; + }); + + this.reloadTags(); + } + + reloadInProgress(series: Series | boolean) { + if (series === true || series === false) { + if (!series) {return;} + } + + if ((series as Series).pagesRead !== (series as Series).pages && (series as Series).pagesRead !== 0) { + return; + } + + this.seriesService.getInProgress().subscribe((updatedSeries) => { + this.inProgress = updatedSeries; + }); + + this.reloadTags(); + } + + reloadTags() { + this.collectionService.allTags().subscribe(tags => { + this.collectionTags = tags; + }); + } + + handleSectionClick(sectionTitle: string) { + if (sectionTitle.toLowerCase() === 'collections') { + this.router.navigate(['collections']); + } else if (sectionTitle.toLowerCase() === 'recently added') { + this.router.navigate(['recently-added']); + } + } + + loadCollection(item: CollectionTag) { + this.router.navigate(['collections', item.id]); + } + + handleCollectionActionCallback(action: Action, collectionTag: CollectionTag) { + switch (action) { + case(Action.Edit): + const modalRef = this.modalService.open(EditCollectionTagsComponent, { size: 'lg', scrollable: true }); + modalRef.componentInstance.tag = collectionTag; + modalRef.closed.subscribe((reloadNeeded: boolean) => { + if (reloadNeeded) { + // Reload tags + this.reloadTags(); + } + }); + break; + default: + break; + } + } + +} diff --git a/UI/Web/src/app/manga-reader/_models/chapter-info.ts b/UI/Web/src/app/manga-reader/_models/chapter-info.ts new file mode 100644 index 000000000..fff07b12b --- /dev/null +++ b/UI/Web/src/app/manga-reader/_models/chapter-info.ts @@ -0,0 +1,10 @@ +export interface ChapterInfo { + chapterNumber: string; + volumeNumber: string; + chapterTitle: string; + seriesName: string; + fileName: string; + isSpecial: boolean; + volumeId: number; + pages: number; +} \ No newline at end of file diff --git a/UI/Web/src/app/manga-reader/_models/reader-enums.ts b/UI/Web/src/app/manga-reader/_models/reader-enums.ts new file mode 100644 index 000000000..0117ed5d2 --- /dev/null +++ b/UI/Web/src/app/manga-reader/_models/reader-enums.ts @@ -0,0 +1,22 @@ +export enum FITTING_OPTION { + HEIGHT = 'full-height', + WIDTH = 'full-width', + ORIGINAL = 'original' + } + +export enum SPLIT_PAGE_PART { + NO_SPLIT = 'none', + LEFT_PART = 'left', + RIGHT_PART = 'right' + } + +export enum PAGING_DIRECTION { + FORWARD = 1, + BACKWARDS = -1, + } + +export enum COLOR_FILTER { + NONE = '', + SEPIA = 'filter-sepia', + DARK = 'filter-dark' + } diff --git a/UI/Web/src/app/manga-reader/_models/webtoon-image.ts b/UI/Web/src/app/manga-reader/_models/webtoon-image.ts new file mode 100644 index 000000000..43e8730e9 --- /dev/null +++ b/UI/Web/src/app/manga-reader/_models/webtoon-image.ts @@ -0,0 +1,4 @@ +export interface WebtoonImage { + src: string; + page: number; +} \ No newline at end of file diff --git a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html new file mode 100644 index 000000000..a7daf12d0 --- /dev/null +++ b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html @@ -0,0 +1,15 @@ + +
+ Captures Scroll Events: {{!this.isScrolling && this.allImagesLoaded}} + Is Scrolling: {{isScrollingForwards() ? 'Forwards' : 'Backwards'}} {{this.isScrolling}} + All Images Loaded: {{this.allImagesLoaded}} + Prefetched {{minPrefetchedWebtoonImage}}-{{maxPrefetchedWebtoonImage}} + Current Page:{{pageNum}} + Width: {{webtoonImageWidth}} +
+ + + + image + + diff --git a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.scss b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.scss new file mode 100644 index 000000000..c7308aa33 --- /dev/null +++ b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.scss @@ -0,0 +1,7 @@ +// DEBUG Only +.overlay { + background-color: rgba(0,0,0,0.5); +} +.active { + border: 2px solid red; +} \ No newline at end of file diff --git a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts new file mode 100644 index 000000000..c87bf8378 --- /dev/null +++ b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts @@ -0,0 +1,414 @@ +import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core'; +import { BehaviorSubject, fromEvent, Subject } from 'rxjs'; +import { debounceTime, takeUntil } from 'rxjs/operators'; +import { CircularArray } from 'src/app/shared/data-structures/circular-array'; +import { ReaderService } from 'src/app/_services/reader.service'; +import { PAGING_DIRECTION } from '../_models/reader-enums'; +import { WebtoonImage } from '../_models/webtoon-image'; + +@Component({ + selector: 'app-infinite-scroller', + templateUrl: './infinite-scroller.component.html', + styleUrls: ['./infinite-scroller.component.scss'] +}) +export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { + + /** + * Current page number aka what's recorded on screen + */ + @Input() pageNum: number = 0; + /** + * Number of pages to prefetch ahead of position + */ + @Input() buffferPages: number = 5; + /** + * Total number of pages + */ + @Input() totalPages: number = 0; + /** + * Method to generate the src for Image loading + */ + @Input() urlProvider!: (page: number) => string; + @Output() pageNumberChange: EventEmitter = new EventEmitter(); + + /** + * Stores and emits all the src urls + */ + webtoonImages: BehaviorSubject = new BehaviorSubject([]); + + /** + * Responsible for calculating current page on screen and uses hooks to trigger prefetching. + * Note: threshold will fire differently due to size of images. 1 requires full image on screen. 0 means 1px on screen. + */ + intersectionObserver: IntersectionObserver = new IntersectionObserver((entries) => this.handleIntersection(entries), { threshold: [0] }); + /** + * Direction we are scrolling. Controls calculations for prefetching + */ + scrollingDirection: PAGING_DIRECTION = PAGING_DIRECTION.FORWARD; + /** + * Temp variable to keep track of scrolling position between scrolls to caclulate direction + */ + prevScrollPosition: number = 0; + /** + * Temp variable to keep track of when the scrollTo() finishes, so we can start capturing scroll events again + */ + currentPageElem: Element | null = null; + /** + * The min page number that has been prefetched + */ + minPrefetchedWebtoonImage: number = Number.MAX_SAFE_INTEGER; + /** + * The max page number that has been prefetched + */ + maxPrefetchedWebtoonImage: number = Number.MIN_SAFE_INTEGER; + /** + * The minimum width of images in webtoon. On image loading, this is checked and updated. All images will get this assigned to them for rendering. + */ + webtoonImageWidth: number = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; + + /** + * Used to tell if a scrollTo() operation is in progress + */ + isScrolling: boolean = false; + /** + * Whether all prefetched images have loaded on the screen (not neccesarily in viewport) + */ + allImagesLoaded: boolean = false; + + /** + * Debug mode. Will show extra information + */ + debug: boolean = true; + + /** + * Timer to help detect when a scroll end event has occured (not used) + */ + scrollEndTimer: any; + + + /** + * Each pages height mapped to page number as key (not used) + */ + pageHeights:{[key: number]: number} = {}; + + buffer: CircularArray = new CircularArray([], 0); + + + + private readonly onDestroy = new Subject(); + + constructor(private readerService: ReaderService, private renderer: Renderer2) { } + + ngOnChanges(changes: SimpleChanges): void { + let shouldInit = false; + console.log('Changes: ', changes); + if (changes.hasOwnProperty('totalPages') && changes['totalPages'].currentValue === 0) { + this.debugLog('Swallowing variable change due to totalPages being 0'); + return; + } + + if (changes.hasOwnProperty('totalPages') && changes['totalPages'].previousValue != changes['totalPages'].currentValue) { + this.totalPages = changes['totalPages'].currentValue; + shouldInit = true; + } + if (changes.hasOwnProperty('pageNum') && changes['pageNum'].previousValue != changes['pageNum'].currentValue) { + // Manually update pageNum as we are getting notified from a parent component, hence we shouldn't invoke update + this.setPageNum(changes['pageNum'].currentValue); + if (Math.abs(changes['pageNum'].currentValue - changes['pageNum'].previousValue) > 2) { + // Go to page has occured + shouldInit = true; + } + } + + if (shouldInit) { + this.initWebtoonReader(); + } + + // This should only execute on initial load or from a gotopage update + const currentImage = document.querySelector('img#page-' + this.pageNum); + if (currentImage !== null && this.isElementVisible(currentImage)) { + + if ((changes.hasOwnProperty('pageNum') && Math.abs(changes['pageNum'].previousValue - changes['pageNum'].currentValue) <= 0) || !shouldInit) { + return; + } + this.debugLog('Scrolling to page', this.pageNum); + this.scrollToCurrentPage(); + } + } + + ngOnDestroy(): void { + this.intersectionObserver.disconnect(); + this.onDestroy.next(); + this.onDestroy.complete(); + } + + ngOnInit(): void { + fromEvent(window, 'scroll') + .pipe(debounceTime(20), takeUntil(this.onDestroy)) + .subscribe((event) => this.handleScrollEvent(event)); + } + + handleScrollEvent(event?: any) { + const verticalOffset = (window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop || 0); + + + clearTimeout(this.scrollEndTimer); + this.scrollEndTimer = setTimeout(() => this.handleScrollEnd(), 150); + + if (this.debug && this.isScrolling) { + this.debugLog('verticalOffset: ', verticalOffset); + this.debugLog('scroll to element offset: ', this.currentPageElem?.getBoundingClientRect().top); + } + + if (this.currentPageElem != null && this.isElementVisible(this.currentPageElem)) { + this.debugLog('Image is visible from scroll, isScrolling is now false'); + this.isScrolling = false; + } + + if (verticalOffset > this.prevScrollPosition) { + this.scrollingDirection = PAGING_DIRECTION.FORWARD; + } else { + this.scrollingDirection = PAGING_DIRECTION.BACKWARDS; + } + this.prevScrollPosition = verticalOffset; + } + + // ! This will fire twice from an automatic scroll + handleScrollEnd() { + //console.log('!!! Scroll End Event !!!'); + } + + + /** + * Is any part of the element visible in the scrollport. Does not take into account + * style properites, just scroll port visibility. + * Note: use && to ensure the whole images is visible + * @param elem + * @returns + */ + isElementVisible(elem: Element) { + if (elem === null || elem === undefined) { return false; } + + const docViewTop = window.pageYOffset; + const docViewBottom = docViewTop + window.innerHeight; + + const elemTop = elem.getBoundingClientRect().top; + const elemBottom = elemTop + elem.getBoundingClientRect().height; + + return ((elemBottom <= docViewBottom) || (elemTop >= docViewTop)); + } + + + initWebtoonReader() { + + this.minPrefetchedWebtoonImage = this.pageNum; + this.maxPrefetchedWebtoonImage = Number.MIN_SAFE_INTEGER; + this.webtoonImages.next([]); + + + + + const prefetchStart = Math.max(this.pageNum - this.buffferPages, 0); + const prefetchMax = Math.min(this.pageNum + this.buffferPages, this.totalPages); + this.debugLog('[INIT] Prefetching pages ' + prefetchStart + ' to ' + prefetchMax + '. Current page: ', this.pageNum); + for(let i = prefetchStart; i < prefetchMax; i++) { + this.prefetchWebtoonImage(i); + } + + const images = []; + for (let i = prefetchStart; i < prefetchMax; i++) { + images.push(new Image()); + } + this.buffer = new CircularArray(images, this.buffferPages); + + this.minPrefetchedWebtoonImage = prefetchStart; + this.maxPrefetchedWebtoonImage = prefetchMax; + + this.debugLog('Buffer: ', this.buffer.arr.map(img => this.readerService.imageUrlToPageNum(img.src))); + } + + /** + * Callback for an image onLoad. At this point the image is already rendered in DOM (may not be visible) + * This will be used to scroll to current page for intial load + * @param event + */ + onImageLoad(event: any) { + const imagePage = this.readerService.imageUrlToPageNum(event.target.src); + this.debugLog('Image loaded: ', imagePage); + + + if (event.target.width < this.webtoonImageWidth) { + this.webtoonImageWidth = event.target.width; + } + + this.pageHeights[imagePage] = event.target.getBoundingClientRect().height; + + this.renderer.setAttribute(event.target, 'width', this.webtoonImageWidth + ''); + this.renderer.setAttribute(event.target, 'height', event.target.height + ''); + + this.attachIntersectionObserverElem(event.target); + + if (imagePage === this.pageNum) { + Promise.all(Array.from(document.querySelectorAll('img')) + .filter((img: any) => !img.complete) + .map((img: any) => new Promise(resolve => { img.onload = img.onerror = resolve; }))) + .then(() => { + this.debugLog('! Loaded current page !', this.pageNum); + this.allImagesLoaded = true; + }); + } + } + + handleIntersection(entries: IntersectionObserverEntry[]) { + + if (!this.allImagesLoaded || this.isScrolling) { + this.debugLog('Images are not loaded (or performing scrolling action), skipping any scroll calculations'); + return; + } + + + entries.forEach(entry => { + const imagePage = parseInt(entry.target.attributes.getNamedItem('page')?.value + '', 10); + this.debugLog('[Intersection] Page ' + imagePage + ' is visible: ', entry.isIntersecting); + if (entry.isIntersecting) { + this.debugLog('[Intersection] ! Page ' + imagePage + ' just entered screen'); + this.setPageNum(imagePage); + this.prefetchWebtoonImages(); + } + }); + } + + setPageNum(pageNum: number) { + this.pageNum = pageNum; + this.pageNumberChange.emit(this.pageNum); + + //TODO: Perform check here to see if prefetching or DOM removal is needed + } + + isScrollingForwards() { + return this.scrollingDirection === PAGING_DIRECTION.FORWARD; + } + + scrollToCurrentPage() { + this.currentPageElem = document.querySelector('img#page-' + this.pageNum); + if (!this.currentPageElem) { return; } + // Update prevScrollPosition, so the next scroll event properly calculates direction + this.prevScrollPosition = this.currentPageElem.getBoundingClientRect().top; + this.isScrolling = true; + + setTimeout(() => { + if (this.currentPageElem) { + this.currentPageElem.scrollIntoView({behavior: 'smooth'}); + } + }, 600); + } + + prefetchWebtoonImage(page: number) { + let data = this.webtoonImages.value; + + data = data.concat({src: this.urlProvider(page), page}); + + data.sort((a: WebtoonImage, b: WebtoonImage) => { + if (a.page < b.page) { return -1; } + else if (a.page > b.page) { return 1; } + else return 0; + }); + + if (page < this.minPrefetchedWebtoonImage) { + this.minPrefetchedWebtoonImage = page; + } + if (page > this.maxPrefetchedWebtoonImage) { + this.maxPrefetchedWebtoonImage = page; + } + this.allImagesLoaded = false; + + this.webtoonImages.next(data); + + let index = 1; + + this.buffer.applyFor((item, i) => { + const offsetIndex = this.pageNum + index; + const urlPageNum = this.readerService.imageUrlToPageNum(item.src); + if (urlPageNum === offsetIndex) { + index += 1; + return; + } + if (offsetIndex < this.totalPages - 1) { + item.src = this.urlProvider(offsetIndex); + index += 1; + } + }, this.buffer.size() - 3); + + + } + + attachIntersectionObserverElem(elem: HTMLImageElement) { + if (elem !== null) { + this.intersectionObserver.observe(elem); + this.debugLog('Attached Intersection Observer to page', this.readerService.imageUrlToPageNum(elem.src)); + } else { + console.error('Could not attach observer on elem'); + } + } + + prefetchWebtoonImages() { + let startingIndex = 0; + let endingIndex = 0; + if (this.isScrollingForwards()) { + startingIndex = Math.min(this.maxPrefetchedWebtoonImage + 1, this.totalPages); + endingIndex = Math.min(this.maxPrefetchedWebtoonImage + 1 + this.buffferPages, this.totalPages); + + if (startingIndex === this.totalPages) { + return; + } + } else { + startingIndex = Math.max(this.minPrefetchedWebtoonImage - 1, 0) ; + endingIndex = Math.max(this.minPrefetchedWebtoonImage - 1 - this.buffferPages, 0); + + if (startingIndex <= 0) { + return; + } + } + + + if (startingIndex > endingIndex) { + const temp = startingIndex; + startingIndex = endingIndex; + endingIndex = temp; + } + this.debugLog('[Prefetch] prefetching pages: ' + startingIndex + ' to ' + endingIndex); + this.debugLog(' [Prefetch] page num: ', this.pageNum); + // If a request comes in to prefetch over current page +/- bufferPages (+ 1 due to requesting from next/prev page), then deny it + this.debugLog(' [Prefetch] Caps: ' + (this.pageNum - (this.buffferPages + 1)) + ' - ' + (this.pageNum + (this.buffferPages + 1))); + if (this.isScrollingForwards() && startingIndex > this.pageNum + (this.buffferPages + 1)) { + this.debugLog('[Prefetch] A request that is too far outside buffer range has been declined', this.pageNum); + return; + } + if (!this.isScrollingForwards() && endingIndex < (this.pageNum - (this.buffferPages + 1))) { + this.debugLog('[Prefetch] A request that is too far outside buffer range has been declined', this.pageNum); + return; + } + for(let i = startingIndex; i < endingIndex; i++) { + this.prefetchWebtoonImage(i); + } + + Promise.all(Array.from(document.querySelectorAll('img')) + .filter((img: any) => !img.complete) + .map((img: any) => new Promise(resolve => { img.onload = img.onerror = resolve; }))) + .then(() => { + this.allImagesLoaded = true; + }); + } + + debugLog(message: string, extraData?: any) { + if (!this.debug) { return; } + + if (extraData !== undefined) { + console.log(message, extraData); + } else { + console.log(message); + } + } +} diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.html b/UI/Web/src/app/manga-reader/manga-reader.component.html new file mode 100644 index 000000000..281a443b2 --- /dev/null +++ b/UI/Web/src/app/manga-reader/manga-reader.component.html @@ -0,0 +1,130 @@ +
+
+
+ + +
+
{{title}}
+
+ {{subtitle}} +
+
+
+
+ +
+ +
+
+ +
+ + +
+ +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+ + +
+ +
+ + +
+ + +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+   +
+
+
+
+
+
+ +
+
+
+ +
+
+   +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.scss b/UI/Web/src/app/manga-reader/manga-reader.component.scss new file mode 100644 index 000000000..c076922bc --- /dev/null +++ b/UI/Web/src/app/manga-reader/manga-reader.component.scss @@ -0,0 +1,254 @@ +@import '../../theme/colors'; + +$center-width: 50%; +$side-width: 25%; + +$dash-width: 3px; +$pointer-offset: 5px; + +$secondary-color: #CCC; + + +@media(min-width: 600px) { + .overlay .left .i { + left: 20px; + } + .overlay .right .i { + right: 20px; + } +} + + +.btn-icon { + color: white; +} + +canvas { + position: absolute; +} + +.reader { + background-color: black; + + img { + align-items: center; + } +} + +.loading { + position: absolute; + left: 48%; + top: 20%; + z-index: 1; +} + +.title, .subtitle { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.filter-dark { + filter: brightness(0.65); +} + +.filter-sepia { + filter: sepia(80%) hue-rotate(349deg) saturate(200%) brightness(0.65); +} + +.bottom-menu { + padding: 20px 20px; +} + + +.overlay { + background-color: rgba(0,0,0,0.5); + color: white; +} + +// Fitting Options +.full-height { + position: absolute; + margin: auto; + top: 0px; + left: 0; + right: 0; + bottom: 0px; + height: 100%; +} + +.original { + position: absolute; + margin-left: auto; + margin-right: auto; + top: 0px; + bottom: 0px; + left: 0; + right: 0; +} + +.full-width { + width: 100%; +} + + +.center-menu { + position: fixed; + top: 10px; + left: $side-width; + width: $center-width; + border-bottom: $dash-width dashed $secondary-color; + text-align: center; + z-index: 2; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; +} + + +.right { + position: fixed; + right: 0px; + top: 0px; + width: $side-width; + height: 100%; + background: rgba(0, 0, 0, 0); + z-index: 2; + cursor: pointer; +} + +.top { + position: fixed; + right: 0px; + top: 0px; + width: 100%; + height: $side-width; + background: rgba(0, 0, 0, 0); + z-index: 2; + cursor: pointer; +} + +.left { + position: fixed; + left: 0px; + top: 0px; + width: $side-width; + height: 100%; + background: rgba(0, 0, 0, 0); + z-index: 2; + cursor: pointer; +} + +.bottom { + position: fixed; + left: 0px; + bottom: 0px; + width: 100%; + height: $side-width; + background: rgba(0, 0, 0, 0); + z-index: 2; + cursor: pointer; +} + + +// Splitting Icon +.split { + height: 20px; + width: 40px; + z-index: 1; + top: 0; + overflow: hidden; + border: 2px solid #ccc; + + &::before { + margin-left: 30%; + } + + /* Control the left side */ + .left-side { + height: 20px; + width: 20px; + background-color: rgba(255, 255, 255, 0.6); + margin-top: -16px; + } + + /* Control the right side */ + .right-side { + height: 20px; + margin-left: 20px; + width: 20px; + background-color: rgba(255, 255, 255, 0.6); + margin-top: -16px; + } + + .none { + background-color: rgba(255, 255, 255, 0.5); + } + } + + ::ng-deep { + .custom-slider .ngx-slider .ngx-slider-bar { + background: #e9ffe2; + height: 2px; + } + .custom-slider .ngx-slider .ngx-slider-selection { + background: $primary-color; + } + + .custom-slider .ngx-slider .ngx-slider-pointer { + width: 8px; + height: 16px; + top: auto; /* to remove the default positioning */ + bottom: 0; + background-color: $primary-color; // #333; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + } + + .custom-slider .ngx-slider .ngx-slider-pointer:after { + display: none; + } + + .custom-slider .ngx-slider .ngx-slider-bubble { + bottom: 14px; + font-weight: bold; + } + + .custom-slider .ngx-slider .ngx-slider-limit { + font-weight: bold; + color: white !important; + + } + + + .custom-slider .ngx-slider .ngx-slider-tick { + width: 1px; + height: 10px; + margin-left: 4px; + border-radius: 0; + background: #ffe4d1; + top: -1px; + } + + .custom-slider .ngx-slider .ngx-slider-tick.ngx-slider-selected { + background: $primary-color; + } + } + + .webtoon-images { + text-align: center; + } + + .highlight { + background-color: rgba(65, 225, 100, 0.5) !important; + animation: fadein .5s both; + } + .highlight-2 { + background-color: rgba(65, 105, 225, 0.5) !important; + animation: fadein .5s both; + } + + // DEBUG + .active-image { + border: 5px solid red; + } \ No newline at end of file diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.ts b/UI/Web/src/app/manga-reader/manga-reader.component.ts new file mode 100644 index 000000000..f1cacaa39 --- /dev/null +++ b/UI/Web/src/app/manga-reader/manga-reader.component.ts @@ -0,0 +1,951 @@ +import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core'; +import { Location } from '@angular/common'; +import { ActivatedRoute, Router } from '@angular/router'; +import { take, takeUntil } from 'rxjs/operators'; +import { User } from '../_models/user'; +import { AccountService } from '../_services/account.service'; +import { ReaderService } from '../_services/reader.service'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { NavService } from '../_services/nav.service'; +import { ReadingDirection } from '../_models/preferences/reading-direction'; +import { ScalingOption } from '../_models/preferences/scaling-option'; +import { PageSplitOption } from '../_models/preferences/page-split-option'; +import { forkJoin, Subject } from 'rxjs'; +import { ToastrService } from 'ngx-toastr'; +import { KEY_CODES } from '../shared/_services/utility.service'; +import { CircularArray } from '../shared/data-structures/circular-array'; +import { MemberService } from '../_services/member.service'; +import { Stack } from '../shared/data-structures/stack'; +import { ChangeContext, LabelType, Options } from '@angular-slider/ngx-slider'; +import { trigger, state, style, transition, animate } from '@angular/animations'; +import { ChapterInfo } from './_models/chapter-info'; +import { COLOR_FILTER, FITTING_OPTION, PAGING_DIRECTION, SPLIT_PAGE_PART } from './_models/reader-enums'; +import { Preferences, scalingOptions } from '../_models/preferences/preferences'; +import { READER_MODE } from '../_models/preferences/reader-mode'; + +const PREFETCH_PAGES = 5; + +const CHAPTER_ID_NOT_FETCHED = -2; +const CHAPTER_ID_DOESNT_EXIST = -1; + +const ANIMATION_SPEED = 200; +const OVERLAY_AUTO_CLOSE_TIME = 6000; +const CLICK_OVERLAY_TIMEOUT = 3000; + + +@Component({ + selector: 'app-manga-reader', + templateUrl: './manga-reader.component.html', + styleUrls: ['./manga-reader.component.scss'], + animations: [ + trigger('slideFromTop', [ + state('in', style({ transform: 'translateY(0)'})), + transition('void => *', [ + style({ transform: 'translateY(-100%)' }), + animate(ANIMATION_SPEED) + ]), + transition('* => void', [ + animate(ANIMATION_SPEED, style({ transform: 'translateY(-100%)' })), + ]) + ]), + trigger('slideFromBottom', [ + state('in', style({ transform: 'translateY(0)'})), + transition('void => *', [ + style({ transform: 'translateY(100%)' }), + animate(ANIMATION_SPEED) + ]), + transition('* => void', [ + animate(ANIMATION_SPEED, style({ transform: 'translateY(100%)' })), + ]) + ]) + ] +}) +export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { + libraryId!: number; + seriesId!: number; + volumeId!: number; + chapterId!: number; + + /** + * The current page. UI will show this number + 1. + */ + pageNum = 0; + /** + * Total pages in the given Chapter + */ + maxPages = 1; + user!: User; + generalSettingsForm!: FormGroup; + + scalingOptions = scalingOptions; + readingDirection = ReadingDirection.LeftToRight; + scalingOption = ScalingOption.FitToHeight; + pageSplitOption = PageSplitOption.SplitRightToLeft; + currentImageSplitPart: SPLIT_PAGE_PART = SPLIT_PAGE_PART.NO_SPLIT; + pagingDirection: PAGING_DIRECTION = PAGING_DIRECTION.FORWARD; + colorMode: COLOR_FILTER = COLOR_FILTER.NONE; + autoCloseMenu: boolean = true; + readerMode: READER_MODE = READER_MODE.MANGA_LR; + + isLoading = true; + + @ViewChild('content') canvas: ElementRef | undefined; + private ctx!: CanvasRenderingContext2D; + private canvasImage = new Image(); + + /** + * A circular array of size PREFETCH_PAGES + 2. Maintains prefetched Images around the current page to load from to avoid loading animation. + * @see CircularArray + */ + cachedImages!: CircularArray; + /** + * A stack of the chapter ids we come across during continuous reading mode. When we traverse a boundary, we use this to avoid extra API calls. + * @see Stack + */ + continuousChaptersStack: Stack = new Stack(); + + + /** + * If the menu is open/visible. + */ + menuOpen = false; + /** + * If the prev page allows a page change to occur. + */ + prevPageDisabled = false; + /** + * If the next page allows a page change to occur. + */ + nextPageDisabled = false; + pageOptions: Options = { + floor: 0, + ceil: 0, + step: 1, + boundPointerLabels: true, + showSelectionBar: true, + translate: (value: number, label: LabelType) => { + if (label == LabelType.Floor) { + return 1 + ''; + } else if (label === LabelType.Ceil) { + return this.maxPages + ''; + } + return (this.pageNum + 1) + ''; + }, + animate: false + }; + refreshSlider: EventEmitter = new EventEmitter(); + + /** + * Used to store the Series name for UI + */ + title: string = ''; + /** + * Used to store the Volume/Chapter information + */ + subtitle: string = ''; + /** + * Timeout id for auto-closing menu overlay + */ + menuTimeout: any; + /** + * If the click overlay is rendered on screen + */ + showClickOverlay: boolean = false; + /** + * Next Chapter Id. This is not garunteed to be a valid ChapterId. Prefetched on page load (non-blocking). + */ + nextChapterId: number = CHAPTER_ID_NOT_FETCHED; + /** + * Previous Chapter Id. This is not garunteed to be a valid ChapterId. Prefetched on page load (non-blocking). + */ + prevChapterId: number = CHAPTER_ID_NOT_FETCHED; + /** + * Is there a next chapter. If not, this will disable UI controls. + */ + nextChapterDisabled: boolean = false; + /** + * Is there a previous chapter. If not, this will disable UI controls. + */ + prevChapterDisabled: boolean = false; + /** + * Has the next chapter been prefetched. Prefetched means the backend will cache the files. + */ + nextChapterPrefetched: boolean = false; + /** + * Has the previous chapter been prefetched. Prefetched means the backend will cache the files. + */ + prevChapterPrefetched: boolean = false; + /** + * If extended settings area is visible. Blocks auto-closing of menu. + */ + settingsOpen: boolean = false; + + private readonly onDestroy = new Subject(); + + + getPageUrl = (pageNum: number) => this.readerService.getPageUrl(this.chapterId, pageNum); + + + + + + get splitIconClass() { + if (this.isSplitLeftToRight()) { + return 'left-side'; + } else if (this.isNoSplit()) { + return 'none'; + } + return 'right-side'; + } + + get readerModeIcon() { + switch(this.readerMode) { + case READER_MODE.MANGA_LR: + return 'fa-exchange-alt'; + case READER_MODE.MANGA_UD: + return 'fa-exchange-alt fa-rotate-90'; + case READER_MODE.WEBTOON: + return 'fa-arrows-alt-v'; + } + } + + get colorOptionName() { + switch(this.colorMode) { + case COLOR_FILTER.NONE: + return 'None'; + case COLOR_FILTER.DARK: + return 'Dark'; + case COLOR_FILTER.SEPIA: + return 'Sepia'; + } + } + + get READER_MODE(): typeof READER_MODE { + return READER_MODE; + } + + get ReadingDirection(): typeof ReadingDirection { + return ReadingDirection; + } + + constructor(private route: ActivatedRoute, private router: Router, private accountService: AccountService, + public readerService: ReaderService, private location: Location, + private formBuilder: FormBuilder, private navService: NavService, + private toastr: ToastrService, private memberService: MemberService) { + this.navService.hideNavBar(); + } + + ngOnInit(): void { + const libraryId = this.route.snapshot.paramMap.get('libraryId'); + const seriesId = this.route.snapshot.paramMap.get('seriesId'); + const chapterId = this.route.snapshot.paramMap.get('chapterId'); + + if (libraryId === null || seriesId === null || chapterId === null) { + this.router.navigateByUrl('/home'); + return; + } + + this.libraryId = parseInt(libraryId, 10); + this.seriesId = parseInt(seriesId, 10); + this.chapterId = parseInt(chapterId, 10); + + this.continuousChaptersStack.push(this.chapterId); + + this.readerService.setOverrideStyles(); + + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + if (user) { + this.user = user; + this.readingDirection = this.user.preferences.readingDirection; + this.scalingOption = this.user.preferences.scalingOption; + this.pageSplitOption = this.user.preferences.pageSplitOption; + this.autoCloseMenu = this.user.preferences.autoCloseMenu; + this.readerMode = this.user.preferences.readerMode; + + + this.generalSettingsForm = this.formBuilder.group({ + autoCloseMenu: this.autoCloseMenu, + pageSplitOption: this.pageSplitOption + '', + fittingOption: this.translateScalingOption(this.scalingOption) + }); + + this.updateForm(); + + this.generalSettingsForm.valueChanges.pipe(takeUntil(this.onDestroy)).subscribe((changes: SimpleChanges) => { + this.autoCloseMenu = this.generalSettingsForm.get('autoCloseMenu')?.value; + // On change of splitting, re-render the page if the page is already split + const needsSplitting = this.canvasImage.width > this.canvasImage.height; + if (needsSplitting) { + this.loadPage(); + } + }); + + this.memberService.hasReadingProgress(this.libraryId).pipe(take(1)).subscribe(progress => { + if (!progress) { + this.toggleMenu(); + this.toastr.info('Tap the image at any time to open the menu. You can configure different settings or go to page by clicking progress bar. Tap sides of image move to next/prev page.'); + } + }); + } else { + // If no user, we can't render + this.router.navigateByUrl('/home'); + } + }); + + + this.init(); + } + + ngAfterViewInit() { + if (!this.canvas) { + return; + } + this.ctx = this.canvas.nativeElement.getContext('2d', { alpha: false }); + this.canvasImage.onload = () => this.renderPage(); + } + + ngOnDestroy() { + this.readerService.resetOverrideStyles(); + this.navService.showNavBar(); + this.onDestroy.next(); + } + + @HostListener('window:keyup', ['$event']) + handleKeyPress(event: KeyboardEvent) { + if (event.key === KEY_CODES.RIGHT_ARROW || event.key === KEY_CODES.DOWN_ARROW) { + this.readingDirection === ReadingDirection.LeftToRight ? this.nextPage() : this.prevPage(); + } else if (event.key === KEY_CODES.LEFT_ARROW || event.key === KEY_CODES.UP_ARROW) { + this.readingDirection === ReadingDirection.LeftToRight ? this.prevPage() : this.nextPage(); + } else if (event.key === KEY_CODES.ESC_KEY) { + if (this.menuOpen) { + this.toggleMenu(); + event.stopPropagation(); + event.preventDefault(); + return; + } + this.closeReader(); + } else if (event.key === KEY_CODES.SPACE) { + this.toggleMenu(); + } else if (event.key === KEY_CODES.G) { + const goToPageNum = this.promptForPage(); + if (goToPageNum === null) { return; } + this.goToPage(parseInt(goToPageNum.trim(), 10)); + } + } + + init() { + this.nextChapterId = CHAPTER_ID_NOT_FETCHED; + this.prevChapterId = CHAPTER_ID_NOT_FETCHED; + this.nextChapterDisabled = false; + this.prevChapterDisabled = false; + this.nextChapterPrefetched = false; + this.pageNum = 1; + + forkJoin({ + bookmark: this.readerService.getBookmark(this.chapterId), + chapterInfo: this.readerService.getChapterInfo(this.chapterId) + }).pipe(take(1)).subscribe(results => { + this.volumeId = results.chapterInfo.volumeId; + this.maxPages = results.chapterInfo.pages; + + let page = results.bookmark.pageNum; + if (page >= this.maxPages) { + page = this.maxPages - 1; + } + this.setPageNum(page); + + // Due to change detection rules in Angular, we need to re-create the options object to apply the change + const newOptions: Options = Object.assign({}, this.pageOptions); + newOptions.ceil = this.maxPages - 1; // We -1 so that the slider UI shows us hitting the end, since visually we +1 everything. + this.pageOptions = newOptions; + + this.updateTitle(results.chapterInfo); + + this.readerService.getNextChapter(this.seriesId, this.volumeId, this.chapterId).pipe(take(1)).subscribe(chapterId => { + this.nextChapterId = chapterId; + if (chapterId === CHAPTER_ID_DOESNT_EXIST || chapterId === this.chapterId) { + this.nextChapterDisabled = true; + } + }); + this.readerService.getPrevChapter(this.seriesId, this.volumeId, this.chapterId).pipe(take(1)).subscribe(chapterId => { + this.prevChapterId = chapterId; + if (chapterId === CHAPTER_ID_DOESNT_EXIST || chapterId === this.chapterId) { + this.prevChapterDisabled = true; + } + }); + + // ! Should I move the prefetching code if we start in webtoon reader mode? + const images = []; + for (let i = 0; i < PREFETCH_PAGES + 2; i++) { + images.push(new Image()); + } + + this.cachedImages = new CircularArray(images, 0); + + + this.render(); + }, () => { + setTimeout(() => { + this.closeReader(); + }, 200); + }); + } + + render() { + if (this.readerMode === READER_MODE.WEBTOON) { + this.isLoading = false; + } else { + this.loadPage(); + } + } + + closeReader() { + this.location.back(); + } + + updateTitle(chapterInfo: ChapterInfo) { + this.title = chapterInfo.seriesName; + if (chapterInfo.chapterTitle.length > 0) { + this.title += ' - ' + chapterInfo.chapterTitle; + } + + this.subtitle = ''; + if (chapterInfo.isSpecial && chapterInfo.volumeNumber === '0') { + this.subtitle = chapterInfo.fileName; + } else if (!chapterInfo.isSpecial && chapterInfo.volumeNumber === '0') { + this.subtitle = 'Chapter ' + chapterInfo.chapterNumber; + } else { + this.subtitle = 'Volume ' + chapterInfo.volumeNumber; + + if (chapterInfo.chapterNumber !== '0') { + this.subtitle += ' Chapter ' + chapterInfo.chapterNumber; + } + } + } + + translateScalingOption(option: ScalingOption) { + switch (option) { + case (ScalingOption.Automatic): + { + const windowWidth = window.innerWidth + || document.documentElement.clientWidth + || document.body.clientWidth; + const windowHeight = window.innerHeight + || document.documentElement.clientHeight + || document.body.clientHeight; + + const ratio = windowWidth / windowHeight; + if (windowHeight > windowWidth) { + return FITTING_OPTION.WIDTH; + } + + if (windowWidth >= windowHeight || ratio > 1.0) { + return FITTING_OPTION.HEIGHT; + } + return FITTING_OPTION.WIDTH; + } + case (ScalingOption.FitToHeight): + return FITTING_OPTION.HEIGHT; + case (ScalingOption.FitToWidth): + return FITTING_OPTION.WIDTH; + default: + return FITTING_OPTION.ORIGINAL; + } + } + + getFittingOptionClass() { + const formControl = this.generalSettingsForm.get('fittingOption'); + if (formControl === undefined) { + return FITTING_OPTION.HEIGHT; + } + return formControl?.value; + } + + getFittingIcon() { + let value = FITTING_OPTION.HEIGHT; + const formControl = this.generalSettingsForm.get('fittingOption'); + if (formControl !== undefined) { + value = formControl?.value; + } + + switch(value) { + case FITTING_OPTION.HEIGHT: + return 'fa-arrows-alt-v'; + case FITTING_OPTION.WIDTH: + return 'fa-arrows-alt-h'; + case FITTING_OPTION.ORIGINAL: + return 'fa-expand-arrows-alt'; + } + } + + cancelMenuCloseTimer() { + if (this.menuTimeout) { + clearTimeout(this.menuTimeout); + } + } + + /** + * Whenever the menu is interacted with, restart the timer. However if the settings menu is open, don't restart, just cancel the timeout. + */ + resetMenuCloseTimer() { + if (this.menuTimeout) { + clearTimeout(this.menuTimeout); + if (!this.settingsOpen && this.autoCloseMenu) { + this.startMenuCloseTimer(); + } + } + } + + startMenuCloseTimer() { + if (!this.autoCloseMenu) { return; } + + this.menuTimeout = setTimeout(() => { + this.toggleMenu(); + }, OVERLAY_AUTO_CLOSE_TIME); + } + + + toggleMenu() { + this.menuOpen = !this.menuOpen; + + if (this.menuTimeout) { + clearTimeout(this.menuTimeout); + } + + if (this.menuOpen && !this.settingsOpen) { + this.startMenuCloseTimer(); + } else { + this.showClickOverlay = false; + this.settingsOpen = false; + } + } + + isSplitLeftToRight() { + return (this.generalSettingsForm?.get('pageSplitOption')?.value + '') === (PageSplitOption.SplitLeftToRight + ''); + } + + isNoSplit() { + return (this.generalSettingsForm?.get('pageSplitOption')?.value + '') === (PageSplitOption.NoSplit + ''); + } + + updateSplitPage() { + const needsSplitting = this.canvasImage.width > this.canvasImage.height; + if (!needsSplitting || this.isNoSplit()) { + this.currentImageSplitPart = SPLIT_PAGE_PART.NO_SPLIT; + return; + } + + if (this.pagingDirection === PAGING_DIRECTION.FORWARD) { + switch (this.currentImageSplitPart) { + case SPLIT_PAGE_PART.NO_SPLIT: + this.currentImageSplitPart = this.isSplitLeftToRight() ? SPLIT_PAGE_PART.LEFT_PART : SPLIT_PAGE_PART.RIGHT_PART; + break; + case SPLIT_PAGE_PART.LEFT_PART: + const r2lSplittingPart = (needsSplitting ? SPLIT_PAGE_PART.RIGHT_PART : SPLIT_PAGE_PART.NO_SPLIT); + this.currentImageSplitPart = this.isSplitLeftToRight() ? SPLIT_PAGE_PART.RIGHT_PART : r2lSplittingPart; + break; + case SPLIT_PAGE_PART.RIGHT_PART: + const l2rSplittingPart = (needsSplitting ? SPLIT_PAGE_PART.LEFT_PART : SPLIT_PAGE_PART.NO_SPLIT); + this.currentImageSplitPart = this.isSplitLeftToRight() ? l2rSplittingPart : SPLIT_PAGE_PART.LEFT_PART; + break; + } + } else if (this.pagingDirection === PAGING_DIRECTION.BACKWARDS) { + switch (this.currentImageSplitPart) { + case SPLIT_PAGE_PART.NO_SPLIT: + this.currentImageSplitPart = this.isSplitLeftToRight() ? SPLIT_PAGE_PART.RIGHT_PART : SPLIT_PAGE_PART.LEFT_PART; + break; + case SPLIT_PAGE_PART.LEFT_PART: + const l2rSplittingPart = (needsSplitting ? SPLIT_PAGE_PART.RIGHT_PART : SPLIT_PAGE_PART.NO_SPLIT); + this.currentImageSplitPart = this.isSplitLeftToRight() ? l2rSplittingPart : SPLIT_PAGE_PART.RIGHT_PART; + break; + case SPLIT_PAGE_PART.RIGHT_PART: + this.currentImageSplitPart = this.isSplitLeftToRight() ? SPLIT_PAGE_PART.LEFT_PART : (needsSplitting ? SPLIT_PAGE_PART.LEFT_PART : SPLIT_PAGE_PART.NO_SPLIT); + break; + } + } + } + + handlePageChange(event: any, direction: string) { + if (this.readerMode === READER_MODE.WEBTOON) { + if (direction === 'right') { + this.nextPage(event); + } else { + this.prevPage(event); + } + return; + } + if (direction === 'right') { + this.readingDirection === ReadingDirection.LeftToRight ? this.nextPage(event) : this.prevPage(event); + } else if (direction === 'left') { + this.readingDirection === ReadingDirection.LeftToRight ? this.prevPage(event) : this.nextPage(event); + } + } + + nextPage(event?: any) { + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + + const notInSplit = this.currentImageSplitPart !== (this.isSplitLeftToRight() ? SPLIT_PAGE_PART.LEFT_PART : SPLIT_PAGE_PART.RIGHT_PART); + + if ((this.pageNum + 1 >= this.maxPages && notInSplit) || this.isLoading) { + + if (this.isLoading) { return; } + + // Move to next volume/chapter automatically + this.loadNextChapter(); + return; + } + + this.pagingDirection = PAGING_DIRECTION.FORWARD; + if (this.isNoSplit() || notInSplit) { + this.setPageNum(this.pageNum + 1); + if (this.readerMode !== READER_MODE.WEBTOON) { + this.canvasImage = this.cachedImages.next(); + } + } + + if (this.readerMode !== READER_MODE.WEBTOON) { + this.loadPage(); + } + } + + prevPage(event?: any) { + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + + const notInSplit = this.currentImageSplitPart !== (this.isSplitLeftToRight() ? SPLIT_PAGE_PART.RIGHT_PART : SPLIT_PAGE_PART.LEFT_PART); + + if ((this.pageNum - 1 < 0 && notInSplit) || this.isLoading) { + + if (this.isLoading) { return; } + + // Move to next volume/chapter automatically + this.loadPrevChapter(); + return; + } + + this.pagingDirection = PAGING_DIRECTION.BACKWARDS; + if (this.isNoSplit() || notInSplit) { + this.setPageNum(this.pageNum - 1); + this.canvasImage = this.cachedImages.prev(); + } + + if (this.readerMode !== READER_MODE.WEBTOON) { + this.loadPage(); + } + } + + loadNextChapter() { + if (this.nextPageDisabled) { return; } + this.isLoading = true; + if (this.nextChapterId === CHAPTER_ID_NOT_FETCHED || this.nextChapterId === this.chapterId) { + this.readerService.getNextChapter(this.seriesId, this.volumeId, this.chapterId).pipe(take(1)).subscribe(chapterId => { + this.nextChapterId = chapterId; + this.loadChapter(chapterId, 'next'); + }); + } else { + this.loadChapter(this.nextChapterId, 'next'); + } + } + + loadPrevChapter() { + if (this.prevPageDisabled) { return; } + this.isLoading = true; + this.continuousChaptersStack.pop(); + const prevChapter = this.continuousChaptersStack.peek(); + if (prevChapter != this.chapterId) { + if (prevChapter !== undefined) { + this.chapterId = prevChapter; + this.init(); + return; + } + } + + if (this.prevChapterId === CHAPTER_ID_NOT_FETCHED || this.prevChapterId === this.chapterId) { + this.readerService.getPrevChapter(this.seriesId, this.volumeId, this.chapterId).pipe(take(1)).subscribe(chapterId => { + this.prevChapterId = chapterId; + this.loadChapter(chapterId, 'prev'); + }); + } else { + this.loadChapter(this.prevChapterId, 'prev'); + } + } + + loadChapter(chapterId: number, direction: 'next' | 'prev') { + if (chapterId >= 0) { + this.chapterId = chapterId; + this.continuousChaptersStack.push(chapterId); + // Load chapter Id onto route but don't reload + const lastSlashIndex = this.router.url.lastIndexOf('/'); + const newRoute = this.router.url.substring(0, lastSlashIndex + 1) + this.chapterId + ''; + window.history.replaceState({}, '', newRoute); + this.init(); + } else { + // This will only happen if no actual chapter can be found + this.toastr.warning('Could not find ' + direction + ' chapter'); + this.isLoading = false; + if (direction === 'prev') { + this.prevPageDisabled = true; + } else { + this.nextPageDisabled = true; + } + + } + } + + renderPage() { + if (this.ctx && this.canvas) { + this.canvasImage.onload = null; + //this.ctx.imageSmoothingEnabled = true; + this.canvas.nativeElement.width = this.canvasImage.width; + this.canvas.nativeElement.height = this.canvasImage.height; + const needsSplitting = this.canvasImage.width > this.canvasImage.height; + this.updateSplitPage(); + + if (needsSplitting && this.currentImageSplitPart === SPLIT_PAGE_PART.LEFT_PART) { + this.canvas.nativeElement.width = this.canvasImage.width / 2; + this.ctx.drawImage(this.canvasImage, 0, 0, this.canvasImage.width, this.canvasImage.height, 0, 0, this.canvasImage.width, this.canvasImage.height); + } else if (needsSplitting && this.currentImageSplitPart === SPLIT_PAGE_PART.RIGHT_PART) { + this.canvas.nativeElement.width = this.canvasImage.width / 2; + this.ctx.drawImage(this.canvasImage, 0, 0, this.canvasImage.width, this.canvasImage.height, -this.canvasImage.width / 2, 0, this.canvasImage.width, this.canvasImage.height); + } else { + this.ctx.drawImage(this.canvasImage, 0, 0); + } + } + this.isLoading = false; + } + + + prefetch() { + let index = 1; + + this.cachedImages.applyFor((item, internalIndex) => { + const offsetIndex = this.pageNum + index; + const urlPageNum = this.readerService.imageUrlToPageNum(item.src); + if (urlPageNum === offsetIndex) { + index += 1; + return; + } + if (offsetIndex < this.maxPages - 1) { + item.src = this.readerService.getPageUrl(this.chapterId, offsetIndex); + index += 1; + } + }, this.cachedImages.size() - 3); + //console.log('prefetched images: ', this.cachedImages.arr.map(item => this.readerService.imageUrlToPageNum(item.src) + (item.complete ? ' (c)' : ''))); + } + + loadPage() { + if (!this.canvas || !this.ctx) { return; } + + // Due to the fact that we start at image 0, but page 1, we need the last page to be bookmarked as page + 1 to be completed + let pageNum = this.pageNum; + if (this.pageNum == this.maxPages - 1) { + pageNum = this.pageNum + 1; + } + + + this.readerService.bookmark(this.seriesId, this.volumeId, this.chapterId, pageNum).pipe(take(1)).subscribe(() => {/* No operation */}); + + this.isLoading = true; + this.canvasImage = this.cachedImages.current(); + if (this.readerService.imageUrlToPageNum(this.canvasImage.src) !== this.pageNum || this.canvasImage.src === '' || !this.canvasImage.complete) { + this.canvasImage.src = this.readerService.getPageUrl(this.chapterId, this.pageNum); + this.canvasImage.onload = () => this.renderPage(); + } else { + this.renderPage(); + } + this.prefetch(); + } + + setReadingDirection() { + if (this.readingDirection === ReadingDirection.LeftToRight) { + this.readingDirection = ReadingDirection.RightToLeft; + } else { + this.readingDirection = ReadingDirection.LeftToRight; + } + + if (this.menuOpen) { + this.showClickOverlay = true; + setTimeout(() => { + this.showClickOverlay = false; + }, CLICK_OVERLAY_TIMEOUT); + } + } + + clickOverlayClass(side: 'right' | 'left') { + if (!this.showClickOverlay) { + return ''; + } + + if (this.readingDirection === ReadingDirection.LeftToRight) { + return side === 'right' ? 'highlight' : 'highlight-2'; + } + return side === 'right' ? 'highlight-2' : 'highlight'; + } + + sliderPageUpdate(context: ChangeContext) { + const page = context.value; + + if (page > this.pageNum) { + this.pagingDirection = PAGING_DIRECTION.FORWARD; + } else { + this.pagingDirection = PAGING_DIRECTION.BACKWARDS; + } + + this.setPageNum(page); + this.refreshSlider.emit(); + this.render(); + } + + setPageNum(pageNum: number) { + this.pageNum = pageNum; + + if (this.pageNum >= this.maxPages - 10) { + // Tell server to cache the next chapter + if (this.nextChapterId > 0 && !this.nextChapterPrefetched) { + this.readerService.getChapterInfo(this.nextChapterId).pipe(take(1)).subscribe(res => { + this.nextChapterPrefetched = true; + }); + } + } else if (this.pageNum <= 10) { + if (this.prevChapterId > 0 && !this.prevChapterPrefetched) { + this.readerService.getChapterInfo(this.prevChapterId).pipe(take(1)).subscribe(res => { + this.prevChapterPrefetched = true; + }); + } + } + } + + goToPage(pageNum: number) { + let page = pageNum; + + if (page === undefined || this.pageNum === page) { return; } + + if (page > this.maxPages) { + page = this.maxPages; + } else if (page < 0) { + page = 0; + } + + if (!(page === 0 || page === this.maxPages - 1)) { + page -= 1; + } + + if (page > this.pageNum) { + this.pagingDirection = PAGING_DIRECTION.FORWARD; + } else { + this.pagingDirection = PAGING_DIRECTION.BACKWARDS; + } + + this.setPageNum(page); + this.render(); + } + + promptForPage() { + const goToPageNum = window.prompt('There are ' + this.maxPages + ' pages. What page would you like to go to?', ''); + if (goToPageNum === null || goToPageNum.trim().length === 0) { return null; } + return goToPageNum; + } + + toggleColorMode() { + switch(this.colorMode) { + case COLOR_FILTER.NONE: + this.colorMode = COLOR_FILTER.DARK; + break; + case COLOR_FILTER.DARK: + this.colorMode = COLOR_FILTER.SEPIA; + break; + case COLOR_FILTER.SEPIA: + this.colorMode = COLOR_FILTER.NONE; + break; + } + } + + toggleReaderMode() { + switch(this.readerMode) { + case READER_MODE.MANGA_LR: + this.readerMode = READER_MODE.MANGA_UD; + break; + case READER_MODE.MANGA_UD: + this.readerMode = READER_MODE.WEBTOON; + // Temp disable ability to use webtoon + //this.readerMode = READER_MODE.MANGA_LR; + break; + case READER_MODE.WEBTOON: + this.readerMode = READER_MODE.MANGA_LR; + break; + } + + this.updateForm(); + + this.render(); + } + + updateForm() { + if ( this.readerMode === READER_MODE.WEBTOON) { + this.generalSettingsForm.get('fittingOption')?.disable() + this.generalSettingsForm.get('pageSplitOption')?.disable(); + } else { + this.generalSettingsForm.get('fittingOption')?.enable() + this.generalSettingsForm.get('pageSplitOption')?.enable(); + } + } + + handleWebtoonPageChange(updatedPageNum: number) { + console.log('[MangaReader] Handling Page Change'); + + this.pageNum = updatedPageNum; + + this.readerService.bookmark(this.seriesId, this.volumeId, this.chapterId, this.pageNum).pipe(take(1)).subscribe(() => {/* No operation */}); + if (this.pageNum >= this.maxPages - 10) { + // Tell server to cache the next chapter + if (this.nextChapterId > 0 && !this.nextChapterPrefetched) { + this.readerService.getChapterInfo(this.nextChapterId).pipe(take(1)).subscribe(res => { + this.nextChapterPrefetched = true; + }); + } + } + } + + saveSettings() { + if (this.user === undefined) return; + + const data: Preferences = { + readingDirection: this.readingDirection, + scalingOption: this.scalingOption, + pageSplitOption: this.pageSplitOption, + autoCloseMenu: this.autoCloseMenu, + readerMode: this.readerMode, + + bookReaderDarkMode: this.user.preferences.bookReaderDarkMode, + bookReaderFontFamily: this.user.preferences.bookReaderFontFamily, + bookReaderFontSize: this.user.preferences.bookReaderFontSize, + bookReaderLineSpacing: this.user.preferences.bookReaderLineSpacing, + bookReaderMargin: this.user.preferences.bookReaderMargin, + bookReaderTapToPaginate: this.user.preferences.bookReaderTapToPaginate, + bookReaderReadingDirection: this.readingDirection, + + siteDarkMode: this.user.preferences.siteDarkMode, + }; + this.accountService.updatePreferences(data).pipe(take(1)).subscribe((updatedPrefs) => { + this.toastr.success('User settings updated'); + if (this.user) { + this.user.preferences = updatedPrefs; + } + this.resetSettings(); + }); + + } + + resetSettings() { + this.generalSettingsForm.get('fittingOption')?.value.get('fittingOption')?.setValue(this.translateScalingOption(this.user.preferences.scalingOption)); + this.generalSettingsForm.get('pageSplitOption')?.setValue(this.user.preferences.pageSplitOption + ''); + this.generalSettingsForm.get('autoCloseMenu')?.setValue(this.autoCloseMenu); + + this.updateForm(); + } +} diff --git a/UI/Web/src/app/manga-reader/manga-reader.module.ts b/UI/Web/src/app/manga-reader/manga-reader.module.ts new file mode 100644 index 000000000..69f6b4501 --- /dev/null +++ b/UI/Web/src/app/manga-reader/manga-reader.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MangaReaderComponent } from './manga-reader.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { NgbButtonsModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { MangaReaderRoutingModule } from './manga-reader.router.module'; +import { SharedModule } from '../shared/shared.module'; +import { NgxSliderModule } from '@angular-slider/ngx-slider'; +import { InfiniteScrollerComponent } from './infinite-scroller/infinite-scroller.component'; + +@NgModule({ + declarations: [ + MangaReaderComponent, + InfiniteScrollerComponent + ], + imports: [ + CommonModule, + MangaReaderRoutingModule, + ReactiveFormsModule, + + NgbButtonsModule, + NgbDropdownModule, + NgxSliderModule, + SharedModule, + ], + exports: [ + MangaReaderComponent + ] +}) +export class MangaReaderModule { } diff --git a/UI/Web/src/app/manga-reader/manga-reader.router.module.ts b/UI/Web/src/app/manga-reader/manga-reader.router.module.ts new file mode 100644 index 000000000..388f727b2 --- /dev/null +++ b/UI/Web/src/app/manga-reader/manga-reader.router.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { MangaReaderComponent } from './manga-reader.component'; + +const routes: Routes = [ + { + path: ':chapterId', + component: MangaReaderComponent + } +]; + + +@NgModule({ + imports: [RouterModule.forChild(routes), ], + exports: [RouterModule] +}) +export class MangaReaderRoutingModule { } diff --git a/UI/Web/src/app/nav-header/nav-header.component.html b/UI/Web/src/app/nav-header/nav-header.component.html new file mode 100644 index 000000000..aac0bffa8 --- /dev/null +++ b/UI/Web/src/app/nav-header/nav-header.component.html @@ -0,0 +1,80 @@ + + \ No newline at end of file diff --git a/UI/Web/src/app/nav-header/nav-header.component.scss b/UI/Web/src/app/nav-header/nav-header.component.scss new file mode 100644 index 000000000..c0d170b06 --- /dev/null +++ b/UI/Web/src/app/nav-header/nav-header.component.scss @@ -0,0 +1,68 @@ +@import '~bootstrap/scss/mixins/_breakpoints.scss'; + +$primary-color: white; +$bg-color: rgb(22, 27, 34); + +.navbar { + background-color: $bg-color; +} + +.navbar-brand { + font-family: "Spartan", sans-serif; + font-weight: bold; + + .logo { + max-height: 28px; + vertical-align: top; + } + + .phone-hidden { + vertical-align: middle; + } +} + +.focus-visible:focus { + visibility: visible; + color: white; +} + +.ng-autocomplete { + margin-bottom: 0px; + max-width: 400px; +} + +.primary-text { + color: $primary-color; + border: none; +} + +.search-result { + width: 24px; + margin-top: 5px; +} + +@include media-breakpoint-down(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) { + .ng-autocomplete { + width: 100%; // 232px + } +} + +/* Extra small devices (phones, 300px and down) */ +@media only screen and (max-width: 300px) { //370 + .ng-autocomplete { + max-width: 120px; + } +} + +.scroll-to-top:hover { + animation: MoveUpDown 1s linear infinite; +} + +@keyframes MoveUpDown { + 0%, 100% { + transform: translateY(0); + } + 50% { + transform: translateY(-10px); + } +} \ No newline at end of file diff --git a/UI/Web/src/app/nav-header/nav-header.component.ts b/UI/Web/src/app/nav-header/nav-header.component.ts new file mode 100644 index 000000000..1163d781e --- /dev/null +++ b/UI/Web/src/app/nav-header/nav-header.component.ts @@ -0,0 +1,101 @@ +import { DOCUMENT } from '@angular/common'; +import { Component, HostListener, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { SearchResult } from '../_models/search-result'; +import { AccountService } from '../_services/account.service'; +import { ImageService } from '../_services/image.service'; +import { LibraryService } from '../_services/library.service'; +import { NavService } from '../_services/nav.service'; + +@Component({ + selector: 'app-nav-header', + templateUrl: './nav-header.component.html', + styleUrls: ['./nav-header.component.scss'] +}) +export class NavHeaderComponent implements OnInit, OnDestroy { + + @ViewChild('search') searchViewRef!: any; + + isLoading = false; + debounceTime = 300; + imageStyles = {width: '24px', 'margin-top': '5px'}; + searchResults: SearchResult[] = []; + searchTerm = ''; + + + backToTopNeeded = false; + private readonly onDestroy = new Subject(); + + constructor(public accountService: AccountService, private router: Router, public navService: NavService, + private libraryService: LibraryService, public imageService: ImageService, @Inject(DOCUMENT) private document: Document) { } + + ngOnInit(): void { + this.navService.darkMode$.pipe(takeUntil(this.onDestroy)).subscribe(res => { + if (res) { + this.document.body.classList.remove('bg-light'); + this.document.body.classList.add('bg-dark'); + } else { + this.document.body.classList.remove('bg-dark'); + this.document.body.classList.add('bg-light'); + } + }); + } + + @HostListener("window:scroll", []) + checkBackToTopNeeded() { + const offset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; + if (offset > 100) { + this.backToTopNeeded = true; + } else if (offset < 40) { + this.backToTopNeeded = false; + } + } + + ngOnDestroy() { + this.onDestroy.next(); + this.onDestroy.complete(); + } + + logout() { + this.accountService.logout(); + this.navService.hideNavBar(); + this.router.navigateByUrl('/home'); + } + + moveFocus() { + document.getElementById('content')?.focus(); + } + + onChangeSearch(val: string) { + this.isLoading = true; + this.searchTerm = val; + this.libraryService.search(val).pipe(takeUntil(this.onDestroy)).subscribe(results => { + this.searchResults = results; + this.isLoading = false; + }, err => { + this.searchResults = []; + this.isLoading = false; + this.searchTerm = ''; + }); + } + + clickSearchResult(item: SearchResult) { + const libraryId = item.libraryId; + const seriesId = item.seriesId; + this.searchViewRef.clear(); + this.searchResults = []; + this.searchTerm = ''; + this.router.navigate(['library', libraryId, 'series', seriesId]); + } + + scrollToTop() { + window.scroll({ + top: 0, + behavior: 'smooth' + }); + } + + +} diff --git a/UI/Web/src/app/not-connected/not-connected.component.html b/UI/Web/src/app/not-connected/not-connected.component.html new file mode 100644 index 000000000..17b9250c8 --- /dev/null +++ b/UI/Web/src/app/not-connected/not-connected.component.html @@ -0,0 +1,3 @@ +
+

Oops! Looks like the server is not online.

+
\ No newline at end of file diff --git a/UI/Web/src/app/not-connected/not-connected.component.scss b/UI/Web/src/app/not-connected/not-connected.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/not-connected/not-connected.component.ts b/UI/Web/src/app/not-connected/not-connected.component.ts new file mode 100644 index 000000000..70b019fa2 --- /dev/null +++ b/UI/Web/src/app/not-connected/not-connected.component.ts @@ -0,0 +1,26 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { MemberService } from '../_services/member.service'; + +@Component({ + selector: 'app-not-connected', + templateUrl: './not-connected.component.html', + styleUrls: ['./not-connected.component.scss'] +}) +export class NotConnectedComponent implements OnInit { + constructor(private memberService: MemberService, private router: Router) { } + + ngOnInit(): void { + // We make a call to backend on refresh so that if it's up, we can redirect to /home + this.memberService.adminExists().subscribe((exists) => { + const pageResume = localStorage.getItem('kavita--no-connection-url'); + if (pageResume && pageResume !== '/no-connection') { + localStorage.setItem('kavita--no-connection-url', ''); + this.router.navigateByUrl(pageResume); + } else { + this.router.navigateByUrl('/home'); + } + }); + } + +} diff --git a/UI/Web/src/app/person-badge/person-badge.component.html b/UI/Web/src/app/person-badge/person-badge.component.html new file mode 100644 index 000000000..fd12496d4 --- /dev/null +++ b/UI/Web/src/app/person-badge/person-badge.component.html @@ -0,0 +1,12 @@ +
+ +
+ +
+
+ +
+ +
+
+
\ No newline at end of file diff --git a/UI/Web/src/app/person-badge/person-badge.component.scss b/UI/Web/src/app/person-badge/person-badge.component.scss new file mode 100644 index 000000000..c3c50f725 --- /dev/null +++ b/UI/Web/src/app/person-badge/person-badge.component.scss @@ -0,0 +1,24 @@ +@import '../../theme/colors'; + +$bg-color: #c9c9c9; +$bdr-color: #f2f2f2; + +::ng-deep .badge { + background-color: $bg-color; + transition: all .3s ease-out; + margin: 3px 5px 3px 0px; + padding: 2px 15px; + border-radius: 6px; + font-size: 14px; + border: 1px solid $bdr-color; + display: inline-block; + + i { + color: $primary-color; + font-size: 14px; + font-weight: bold; + margin-left: 10px; + margin-right: 0px; + cursor: pointer; + } +} \ No newline at end of file diff --git a/UI/Web/src/app/person-badge/person-badge.component.ts b/UI/Web/src/app/person-badge/person-badge.component.ts new file mode 100644 index 000000000..a91c513b6 --- /dev/null +++ b/UI/Web/src/app/person-badge/person-badge.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-person-badge', + templateUrl: './person-badge.component.html', + styleUrls: ['./person-badge.component.scss'] +}) +export class PersonBadgeComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/UI/Web/src/app/recently-added/recently-added.component.html b/UI/Web/src/app/recently-added/recently-added.component.html new file mode 100644 index 000000000..29ec803fb --- /dev/null +++ b/UI/Web/src/app/recently-added/recently-added.component.html @@ -0,0 +1,12 @@ + + + + + + + diff --git a/UI/Web/src/app/recently-added/recently-added.component.scss b/UI/Web/src/app/recently-added/recently-added.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/recently-added/recently-added.component.ts b/UI/Web/src/app/recently-added/recently-added.component.ts new file mode 100644 index 000000000..8df490b6f --- /dev/null +++ b/UI/Web/src/app/recently-added/recently-added.component.ts @@ -0,0 +1,54 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Pagination } from '../_models/pagination'; +import { Series } from '../_models/series'; +import { SeriesService } from '../_services/series.service'; + +/** + * This component is used as a standard layout for any card detail. ie) series, in-progress, collections, etc. + */ +@Component({ + selector: 'app-recently-added', + templateUrl: './recently-added.component.html', + styleUrls: ['./recently-added.component.scss'] +}) +export class RecentlyAddedComponent implements OnInit { + + isLoading: boolean = true; + recentlyAdded: Series[] = []; + pagination!: Pagination; + libraryId!: number; + + constructor(private router: Router, private route: ActivatedRoute, private seriesService: SeriesService) { + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + } + + ngOnInit() { + this.loadPage(); + } + + seriesClicked(series: Series) { + this.router.navigate(['library', this.libraryId, 'series', series.id]); + } + + onPageChange(pagination: Pagination) { + this.router.navigate(['recently-added'], {replaceUrl: true, queryParamsHandling: 'merge', queryParams: {page: this.pagination.currentPage} }); + } + + loadPage() { + const page = this.route.snapshot.queryParamMap.get('page'); + if (page != null) { + if (this.pagination === undefined || this.pagination === null) { + this.pagination = {currentPage: 0, itemsPerPage: 30, totalItems: 0, totalPages: 1}; + } + this.pagination.currentPage = parseInt(page, 10); + } + this.isLoading = true; + this.seriesService.getRecentlyAdded(this.libraryId, this.pagination?.currentPage, this.pagination?.itemsPerPage).subscribe(series => { + this.recentlyAdded = series.result; + this.pagination = series.pagination; + this.isLoading = false; + window.scrollTo(0, 0); + }); + } +} diff --git a/UI/Web/src/app/series-detail/series-detail.component.html b/UI/Web/src/app/series-detail/series-detail.component.html new file mode 100644 index 000000000..77cb67133 --- /dev/null +++ b/UI/Web/src/app/series-detail/series-detail.component.html @@ -0,0 +1,124 @@ +
+
+
+ +
+
+

{{series?.name}}

+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+
Genres
+
+
+ {{genre}} +
+
+
+
+
Collections
+
+
+ + {{tag.title}} + +
+
+
+
+
People
+
+
+ +
{{person.name}}
+
{{person.role}}
+
+
+
+
+
+
+
+ + +
+ +
+
+ +
+
+ +
+
+
\ No newline at end of file diff --git a/UI/Web/src/app/series-detail/series-detail.component.scss b/UI/Web/src/app/series-detail/series-detail.component.scss new file mode 100644 index 000000000..d154833cf --- /dev/null +++ b/UI/Web/src/app/series-detail/series-detail.component.scss @@ -0,0 +1,30 @@ +@import '~bootstrap/scss/mixins/_breakpoints.scss'; + + +.user-review { + font-style: italic; + +} + +.poster { + width: 100%; +} + +.rating-star { + margin-top: 2px; + font-size: 1.5rem; +} + + +// Including breakpoint has issue with resovling variable, so copying gridpoints here +@include media-breakpoint-down(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) { + .poster { + display: none; + } +} + +@include media-breakpoint-down(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) { + .read-btn--text { + display: none; + } +} diff --git a/UI/Web/src/app/series-detail/series-detail.component.ts b/UI/Web/src/app/series-detail/series-detail.component.ts new file mode 100644 index 000000000..dcfd9b5e2 --- /dev/null +++ b/UI/Web/src/app/series-detail/series-detail.component.ts @@ -0,0 +1,416 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { NgbModal, NgbRatingConfig } from '@ng-bootstrap/ng-bootstrap'; +import { ToastrService } from 'ngx-toastr'; +import { forkJoin } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { ConfirmConfig } from '../shared/confirm-dialog/_models/confirm-config'; +import { ConfirmService } from '../shared/confirm.service'; +import { CardDetailsModalComponent } from '../shared/_modals/card-details-modal/card-details-modal.component'; +import { DownloadService } from '../shared/_services/download.service'; +import { NaturalSortService } from '../shared/_services/natural-sort.service'; +import { UtilityService } from '../shared/_services/utility.service'; +import { EditSeriesModalComponent } from '../_modals/edit-series-modal/edit-series-modal.component'; +import { ReviewSeriesModalComponent } from '../_modals/review-series-modal/review-series-modal.component'; +import { Chapter } from '../_models/chapter'; +import { LibraryType } from '../_models/library'; +import { Series } from '../_models/series'; +import { SeriesMetadata } from '../_models/series-metadata'; +import { Volume } from '../_models/volume'; +import { AccountService } from '../_services/account.service'; +import { ActionItem, ActionFactoryService, Action } from '../_services/action-factory.service'; +import { ActionService } from '../_services/action.service'; +import { ImageService } from '../_services/image.service'; +import { LibraryService } from '../_services/library.service'; +import { ReaderService } from '../_services/reader.service'; +import { SeriesService } from '../_services/series.service'; + + +@Component({ + selector: 'app-series-detail', + templateUrl: './series-detail.component.html', + styleUrls: ['./series-detail.component.scss'] +}) +export class SeriesDetailComponent implements OnInit { + + series!: Series; + volumes: Volume[] = []; + chapters: Chapter[] = []; + libraryId = 0; + isAdmin = false; + hasDownloadingRole = false; + isLoading = true; + showBook = true; + + currentlyReadingChapter: Chapter | undefined = undefined; + hasReadingProgress = false; + + + seriesActions: ActionItem[] = []; + volumeActions: ActionItem[] = []; + chapterActions: ActionItem[] = []; + + hasSpecials = false; + specials: Array = []; + activeTabId = 2; + hasNonSpecialVolumeChapters = true; + + seriesSummary: string = ''; + userReview: string = ''; + libraryType: LibraryType = LibraryType.Manga; + seriesMetadata: SeriesMetadata | null = null; + + /** + * If an action is currently being done, don't let the user kick off another action + */ + actionInProgress: boolean = false; + + + get LibraryType(): typeof LibraryType { + return LibraryType; + } + + constructor(private route: ActivatedRoute, private seriesService: SeriesService, + ratingConfig: NgbRatingConfig, private router: Router, + private modalService: NgbModal, public readerService: ReaderService, + private utilityService: UtilityService, private toastr: ToastrService, + private accountService: AccountService, public imageService: ImageService, + private actionFactoryService: ActionFactoryService, private libraryService: LibraryService, + private confirmService: ConfirmService, private naturalSort: NaturalSortService, + private downloadService: DownloadService, private actionService: ActionService) { + ratingConfig.max = 5; + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + if (user) { + this.isAdmin = this.accountService.hasAdminRole(user); + this.hasDownloadingRole = this.accountService.hasDownloadRole(user); + } + }); + } + + ngOnInit(): void { + const routeId = this.route.snapshot.paramMap.get('seriesId'); + const libraryId = this.route.snapshot.paramMap.get('libraryId'); + if (routeId === null || libraryId == null) { + this.router.navigateByUrl('/home'); + return; + } + + this.seriesActions = this.actionFactoryService.getSeriesActions(this.handleSeriesActionCallback.bind(this)).filter(action => action.action !== Action.Edit); + this.volumeActions = this.actionFactoryService.getVolumeActions(this.handleVolumeActionCallback.bind(this)); + this.chapterActions = this.actionFactoryService.getChapterActions(this.handleChapterActionCallback.bind(this)); + + + const seriesId = parseInt(routeId, 10); + this.libraryId = parseInt(libraryId, 10); + this.seriesService.getMetadata(seriesId).subscribe(metadata => { + this.seriesMetadata = metadata; + }); + this.libraryService.getLibraryType(this.libraryId).subscribe(type => { + this.libraryType = type; + this.loadSeries(seriesId); + }); + } + + handleSeriesActionCallback(action: Action, series: Series) { + this.actionInProgress = true; + switch(action) { + case(Action.MarkAsRead): + this.actionService.markSeriesAsRead(series, (series: Series) => { + this.actionInProgress = false; + this.loadSeries(series.id); + }); + break; + case(Action.MarkAsUnread): + this.actionService.markSeriesAsUnread(series, (series: Series) => { + this.actionInProgress = false; + this.loadSeries(series.id); + }); + break; + case(Action.ScanLibrary): + this.actionService.scanSeries(series, (series) => this.actionInProgress = false); + break; + case(Action.RefreshMetadata): + this.actionService.refreshMetdata(series, (series) => this.actionInProgress = false); + break; + case(Action.Delete): + this.deleteSeries(series); + break; + default: + break; + } + } + + handleVolumeActionCallback(action: Action, volume: Volume) { + switch(action) { + case(Action.MarkAsRead): + this.markAsRead(volume); + break; + case(Action.MarkAsUnread): + this.markAsUnread(volume); + break; + case(Action.Info): + this.openViewInfo(volume); + break; + case(Action.Download): + this.downloadService.downloadVolume(volume, this.series.name); + break; + default: + break; + } + } + + handleChapterActionCallback(action: Action, chapter: Chapter) { + switch (action) { + case(Action.MarkAsRead): + this.markChapterAsRead(chapter); + break; + case(Action.MarkAsUnread): + this.markChapterAsUnread(chapter); + break; + case(Action.Info): + this.openViewInfo(chapter); + break; + case(Action.Download): + this.downloadService.downloadChapter(chapter, this.series.name); + break; + default: + break; + } + } + + + async deleteSeries(series: Series) { + if (!await this.confirmService.confirm('Are you sure you want to delete this series? It will not modify files on disk.')) { + this.actionInProgress = false; + return; + } + + this.seriesService.delete(series.id).subscribe((res: boolean) => { + if (res) { + this.toastr.success('Series deleted'); + this.router.navigate(['library', this.libraryId]); + } + this.actionInProgress = false; + }); + } + + markSeriesAsUnread(series: Series) { + this.seriesService.markUnread(series.id).subscribe(res => { + this.toastr.success(series.name + ' is now unread'); + series.pagesRead = 0; + this.loadSeries(series.id); + }); + } + + markSeriesAsRead(series: Series) { + this.seriesService.markRead(series.id).subscribe(res => { + series.pagesRead = series.pages; + this.toastr.success(series.name + ' is now read'); + this.loadSeries(series.id); + }); + } + + loadSeries(seriesId: number) { + this.seriesService.getMetadata(seriesId).subscribe(metadata => { + this.seriesMetadata = metadata; + }); + this.seriesService.getSeries(seriesId).subscribe(series => { + this.series = series; + this.createHTML(); + + + this.seriesService.getVolumes(this.series.id).subscribe(volumes => { + this.chapters = volumes.filter(v => v.number === 0).map(v => v.chapters || []).flat().sort(this.utilityService.sortChapters); + this.volumes = volumes.sort(this.utilityService.sortVolumes); + + this.setContinuePoint(); + const vol0 = this.volumes.filter(v => v.number === 0); + this.hasSpecials = vol0.map(v => v.chapters || []).flat().sort(this.utilityService.sortChapters).filter(c => c.isSpecial || isNaN(parseInt(c.range, 10))).length > 0 ; + if (this.hasSpecials) { + this.specials = vol0.map(v => v.chapters || []) + .flat() + .filter(c => c.isSpecial || isNaN(parseInt(c.range, 10))) + .sort((a, b) => this.naturalSort.compare(a.range, b.range, true)) + .map(c => { + c.title = this.utilityService.cleanSpecialTitle(c.title); + c.range = this.utilityService.cleanSpecialTitle(c.range); + return c; + }); + } + + if (this.volumes.filter(v => v.number !== 0).length === 0 && this.chapters.filter(c => !c.isSpecial).length === 0 && this.specials.length > 0) { + this.activeTabId = 1; + this.hasNonSpecialVolumeChapters = false; + } + + this.isLoading = false; + }); + }); + } + + createHTML() { + this.seriesSummary = (this.series.summary === null ? '' : this.series.summary).replace(/\n/g, '
'); + this.userReview = (this.series.userReview === null ? '' : this.series.userReview).replace(/\n/g, '
'); + } + + setContinuePoint() { + this.hasReadingProgress = this.volumes.filter(v => v.pagesRead > 0).length > 0 || this.chapters.filter(c => c.pagesRead > 0).length > 0; + this.currentlyReadingChapter = this.readerService.getCurrentChapter(this.volumes); + } + + markAsRead(vol: Volume) { + if (this.series === undefined) { + return; + } + const seriesId = this.series.id; + + this.actionService.markVolumeAsRead(seriesId, vol, (volume) => { + this.setContinuePoint(); + this.actionInProgress = false; + }); + } + + markAsUnread(vol: Volume) { + if (this.series === undefined) { + return; + } + const seriesId = this.series.id; + + this.actionService.markVolumeAsUnread(seriesId, vol, (volume) => { + this.setContinuePoint(); + this.actionInProgress = false; + }); + } + + markChapterAsRead(chapter: Chapter) { + if (this.series === undefined) { + return; + } + const seriesId = this.series.id; + + this.actionService.markChapterAsRead(seriesId, chapter, (chapter) => { + this.setContinuePoint(); + this.actionInProgress = false; + }); + } + + markChapterAsUnread(chapter: Chapter) { + if (this.series === undefined) { + return; + } + const seriesId = this.series.id; + + this.actionService.markChapterAsUnread(seriesId, chapter, (chapter) => { + this.setContinuePoint(); + this.actionInProgress = false; + }); + } + + read() { + if (this.currentlyReadingChapter !== undefined) { this.openChapter(this.currentlyReadingChapter); } + } + + updateRating(rating: any) { + if (this.series === undefined) { + return; + } + + this.seriesService.updateRating(this.series?.id, this.series?.userRating, this.series?.userReview).subscribe(() => { + this.createHTML(); + }); + } + + openChapter(chapter: Chapter) { + if (chapter.pages === 0) { + this.toastr.error('There are no pages. Kavita was not able to read this archive.'); + return; + } + if (this.libraryType === LibraryType.Book) { + this.router.navigate(['library', this.libraryId, 'series', this.series?.id, 'book', chapter.id]); + } else { + this.router.navigate(['library', this.libraryId, 'series', this.series?.id, 'manga', chapter.id]); + } + } + + openVolume(volume: Volume) { + if (volume.chapters === undefined || volume.chapters?.length === 0) { + this.toastr.error('There are no chapters to this volume. Cannot read.'); + return; + } + // NOTE: When selecting a volume, we might want to ask the user which chapter they want or an "Automatic" option. For Volumes + // made up of lots of chapter files, it makes it more versitile. The modal can have pages read / pages with colored background + // to help the user make a good choice. + + // If user has progress on the volume, load them where they left off + if (volume.pagesRead < volume.pages && volume.pagesRead > 0) { + // Find the continue point chapter and load it + this.openChapter(this.readerService.getCurrentChapter([volume])); + return; + } + + // Sort the chapters, then grab first if no reading progress + this.openChapter([...volume.chapters].sort(this.utilityService.sortChapters)[0]); + } + + isNullOrEmpty(val: string) { + return val === null || val === undefined || val === ''; + } + + openViewInfo(data: Volume | Chapter) { + const modalRef = this.modalService.open(CardDetailsModalComponent, { size: 'lg', scrollable: true }); + modalRef.componentInstance.data = data; + modalRef.componentInstance.parentName = this.series?.name; + modalRef.componentInstance.seriesId = this.series?.id; + } + + openEditSeriesModal() { + const modalRef = this.modalService.open(EditSeriesModalComponent, { scrollable: true, size: 'lg', windowClass: 'scrollable-modal' }); + modalRef.componentInstance.series = this.series; + modalRef.closed.subscribe((closeResult: {success: boolean, series: Series}) => { + window.scrollTo(0, 0); + if (closeResult.success) { + this.loadSeries(this.series.id); + } + }); + } + + async promptToReview() { + const shouldPrompt = this.isNullOrEmpty(this.series.userReview); + const config = new ConfirmConfig(); + config.header = 'Confirm'; + config.content = 'Do you want to write a review?'; + config.buttons.push({text: 'No', type: 'secondary'}); + config.buttons.push({text: 'Yes', type: 'primary'}); + if (shouldPrompt && await this.confirmService.confirm('Do you want to write a review?', config)) { + this.openReviewModal(); + } + } + + openReviewModal(force = false) { + const modalRef = this.modalService.open(ReviewSeriesModalComponent, { scrollable: true, size: 'lg' }); + modalRef.componentInstance.series = this.series; + modalRef.closed.subscribe((closeResult: {success: boolean, review: string, rating: number}) => { + if (closeResult.success && this.series !== undefined) { + this.series.userReview = closeResult.review; + this.series.userRating = closeResult.rating; + this.createHTML(); + } + }); + } + + preventClick(event: any) { + event.stopPropagation(); + event.preventDefault(); + } + + performAction(action: ActionItem) { + if (typeof action.callback === 'function') { + action.callback(action.action, this.series); + } + } + + downloadSeries() { + this.downloadService.downloadSeries(this.series); + } +} diff --git a/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.html b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.html new file mode 100644 index 000000000..4accea74d --- /dev/null +++ b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.html @@ -0,0 +1,65 @@ +
+ + + +
+ + diff --git a/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.scss b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.scss new file mode 100644 index 000000000..fc518f8b9 --- /dev/null +++ b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.scss @@ -0,0 +1,3 @@ +.scrollable-modal { + max-height: 600px; +} \ No newline at end of file diff --git a/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts new file mode 100644 index 000000000..4db350a9a --- /dev/null +++ b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts @@ -0,0 +1,66 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { Chapter } from 'src/app/_models/chapter'; +import { MangaFile } from 'src/app/_models/manga-file'; +import { MangaFormat } from 'src/app/_models/manga-format'; +import { Volume } from 'src/app/_models/volume'; +import { ImageService } from 'src/app/_services/image.service'; +import { NaturalSortService } from '../../_services/natural-sort.service'; +import { UtilityService } from '../../_services/utility.service'; + + + +@Component({ + selector: 'app-card-details-modal', + templateUrl: './card-details-modal.component.html', + styleUrls: ['./card-details-modal.component.scss'] +}) +export class CardDetailsModalComponent implements OnInit { + + @Input() parentName = ''; + @Input() seriesId: number = 0; + @Input() data!: any; // Volume | Chapter + isChapter = false; + chapters: Chapter[] = []; + seriesVolumes: any[] = []; + isLoadingVolumes = false; + formatKeys = Object.keys(MangaFormat); + + constructor(private modalService: NgbModal, public modal: NgbActiveModal, public utilityService: UtilityService, + public imageService: ImageService, public naturalSort: NaturalSortService) { } + + ngOnInit(): void { + this.isChapter = this.isObjectChapter(this.data); + + if (this.isChapter) { + this.chapters.push(this.data); + } else if (!this.isChapter) { + this.chapters.push(...this.data?.chapters); + } + this.chapters.sort(this.utilityService.sortChapters); + // Try to show an approximation of the reading order for files + var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'}); + this.chapters.forEach((c: Chapter) => { + c.files.sort((a: MangaFile, b: MangaFile) => collator.compare(a.filePath, b.filePath)); + }); + } + + isObjectChapter(object: any): object is Chapter { + return ('files' in object); + } + + isObjectVolume(object: any): object is Volume { + return !('originalName' in object) && !('files' in object); + } + + close() { + this.modal.close(); + } + + formatChapterNumber(chapter: Chapter) { + if (chapter.number === '0') { + return '1'; + } + return chapter.number; + } +} diff --git a/UI/Web/src/app/shared/_services/dom-helper.service.ts b/UI/Web/src/app/shared/_services/dom-helper.service.ts new file mode 100644 index 000000000..0f0344b5f --- /dev/null +++ b/UI/Web/src/app/shared/_services/dom-helper.service.ts @@ -0,0 +1,200 @@ +import { ElementRef, Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class DomHelperService { + + constructor() {} + // from: https://stackoverflow.com/questions/40597658/equivalent-of-angular-equals-in-angular2#44649659 + deepEquals(x: any, y: any) { + if (x === y) { + return true; // if both x and y are null or undefined and exactly the same + } else if (!(x instanceof Object) || !(y instanceof Object)) { + return false; // if they are not strictly equal, they both need to be Objects + } else if (x.constructor !== y.constructor) { + // they must have the exact same prototype chain, the closest we can do is + // test their constructor. + return false; + } else { + for (const p in x) { + if (!x.hasOwnProperty(p)) { + continue; // other properties were tested using x.constructor === y.constructor + } + if (!y.hasOwnProperty(p)) { + return false; // allows to compare x[ p ] and y[ p ] when set to undefined + } + if (x[p] === y[p]) { + continue; // if they have the same strict value or identity then they are equal + } + if (typeof (x[p]) !== 'object') { + return false; // Numbers, Strings, Functions, Booleans must be strictly equal + } + if (!this.deepEquals(x[p], y[p])) { + return false; + } + } + for (const p in y) { + if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) { + return false; + } + } + return true; + } + } + + isHidden(node: ElementRef){ + const el = node.nativeElement?node.nativeElement:node; + const elemStyle = window.getComputedStyle(el); + + return el.style.display === 'none' || elemStyle.visibility === 'hidden' || el.hasAttribute('hidden') || elemStyle.display === 'none'; + } + + isTabable(node: ElementRef): boolean { + const el = node.nativeElement?node.nativeElement:node; + const tagName = el.tagName; + + if(this.isHidden(node)){ + return false; + } + // el.attribute:NamdedNodeMap + if (el.attributes.hasOwnProperty('tabindex')) { + return (parseInt(el.attributes.getNamedItem('tabindex'),10) >= 0); + } + if (tagName === 'A' || tagName === 'AREA' || tagName === 'BUTTON' || tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') { + if (tagName === 'A' || tagName === 'AREA') { + return (el.attributes.getNamedItem('href') !== ''); + } + return !el.attributes.hasOwnProperty('disabled'); // TODO: check for cases when: disabled="true" and disabled="false" + } + return false; + } + + private isValidChild(child: any): boolean { // child:ElementRef.nativeElement + return child.nodeType == 1 && child.nodeName != 'SCRIPT' && child.nodeName != 'STYLE'; + } + + private hasValidParent(obj: any) { // obj:ElementRef.nativeElement + return (this.isValidChild(obj) && obj.parentElement.nodeName !== 'BODY'); + } + + private traverse(obj: any, fromTop: boolean): ElementRef | undefined | boolean { + // obj:ElementRef||ElementRef.nativeElement + var obj = obj? (obj.nativeElement?obj.nativeElement:obj) : document.getElementsByTagName('body')[0]; + if (this.isValidChild(obj) && this.isTabable(obj)) { + return obj; + } + // If object is hidden, skip it's children + if (this.isValidChild(obj) && this.isHidden(obj)) { + return undefined; + } + // If object is hidden, skip it's children + if (obj.classList && obj.classList.contains('ng-hide')) { // some nodes don't have classList?! + return false; + } + if (obj.hasChildNodes()) { + var child; + if (fromTop) { + child = obj.firstChild; + } else { + child = obj.lastChild; + } + while(child) { + var res = this.traverse(child, fromTop); + if(res){ + return res; + } + else{ + if (fromTop) { + child = child.nextSibling; + } else { + child = child.previousSibling; + } + } + } + } + else{ + return undefined; + } + } + previousElement(el: any, isFocusable: boolean): any { // ElementRef | undefined | boolean + + var elem = el.nativeElement ? el.nativeElement : el; + if (el.hasOwnProperty('length')) { + elem = el[0]; + } + + var parent = elem.parentElement; + var previousElem = undefined; + + if(isFocusable) { + if (this.hasValidParent(elem)) { + var siblings = parent.children; + if (siblings.length > 0) { + // Good practice to splice out the elem from siblings if there, saving some time. + // We allow for a quick check for jumping to parent first before removing. + if (siblings[0] === elem) { + // If we are looking at immidiate parent and elem is first child, we need to go higher + var e = this.previousElement(elem.parentNode, isFocusable); + if (this.isTabable(e)) { + return e; + } + } else { + // I need to filter myself and any nodes next to me from the siblings + var indexOfElem = Array.prototype.indexOf.call(siblings, elem); + const that = this; + siblings = Array.prototype.filter.call(siblings, function(item, itemIndex) { + if (!that.deepEquals(elem, item) && itemIndex < indexOfElem) { + return true; + } + }); + } + // We need to search backwards + for (var i = 0; i <= siblings.length-1; i++) {//for (var i = siblings.length-1; i >= 0; i--) { + var ret = this.traverse(siblings[i], false); + if (ret !== undefined) { + return ret; + } + } + + var e = this.previousElement(elem.parentNode, isFocusable); + if (this.isTabable(e)) { + return e; + } + } + } + } else { + var siblings = parent.children; + if (siblings.length > 1) { + // Since indexOf is on Array.prototype and parent.children is a NodeList, we have to use call() + var index = Array.prototype.indexOf.call(siblings, elem); + previousElem = siblings[index-1]; + } + } + return previousElem; + }; + lastTabableElement(el: any) { + /* This will return the first tabable element from the parent el */ + var elem = el.nativeElement?el.nativeElement:el; + if (el.hasOwnProperty('length')) { + elem = el[0]; + } + + return this.traverse(elem, false); + }; + + firstTabableElement(el: any) { + /* This will return the first tabable element from the parent el */ + var elem = el.nativeElement ? el.nativeElement : el; + if (el.hasOwnProperty('length')) { + elem = el[0]; + } + + return this.traverse(elem, true); + }; + + isInDOM(obj: Node) { + return document.documentElement.contains(obj); + } + +} diff --git a/UI/Web/src/app/shared/_services/download.service.ts b/UI/Web/src/app/shared/_services/download.service.ts new file mode 100644 index 000000000..29701597d --- /dev/null +++ b/UI/Web/src/app/shared/_services/download.service.ts @@ -0,0 +1,124 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Series } from 'src/app/_models/series'; +import { environment } from 'src/environments/environment'; +import { ConfirmService } from '../confirm.service'; +import { saveAs } from 'file-saver'; +import { Chapter } from 'src/app/_models/chapter'; +import { Volume } from 'src/app/_models/volume'; +import { ToastrService } from 'ngx-toastr'; + +@Injectable({ + providedIn: 'root' +}) +export class DownloadService { + + private baseUrl = environment.apiUrl; + /** + * Size in bytes in which to inform the user for confirmation before download starts. Defaults to 100 MB. + */ + public SIZE_WARNING = 104_857_600; + + constructor(private httpClient: HttpClient, private confirmService: ConfirmService, private toastr: ToastrService) { } + + + private downloadSeriesSize(seriesId: number) { + return this.httpClient.get(this.baseUrl + 'download/series-size?seriesId=' + seriesId); + } + + private downloadVolumeSize(volumeId: number) { + return this.httpClient.get(this.baseUrl + 'download/volume-size?volumeId=' + volumeId); + } + + private downloadChapterSize(chapterId: number) { + return this.httpClient.get(this.baseUrl + 'download/chapter-size?chapterId=' + chapterId); + } + + private downloadSeriesAPI(seriesId: number) { + return this.httpClient.get(this.baseUrl + 'download/series?seriesId=' + seriesId, {responseType: 'blob' as 'text'}); + } + + private downloadVolumeAPI(volumeId: number) { + return this.httpClient.get(this.baseUrl + 'download/volume?volumeId=' + volumeId, {responseType: 'blob' as 'text'}); + } + + private downloadChapterAPI(chapterId: number) { + return this.httpClient.get(this.baseUrl + 'download/chapter?chapterId=' + chapterId, {responseType: 'blob' as 'text'}); + } + + downloadSeries(series: Series) { + this.downloadSeriesSize(series.id).subscribe(async size => { + if (size >= this.SIZE_WARNING && !await this.confirmService.confirm('The series is ' + this.humanFileSize(size) + '. Are you sure you want to continue?')) { + return; + } + this.downloadSeriesAPI(series.id).subscribe(res => { + const filename = series.name + '.zip'; + this.preformSave(res, filename); + }); + }); + } + + downloadChapter(chapter: Chapter, seriesName: string) { + this.downloadChapterSize(chapter.id).subscribe(async size => { + if (size >= this.SIZE_WARNING && !await this.confirmService.confirm('The chapter is ' + this.humanFileSize(size) + '. Are you sure you want to continue?')) { + return; + } + this.downloadChapterAPI(chapter.id).subscribe(res => { + const filename = seriesName + ' - Chapter ' + chapter.number + '.zip'; + this.preformSave(res, filename); + }); + }); + } + + downloadVolume(volume: Volume, seriesName: string) { + this.downloadVolumeSize(volume.id).subscribe(async size => { + if (size >= this.SIZE_WARNING && !await this.confirmService.confirm('The chapter is ' + this.humanFileSize(size) + '. Are you sure you want to continue?')) { + return; + } + this.downloadVolumeAPI(volume.id).subscribe(res => { + const filename = seriesName + ' - Volume ' + volume.name + '.zip'; + this.preformSave(res, filename); + }); + }); + } + + private preformSave(res: string, filename: string) { + const blob = new Blob([res], {type: 'text/plain;charset=utf-8'}); + saveAs(blob, filename); + this.toastr.success('File downloaded successfully: ' + filename); + } + + /** + * Format bytes as human-readable text. + * + * @param bytes Number of bytes. + * @param si True to use metric (SI) units, aka powers of 1000. False to use + * binary (IEC), aka powers of 1024. + * @param dp Number of decimal places to display. + * + * @return Formatted string. + * + * Credit: https://stackoverflow.com/questions/10420352/converting-file-size-in-bytes-to-human-readable-string + */ + private humanFileSize(bytes: number, si=true, dp=0) { + const thresh = si ? 1000 : 1024; + + if (Math.abs(bytes) < thresh) { + return bytes + ' B'; + } + + const units = si + ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] + : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']; + let u = -1; + const r = 10**dp; + + do { + bytes /= thresh; + ++u; + } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1); + + + return bytes.toFixed(dp) + ' ' + units[u]; + } +} diff --git a/UI/Web/src/app/shared/_services/natural-sort.service.ts b/UI/Web/src/app/shared/_services/natural-sort.service.ts new file mode 100644 index 000000000..4c9ddd180 --- /dev/null +++ b/UI/Web/src/app/shared/_services/natural-sort.service.ts @@ -0,0 +1,69 @@ +import { Injectable, OnDestroy } from '@angular/core'; + +/** + * Soley repsonsible for performing a "natural" sort. This is the UI counterpart to the BE NaturalSortComparer. + */ +@Injectable({ + providedIn: 'root', +}) +export class NaturalSortService implements OnDestroy { + + private _table: Map = new Map(); + + ngOnDestroy(): void { + this._table = new Map(); + } + + private partCompare(left: string, right: string) { + + let x = parseInt(left, 10); + if (typeof x !== 'number') { + return left > right; + } + + let y = parseInt(right, 10); + if (typeof y !== 'number') { + return left > right; + } + + if (x === null || x === undefined) { + return 1; + } + if (y === null || y === undefined) { + return -1; + } + + return x > y; + } + + compare(x: string, y: string, isAscending: boolean) { + if (x == y) return 0; + + let x1 = this._table.get(x); + if (x1 === undefined) { + x1 = x.split(/([0-9]+)/); + this._table.set(x, x1); + } + + let y1 = this._table.get(y); + if (y1 === undefined) { + y1 = y.split(/([0-9]+)/); + this._table.set(y, y1); + } + + let returnVal = 0; + for (var i = 0; i < x1.length && i < y1.length; i++) { + if (x1[i] == y1[i]) continue; + returnVal = (this.partCompare(x1[i], y1[i]) ? 1 : 0); + return isAscending ? returnVal : -returnVal; + } + + if (y1.length > x1.length) { + returnVal = 1; + } else if (x1.length > y1.length) { + returnVal = -1; + } + + return isAscending ? returnVal : -returnVal; + } +} diff --git a/UI/Web/src/app/shared/_services/utility.service.ts b/UI/Web/src/app/shared/_services/utility.service.ts new file mode 100644 index 000000000..bf6eefe9c --- /dev/null +++ b/UI/Web/src/app/shared/_services/utility.service.ts @@ -0,0 +1,58 @@ +import { Injectable } from '@angular/core'; +import { Chapter } from 'src/app/_models/chapter'; +import { MangaFormat } from 'src/app/_models/manga-format'; +import { Volume } from 'src/app/_models/volume'; + +export enum KEY_CODES { + RIGHT_ARROW = 'ArrowRight', + LEFT_ARROW = 'ArrowLeft', + DOWN_ARROW = 'ArrowDown', + UP_ARROW = 'ArrowUp', + ESC_KEY = 'Escape', + SPACE = ' ', + ENTER = 'Enter', + G = 'g', + BACKSPACE = 'Backspace', + DELETE = 'Delete' +} + +@Injectable({ + providedIn: 'root' +}) +export class UtilityService { + + mangaFormatKeys: string[] = []; + + constructor() { } + + sortVolumes = (a: Volume, b: Volume) => { + if (a === b) { return 0; } + else if (a.number === 0) { return 1; } + else if (b.number === 0) { return -1; } + else { + return a.number < b.number ? -1 : 1; + } + } + + sortChapters = (a: Chapter, b: Chapter) => { + return parseFloat(a.number) - parseFloat(b.number); + } + + mangaFormatToText(format: MangaFormat): string { + if (this.mangaFormatKeys === undefined || this.mangaFormatKeys.length === 0) { + this.mangaFormatKeys = Object.keys(MangaFormat); + } + + return this.mangaFormatKeys.filter(item => MangaFormat[format] === item)[0]; + } + + cleanSpecialTitle(title: string) { + let cleaned = title.replace(/_/g, ' ').replace(/SP\d+/g, '').trim(); + cleaned = cleaned.substring(0, cleaned.lastIndexOf('.')); + if (cleaned.trim() === '') { + return title; + } + return cleaned; + } + +} diff --git a/UI/Web/src/app/shared/a11y-click.directive.ts b/UI/Web/src/app/shared/a11y-click.directive.ts new file mode 100644 index 000000000..c6ab0351d --- /dev/null +++ b/UI/Web/src/app/shared/a11y-click.directive.ts @@ -0,0 +1,42 @@ +import { Directive, Input, HostListener, OnInit, ElementRef, Inject } from '@angular/core'; + +@Directive({ + selector: '[a11y-click]' +}) +export class A11yClickDirective { + @Input('a11y-click') keyCodes!: string; + keyCodeArray!: string[]; + + constructor(@Inject(ElementRef) private element : ElementRef){} + + ngOnInit(){ + if(this.keyCodes) { + this.keyCodeArray = this.keyCodes.split(','); + } + } + + @HostListener('keydown', ['$event']) + onEvent(event: any) { + var keyCodeCondition = function (that: any) { + var flag = false; + if (!(event.keyCode)) { + if (event.which) { + event.keyCode = event.which; + } else if (event.charCode) { + event.keyCode = event.charCode; + } + } + if ((event.keyCode && that.keyCodeArray.indexOf(event.keyCode.toString()) > -1)) { + flag = true; + } + return flag; + }; + const that = this; + if (this.keyCodeArray.length > 0 && keyCodeCondition(that)) { + this.element.nativeElement.click(); + event.preventDefault(); + } + + } + +} diff --git a/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.html b/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.html new file mode 100644 index 000000000..0630fa4da --- /dev/null +++ b/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.html @@ -0,0 +1,64 @@ +
+

+ +  {{header}}

+ + + +
+
+ +
+ +

+ There is no data +

+
+ + +
+ + +
+ + + +
  • +
    + + + + of {{pagination.totalPages}} +
    +
  • +
    + +
    +
    +
    + diff --git a/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.scss b/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.ts b/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.ts new file mode 100644 index 000000000..7f283e82a --- /dev/null +++ b/UI/Web/src/app/shared/card-detail-layout/card-detail-layout.component.ts @@ -0,0 +1,50 @@ +import { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core'; +import { Pagination } from 'src/app/_models/pagination'; +import { ActionItem } from 'src/app/_services/action-factory.service'; + +const FILTER_PAG_REGEX = /[^0-9]/g; + +@Component({ + selector: 'app-card-detail-layout', + templateUrl: './card-detail-layout.component.html', + styleUrls: ['./card-detail-layout.component.scss'] +}) +export class CardDetailLayoutComponent implements OnInit { + + @Input() header: string = ''; + @Input() isLoading: boolean = false; + @Input() items: any[] = []; + @Input() pagination!: Pagination; + @Input() actions: ActionItem[] = []; + @Input() trackByIdentity!: (index: number, item: any) => string; + @Output() itemClicked: EventEmitter = new EventEmitter(); + @Output() pageChange: EventEmitter = new EventEmitter(); + + @ContentChild('cardItem') itemTemplate!: TemplateRef; + + constructor() { } + + ngOnInit(): void { + this.trackByIdentity = (index: number, item: any) => `${this.header}_${this.pagination?.currentPage}_${index}`; + } + + onPageChange(page: number) { + this.pageChange.emit(this.pagination); + } + + selectPageStr(page: string) { + this.pagination.currentPage = parseInt(page, 10) || 1; + this.onPageChange(this.pagination.currentPage); + } + + formatInput(input: HTMLInputElement) { + input.value = input.value.replace(FILTER_PAG_REGEX, ''); + } + + performAction(action: ActionItem) { + if (typeof action.callback === 'function') { + action.callback(action.action, undefined); + } + } + +} diff --git a/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.html b/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.html new file mode 100644 index 000000000..8f3057ae6 --- /dev/null +++ b/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.html @@ -0,0 +1,8 @@ + +
    + +
    + +
    +
    +
    \ No newline at end of file diff --git a/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.scss b/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.scss new file mode 100644 index 000000000..62a635f5c --- /dev/null +++ b/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.scss @@ -0,0 +1,3 @@ +.dropdown-toggle:after { + content: none !important; +} \ No newline at end of file diff --git a/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.ts b/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.ts new file mode 100644 index 000000000..37434ff96 --- /dev/null +++ b/UI/Web/src/app/shared/card-item/card-actionables/card-actionables.component.ts @@ -0,0 +1,36 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Action, ActionItem } from 'src/app/_services/action-factory.service'; + +@Component({ + selector: 'app-card-actionables', + templateUrl: './card-actionables.component.html', + styleUrls: ['./card-actionables.component.scss'] +}) +export class CardActionablesComponent implements OnInit { + + @Input() iconClass = 'fa-ellipsis-v'; + @Input() btnClass = ''; + @Input() actions: ActionItem[] = []; + @Input() labelBy = 'card'; + @Input() disabled: boolean = false; + @Output() actionHandler = new EventEmitter>(); + + constructor() { } + + ngOnInit(): void { + } + + preventClick(event: any) { + event.stopPropagation(); + event.preventDefault(); + } + + performAction(event: any, action: ActionItem) { + this.preventClick(event); + + if (typeof action.callback === 'function') { + this.actionHandler.emit(action); + } + } + +} diff --git a/UI/Web/src/app/shared/card-item/card-item.component.html b/UI/Web/src/app/shared/card-item/card-item.component.html new file mode 100644 index 000000000..0fa307f33 --- /dev/null +++ b/UI/Web/src/app/shared/card-item/card-item.component.html @@ -0,0 +1,29 @@ +
    +
    + title + title +
    +

    +
    +
    + Cannot Read Archive +
    + +
    +
    +
    +
    + + + + + {{title}} + (promoted) + + + + +
    + {{libraryName | titlecase}} +
    +
    \ No newline at end of file diff --git a/UI/Web/src/app/shared/card-item/card-item.component.scss b/UI/Web/src/app/shared/card-item/card-item.component.scss new file mode 100644 index 000000000..6a8877400 --- /dev/null +++ b/UI/Web/src/app/shared/card-item/card-item.component.scss @@ -0,0 +1,99 @@ +@import '../../../theme/colors'; + +$triangle-size: 40px; +$image-height: 230px; +$image-width: 160px; + +.error-banner { + width: 160px; + height: 18px; + background-color: $error-color; + font-size: 12px; + color: white; + text-transform: uppercase; + text-align: center; + + position: absolute; + top: 0px; + right: 0px; +} + +.card { + margin: 5px; + max-width: $image-width; + cursor: pointer; + padding-left: 0px; + padding-right: 0px; + box-sizing: border-box; +} + +.card-title { + font-size: 13px; + width: 130px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + margin-top: 2px; + margin-bottom: 0px; +} + +.card-img-top { + height: $image-height; +} + +.progress-banner { + width: 160px; + height: 5px; + + .progress { + color: $primary-color; + background-color: transparent; + } +} + +.not-read-badge { + position: absolute; + top: 0px; + right: 0px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 $triangle-size $triangle-size 0; + border-color: transparent $primary-color transparent transparent; +} + +.overlay { + height: $image-height; + &:hover { + //background-color: rgba(0, 0, 0, 0.4); + visibility: visible; + + .overlay-item { + visibility: visible; + } + } + + .overlay-item { + visibility: hidden; + } + + z-index: 10; +} + +.card-actions { + position: absolute; + top: 228px; + right: 5px; + width: 20px; +} + +.card-body { + padding: 5px !important; +} + +.library { + font-size: 13px; + text-decoration: none; + margin-top: 0px; +} diff --git a/UI/Web/src/app/shared/card-item/card-item.component.ts b/UI/Web/src/app/shared/card-item/card-item.component.ts new file mode 100644 index 000000000..212fa5078 --- /dev/null +++ b/UI/Web/src/app/shared/card-item/card-item.component.ts @@ -0,0 +1,79 @@ +import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Chapter } from 'src/app/_models/chapter'; +import { CollectionTag } from 'src/app/_models/collection-tag'; +import { Series } from 'src/app/_models/series'; +import { Volume } from 'src/app/_models/volume'; +import { ActionItem } from 'src/app/_services/action-factory.service'; +import { ImageService } from 'src/app/_services/image.service'; +import { LibraryService } from 'src/app/_services/library.service'; + +@Component({ + selector: 'app-card-item', + templateUrl: './card-item.component.html', + styleUrls: ['./card-item.component.scss'] +}) +export class CardItemComponent implements OnInit, OnDestroy { + + @Input() imageUrl = ''; + @Input() title = ''; + @Input() actions: ActionItem[] = []; + @Input() read = 0; // Pages read + @Input() total = 0; // Total Pages + @Input() supressLibraryLink = false; + @Input() entity!: Series | Volume | Chapter | CollectionTag; // This is the entity we are representing. It will be returned if an action is executed. + @Output() clicked = new EventEmitter(); + + libraryName: string | undefined = undefined; // Library name item belongs to + libraryId: number | undefined = undefined; + supressArchiveWarning: boolean = false; // This will supress the cannot read archive warning when total pages is 0 + + private readonly onDestroy = new Subject(); + + constructor(public imageSerivce: ImageService, private libraryService: LibraryService) { + } + + ngOnInit(): void { + if (this.entity.hasOwnProperty('promoted') && this.entity.hasOwnProperty('title')) { + this.supressArchiveWarning = true; + } + + if (this.supressLibraryLink === false) { + this.libraryService.getLibraryNames().pipe(takeUntil(this.onDestroy)).subscribe(names => { + if (this.entity !== undefined && this.entity.hasOwnProperty('libraryId')) { + this.libraryId = (this.entity as Series).libraryId; + this.libraryName = names[this.libraryId]; + } + }); + } + } + + ngOnDestroy() { + this.onDestroy.next(); + } + + handleClick() { + this.clicked.emit(this.title); + } + + isNullOrEmpty(val: string) { + return val === null || val === undefined || val === ''; + } + + preventClick(event: any) { + event.stopPropagation(); + event.preventDefault(); + } + + performAction(action: ActionItem) { + if (typeof action.callback === 'function') { + action.callback(action.action, this.entity); + } + } + + isPromoted() { + const tag = this.entity as CollectionTag; + return tag.hasOwnProperty('promoted') && tag.promoted; + } +} diff --git a/UI/Web/src/app/shared/confirm-dialog/_models/confirm-button.ts b/UI/Web/src/app/shared/confirm-dialog/_models/confirm-button.ts new file mode 100644 index 000000000..c747aeac3 --- /dev/null +++ b/UI/Web/src/app/shared/confirm-dialog/_models/confirm-button.ts @@ -0,0 +1,4 @@ +export interface ConfirmButton { + text: string; + type: string; +} \ No newline at end of file diff --git a/UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts b/UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts new file mode 100644 index 000000000..fe8d989af --- /dev/null +++ b/UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts @@ -0,0 +1,8 @@ +import { ConfirmButton } from './confirm-button'; + +export class ConfirmConfig { + _type: string = 'confirm'; // internal only: confirm or alert (todo: use enum) + header: string = 'Confirm'; + content: string = ''; + buttons: Array = []; +} diff --git a/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html b/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html new file mode 100644 index 000000000..7f390dc9e --- /dev/null +++ b/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html @@ -0,0 +1,16 @@ + + + + + diff --git a/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.scss b/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.ts b/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.ts new file mode 100644 index 000000000..77791b353 --- /dev/null +++ b/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.ts @@ -0,0 +1,42 @@ +import { Component, OnInit } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { ConfirmButton } from './_models/confirm-button'; +import { ConfirmConfig } from './_models/confirm-config'; + +@Component({ + selector: 'app-confirm-dialog', + templateUrl: './confirm-dialog.component.html', + styleUrls: ['./confirm-dialog.component.scss'] +}) +export class ConfirmDialogComponent implements OnInit { + + config!: ConfirmConfig; + + constructor(public modal: NgbActiveModal) {} + + ngOnInit(): void { + if (this.config) { + this.config.buttons.sort(this._button_sort); + } + } + + private _button_sort(x: ConfirmButton, y: ConfirmButton) { + const xIsSecondary = x.type === 'secondary'; + const yIsSecondary = y.type === 'secondary'; + if (xIsSecondary && !yIsSecondary) { + return -1; + } else if (!xIsSecondary && yIsSecondary) { + return 1; + } + return 0; + } + + clickButton(button: ConfirmButton) { + this.modal.close(button.type === 'primary'); + } + + close() { + this.modal.close(false); + } + +} diff --git a/UI/Web/src/app/shared/confirm.service.ts b/UI/Web/src/app/shared/confirm.service.ts new file mode 100644 index 000000000..c1ef77393 --- /dev/null +++ b/UI/Web/src/app/shared/confirm.service.ts @@ -0,0 +1,65 @@ +import { Injectable } from '@angular/core'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component'; +import { ConfirmConfig } from './confirm-dialog/_models/confirm-config'; + +@Injectable({ + providedIn: 'root' +}) +export class ConfirmService { + + defaultConfirm = new ConfirmConfig(); + defaultAlert = new ConfirmConfig(); + + constructor(private modalService: NgbModal) { + this.defaultConfirm.buttons.push({text: 'Cancel', type: 'secondary'}); + this.defaultConfirm.buttons.push({text: 'Confirm', type: 'primary'}); + + this.defaultAlert._type = 'alert'; + this.defaultAlert.header = 'Alert'; + this.defaultAlert.buttons.push({text: 'Ok', type: 'primary'}); + + } + + public async confirm(content?: string, config?: ConfirmConfig): Promise { + + return new Promise((resolve, reject) => { + if (content === undefined && config === undefined) { + console.error('Confirm must have either text or a config object passed'); + return reject(false); + } + + if (content !== undefined && config === undefined) { + config = this.defaultConfirm; + config.content = content; + } + + const modalRef = this.modalService.open(ConfirmDialogComponent); + modalRef.componentInstance.config = config; + modalRef.closed.subscribe(result => { + return resolve(result); + }); + }); + + } + + public async alert(content?: string, config?: ConfirmConfig): Promise { + return new Promise((resolve, reject) => { + if (content === undefined && config === undefined) { + console.error('Alert must have either text or a config object passed'); + return reject(false); + } + + if (content !== undefined && config === undefined) { + config = this.defaultConfirm; + config.content = content; + } + + const modalRef = this.modalService.open(ConfirmDialogComponent); + modalRef.componentInstance.config = config; + modalRef.closed.subscribe(result => { + return resolve(result); + }); + }) + } +} diff --git a/UI/Web/src/app/shared/data-structures/circular-array.ts b/UI/Web/src/app/shared/data-structures/circular-array.ts new file mode 100644 index 000000000..577312ac4 --- /dev/null +++ b/UI/Web/src/app/shared/data-structures/circular-array.ts @@ -0,0 +1,99 @@ +/** + * An array that loops. [0, 1] and call next 3 times, element 0 will be the current() + */ +export class CircularArray { + arr: T[]; + currentIndex: number; + + constructor(arr: T[], startIndex: number) { + this.arr = arr; + this.currentIndex = startIndex || 0; + } + + /** + * + * @returns element in array ahead of current index + */ + next() { + const i = this.currentIndex; + const arr = this.arr; + this.currentIndex = i < arr.length - 1 ? i + 1 : 0; + return this.current(); + } + + /** + * + * @returns element in array behind the current index + */ + prev() { + const i = this.currentIndex; + const arr = this.arr; + this.currentIndex = i > 0 ? i - 1 : arr.length - 1; + return this.current(); + } + + /** + * + * @returns Current element + */ + current() { + return this.arr[this.currentIndex]; + } + + /** + * Peek the current element + * @param offset Optional offset to look ahead + * @returns + */ + peek(offset: number = 0) { + const i = this.currentIndex + 1 + offset; + const arr = this.arr; + const peekIndex = i < arr.length - 1 ? i + 1 : 0; + return this.arr[peekIndex]; + } + + /** + * + * @returns Total size of internal array + */ + size() { + return this.arr.length; + } + + /** + * Applies a func against elements up until index. If index is 1 and size is 3, will apply on [2, 3, 0] + * @param func + * @param index + */ + applyUntil(func: (item: T, index: number) => void, index?: number) { + index = index || this.currentIndex; + for (let offset = 1; offset < this.size(); offset++) { + const i = this.currentIndex + offset; + const arr = this.arr; + const peekIndex = i < arr.length ? i : 0; + + if (peekIndex === index) { + break; + } + + func(this.arr[peekIndex], peekIndex); + } + + } + + /** + * Applies a func against elements for X times. If limit is 1, size is 3, and index is 2. It will apply on [3] + * @param func + * @param limit + */ + applyFor(func: (item: T, index: number) => void, limit: number) { + for (let offset = 1; offset < limit; offset++) { + const i = this.currentIndex + offset; + const peekIndex = i < this.arr.length ? i : Math.abs(this.arr.length - i); + func(this.arr[peekIndex], peekIndex); + } + + } + + + } \ No newline at end of file diff --git a/UI/Web/src/app/shared/data-structures/queue.ts b/UI/Web/src/app/shared/data-structures/queue.ts new file mode 100644 index 000000000..5a298d3b6 --- /dev/null +++ b/UI/Web/src/app/shared/data-structures/queue.ts @@ -0,0 +1,27 @@ +export class Queue { + elements: T[]; + + constructor() { + this.elements = []; + } + + enqueue(data: T) { + this.elements.push(data); + } + + dequeue() { + return this.elements.shift(); + } + + isEmpty() { + return this.elements.length === 0; + } + + peek() { + return !this.isEmpty() ? this.elements[0] : undefined; + } + + length = () => { + return this.elements.length; + } + } \ No newline at end of file diff --git a/UI/Web/src/app/shared/data-structures/stack.ts b/UI/Web/src/app/shared/data-structures/stack.ts new file mode 100644 index 000000000..e2e17e280 --- /dev/null +++ b/UI/Web/src/app/shared/data-structures/stack.ts @@ -0,0 +1,29 @@ +export class Stack { + items: T[]; + + constructor() { + this.items = []; + } + + isEmpty() { + return this.items.length === 0; + } + + peek() { + if (!this.isEmpty()) { + return this.items[this.items.length - 1]; + } + return undefined; + } + + pop() { + if (this.isEmpty()) { + return undefined; + } + return this.items.pop(); + } + + push(item: T) { + this.items.push(item); + } + } \ No newline at end of file diff --git a/UI/Web/src/app/shared/drawer/drawer.component.html b/UI/Web/src/app/shared/drawer/drawer.component.html new file mode 100644 index 000000000..b02b89fdf --- /dev/null +++ b/UI/Web/src/app/shared/drawer/drawer.component.html @@ -0,0 +1,15 @@ +
    +
    + +
    +
    + +
    +
    \ No newline at end of file diff --git a/UI/Web/src/app/shared/drawer/drawer.component.scss b/UI/Web/src/app/shared/drawer/drawer.component.scss new file mode 100644 index 000000000..f2b1476f3 --- /dev/null +++ b/UI/Web/src/app/shared/drawer/drawer.component.scss @@ -0,0 +1,56 @@ +:host { + --drawer-height: 100vh; + --drawer-width: 400px; + --drawer-top-offset: 0px; + --drawer-background-color: '#fff'; + } + + .drawer-container { + position: absolute; + top: var(--drawer-top-offset); + right: 0; + width: var(--drawer-width); + height: 100vh; + background: var(--drawer-background-color); + transition: all 300ms; + box-shadow: -3px 0px 6px 1px #00000026; + padding: 10px 10px; + z-index: 1021; + overflow: auto; + -webkit-overflow-scrolling: touch; + + &.position-right { + right: calc(-1 * var(--drawer-width)); + &.is-open { + right: 0; + } + } + &.position-left { + left: calc(-1 * var(--drawer-width)); + &.is-open { + left: 0; + } + } + + &.position-bottom { + //top: calc(-1 * var(--drawer-height)); + top: 100vh; + height: 0px; + &.is-open { + //bottom: 0; + top: 100vh; + height: var(--drawer-height); + } + } + + &.position-top { + //bottom: calc(-1 * var(--drawer-height)); + top: 0px; + height: 0px; + &.is-open { + //bottom: 0; + top: 0px; + height: var(--drawer-height); + } + } + } diff --git a/UI/Web/src/app/shared/drawer/drawer.component.ts b/UI/Web/src/app/shared/drawer/drawer.component.ts new file mode 100644 index 000000000..f83e95383 --- /dev/null +++ b/UI/Web/src/app/shared/drawer/drawer.component.ts @@ -0,0 +1,31 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +export class DrawerOptions { + /** + * Pixels to offset from the top of the screen. Only applies to postion left/right + */ + topOffset: number = 0; +} + +@Component({ + selector: 'app-drawer', + templateUrl: './drawer.component.html', + styleUrls: ['./drawer.component.scss'], + exportAs: "drawer" +}) +export class DrawerComponent { + + @Input() isOpen = false; + @Input() width: number = 400; + /** + * Side of the screen the drawer should animate from + */ + @Input() position: 'left' | 'right' | 'bottom' = 'left'; + @Input() options: Partial = new DrawerOptions(); + @Output() drawerClosed = new EventEmitter(); + + + close() { + this.drawerClosed.emit(); + } +} diff --git a/UI/Web/src/app/shared/library-card/library-card.component.html b/UI/Web/src/app/shared/library-card/library-card.component.html new file mode 100644 index 000000000..29d88652e --- /dev/null +++ b/UI/Web/src/app/shared/library-card/library-card.component.html @@ -0,0 +1,15 @@ + +
    +
    + +
    + +
    +
    +
    + + {{data.name}} + +
    +
    +
    \ No newline at end of file diff --git a/UI/Web/src/app/shared/library-card/library-card.component.scss b/UI/Web/src/app/shared/library-card/library-card.component.scss new file mode 100644 index 000000000..3ece78d0f --- /dev/null +++ b/UI/Web/src/app/shared/library-card/library-card.component.scss @@ -0,0 +1,58 @@ +$primary-color: #cc7b19; + +.card { + margin: 10px; + max-width: 160px; + cursor: pointer; +} + +.card-title { + margin-top: 5px; + line-height: 20px; + font-size: 13px; + text-overflow: ellipsis; + white-space: normal; + max-width: 150px; + height: 52px; + padding-top: 10px; +} + +.card-img-top { + height: 160px; + margin-top: 40% !important; + margin: auto; + font-size: 52px; + +} + +.overlay { + height: 160px; + &:hover { + background-color: rgba(0, 0, 0, 0.4); + visibility: visible; + + .overlay-item { + visibility: visible; + } + } + + .overlay-item { + visibility: hidden; + } + + z-index: 10; +} + +.card-actions { + position: absolute; + top: 125px; + right: -5px; +} + +.card-body { + padding: 5px !important; +} + +.dropdown-toggle:after { + content: none !important; +} diff --git a/UI/Web/src/app/shared/library-card/library-card.component.ts b/UI/Web/src/app/shared/library-card/library-card.component.ts new file mode 100644 index 000000000..d0a280f53 --- /dev/null +++ b/UI/Web/src/app/shared/library-card/library-card.component.ts @@ -0,0 +1,77 @@ +import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core'; +import { Router } from '@angular/router'; +import { take } from 'rxjs/operators'; +import { Library } from 'src/app/_models/library'; +import { AccountService } from 'src/app/_services/account.service'; +import { Action, ActionFactoryService, ActionItem } from 'src/app/_services/action-factory.service'; +import { ActionService } from 'src/app/_services/action.service'; + +// Represents a library type card. +@Component({ + selector: 'app-library-card', + templateUrl: './library-card.component.html', + styleUrls: ['./library-card.component.scss'] +}) +export class LibraryCardComponent implements OnInit, OnChanges { + @Input() data!: Library; + @Output() clicked = new EventEmitter(); + + isAdmin = false; + actions: ActionItem[] = []; + icon = 'fa-book-open'; + + constructor(private accountService: AccountService, private router: Router, + private actionFactoryService: ActionFactoryService, private actionService: ActionService) { + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + if (user) { + this.isAdmin = this.accountService.hasAdminRole(user); + } + }); + } + + ngOnInit(): void { + } + + ngOnChanges(changes: any) { + if (this.data) { + if (this.data.type === 0 || this.data.type === 1) { + this.icon = 'fa-book-open'; + } else { + this.icon = 'fa-book'; + } + + this.actions = this.actionFactoryService.getLibraryActions(this.handleAction.bind(this)); + } + } + + handleAction(action: Action, library: Library) { + switch (action) { + case(Action.ScanLibrary): + this.actionService.scanLibrary(library); + break; + case(Action.RefreshMetadata): + this.actionService.refreshMetadata(library); + break; + default: + break; + } + } + + + performAction(action: ActionItem) { + if (typeof action.callback === 'function') { + action.callback(action.action, this.data); + } + } + + handleClick() { + this.clicked.emit(this.data); + this.router.navigate(['library', this.data?.id]); + } + + preventClick(event: any) { + event.stopPropagation(); + event.preventDefault(); + } + +} diff --git a/UI/Web/src/app/shared/read-more/read-more.component.html b/UI/Web/src/app/shared/read-more/read-more.component.html new file mode 100644 index 000000000..1126973a0 --- /dev/null +++ b/UI/Web/src/app/shared/read-more/read-more.component.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/UI/Web/src/app/shared/read-more/read-more.component.scss b/UI/Web/src/app/shared/read-more/read-more.component.scss new file mode 100644 index 000000000..ec1ed15b0 --- /dev/null +++ b/UI/Web/src/app/shared/read-more/read-more.component.scss @@ -0,0 +1,6 @@ +.read-more-link { + font-weight: bold; + text-decoration: none; + color: black; + cursor: pointer; +} \ No newline at end of file diff --git a/UI/Web/src/app/shared/read-more/read-more.component.ts b/UI/Web/src/app/shared/read-more/read-more.component.ts new file mode 100644 index 000000000..7bd437ecc --- /dev/null +++ b/UI/Web/src/app/shared/read-more/read-more.component.ts @@ -0,0 +1,41 @@ +import { Component, Input, OnChanges } from '@angular/core'; + +@Component({ + selector: 'app-read-more', + templateUrl: './read-more.component.html', + styleUrls: ['./read-more.component.scss'] +}) +export class ReadMoreComponent implements OnChanges { + + @Input() text!: string; + @Input() maxLength: number = 250; + currentText!: string; + hideToggle: boolean = true; + + public isCollapsed: boolean = true; + + toggleView() { + this.isCollapsed = !this.isCollapsed; + this.determineView(); + } + determineView() { + if (!this.text || this.text.length <= this.maxLength) { + this.currentText = this.text; + this.isCollapsed = false; + this.hideToggle = true; + return; + } + this.hideToggle = false; + if (this.isCollapsed === true) { + this.currentText = this.text.substring(0, this.maxLength); + this.currentText = this.currentText.substr(0, Math.min(this.currentText.length, this.currentText.lastIndexOf(' '))); + this.currentText = this.currentText + '…'; + } else if (this.isCollapsed === false) { + this.currentText = this.text; + } + + } + ngOnChanges() { + this.determineView(); + } +} diff --git a/UI/Web/src/app/shared/register-member/register-member.component.html b/UI/Web/src/app/shared/register-member/register-member.component.html new file mode 100644 index 000000000..155b0e9a9 --- /dev/null +++ b/UI/Web/src/app/shared/register-member/register-member.component.html @@ -0,0 +1,27 @@ +
    +

    Errors:

    +
      +
    • {{error}}
    • +
    +
    +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    \ No newline at end of file diff --git a/UI/Web/src/app/shared/register-member/register-member.component.scss b/UI/Web/src/app/shared/register-member/register-member.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/shared/register-member/register-member.component.ts b/UI/Web/src/app/shared/register-member/register-member.component.ts new file mode 100644 index 000000000..9b839b3aa --- /dev/null +++ b/UI/Web/src/app/shared/register-member/register-member.component.ts @@ -0,0 +1,44 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { FormGroup, FormControl, Validators } from '@angular/forms'; +import { AccountService } from 'src/app/_services/account.service'; + +@Component({ + selector: 'app-register-member', + templateUrl: './register-member.component.html', + styleUrls: ['./register-member.component.scss'] +}) +export class RegisterMemberComponent implements OnInit { + + @Input() firstTimeFlow = false; + @Output() created = new EventEmitter(); + + adminExists = false; + registerForm: FormGroup = new FormGroup({ + username: new FormControl('', [Validators.required]), + password: new FormControl('', [Validators.required]), + isAdmin: new FormControl(false, []) + }); + errors: string[] = []; + + constructor(private accountService: AccountService) { + } + + ngOnInit(): void { + if (this.firstTimeFlow) { + this.registerForm.get('isAdmin')?.setValue(true); + } + } + + register() { + this.accountService.register(this.registerForm.value).subscribe(resp => { + this.created.emit(true); + }, err => { + this.errors = err; + }); + } + + cancel() { + this.created.emit(false); + } + +} diff --git a/UI/Web/src/app/shared/safe-html.pipe.ts b/UI/Web/src/app/shared/safe-html.pipe.ts new file mode 100644 index 000000000..1c8bc944e --- /dev/null +++ b/UI/Web/src/app/shared/safe-html.pipe.ts @@ -0,0 +1,15 @@ +import { Pipe, PipeTransform, SecurityContext } from '@angular/core'; +import { DomSanitizer } from '@angular/platform-browser'; + +@Pipe({ + name: 'safeHtml' +}) +export class SafeHtmlPipe implements PipeTransform { + + constructor(private dom: DomSanitizer) {} + + transform(value: string): unknown { + return this.dom.sanitize(SecurityContext.HTML, value); + } + +} diff --git a/UI/Web/src/app/shared/series-card/series-card.component.html b/UI/Web/src/app/shared/series-card/series-card.component.html new file mode 100644 index 000000000..d83919c28 --- /dev/null +++ b/UI/Web/src/app/shared/series-card/series-card.component.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/UI/Web/src/app/shared/series-card/series-card.component.scss b/UI/Web/src/app/shared/series-card/series-card.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/shared/series-card/series-card.component.ts b/UI/Web/src/app/shared/series-card/series-card.component.ts new file mode 100644 index 000000000..115a1bbc5 --- /dev/null +++ b/UI/Web/src/app/shared/series-card/series-card.component.ts @@ -0,0 +1,146 @@ +import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core'; +import { Router } from '@angular/router'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { ToastrService } from 'ngx-toastr'; +import { take } from 'rxjs/operators'; +import { EditSeriesModalComponent } from 'src/app/_modals/edit-series-modal/edit-series-modal.component'; +import { Series } from 'src/app/_models/series'; +import { AccountService } from 'src/app/_services/account.service'; +import { ImageService } from 'src/app/_services/image.service'; +import { LibraryService } from 'src/app/_services/library.service'; +import { ActionFactoryService, Action, ActionItem } from 'src/app/_services/action-factory.service'; +import { SeriesService } from 'src/app/_services/series.service'; +import { ConfirmService } from '../confirm.service'; + +@Component({ + selector: 'app-series-card', + templateUrl: './series-card.component.html', + styleUrls: ['./series-card.component.scss'] +}) +export class SeriesCardComponent implements OnInit, OnChanges { + @Input() data: Series | undefined; + @Input() libraryId = 0; + @Input() suppressLibraryLink = false; + @Output() clicked = new EventEmitter(); + @Output() reload = new EventEmitter(); + @Output() dataChanged = new EventEmitter(); + + isAdmin = false; + actions: ActionItem[] = []; + + constructor(private accountService: AccountService, private router: Router, + private seriesService: SeriesService, private toastr: ToastrService, + private libraryService: LibraryService, private modalService: NgbModal, + private confirmService: ConfirmService, public imageService: ImageService, + private actionFactoryService: ActionFactoryService) { + this.accountService.currentUser$.pipe(take(1)).subscribe(user => { + if (user) { + this.isAdmin = this.accountService.hasAdminRole(user); + } + }); + } + + + ngOnInit(): void { + } + + ngOnChanges(changes: any) { + if (this.data) { + this.actions = this.actionFactoryService.getSeriesActions((action: Action, series: Series) => this.handleSeriesActionCallback(action, series)); + } + } + + handleSeriesActionCallback(action: Action, series: Series) { + switch (action) { + case(Action.MarkAsRead): + this.markAsRead(series); + break; + case(Action.MarkAsUnread): + this.markAsUnread(series); + break; + case(Action.ScanLibrary): + this.scanLibrary(series); + break; + case(Action.RefreshMetadata): + this.refreshMetdata(series); + break; + case(Action.Delete): + this.deleteSeries(series); + break; + case(Action.Edit): + this.openEditModal(series); + break; + default: + break; + } + } + + openEditModal(data: Series) { + const modalRef = this.modalService.open(EditSeriesModalComponent, { size: 'lg', scrollable: true }); + modalRef.componentInstance.series = data; + modalRef.closed.subscribe((closeResult: {success: boolean, series: Series}) => { + window.scrollTo(0, 0); + if (closeResult.success) { + this.seriesService.getSeries(data.id).subscribe(series => { + this.data = series; + this.reload.emit(true); + this.dataChanged.emit(series); + }); + } + }); + } + + refreshMetdata(series: Series) { + this.seriesService.refreshMetadata(series).subscribe((res: any) => { + this.toastr.success('Refresh started for ' + series.name); + }); + } + + scanLibrary(series: Series) { + this.seriesService.scan(series.libraryId, series.id).subscribe((res: any) => { + this.toastr.success('Scan started for ' + series.name); + }); + } + + async deleteSeries(series: Series) { + if (!await this.confirmService.confirm('Are you sure you want to delete this series? It will not modify files on disk.')) { + return; + } + + this.seriesService.delete(series.id).subscribe((res: boolean) => { + if (res) { + this.toastr.success('Series deleted'); + this.reload.emit(true); + } + }); + } + + markAsUnread(series: Series) { + this.seriesService.markUnread(series.id).subscribe(res => { + this.toastr.success(series.name + ' is now unread'); + series.pagesRead = 0; + if (this.data) { + this.data.pagesRead = 0; + } + + this.dataChanged.emit(series); + }); + } + + markAsRead(series: Series) { + this.seriesService.markRead(series.id).subscribe(res => { + this.toastr.success(series.name + ' is now read'); + series.pagesRead = series.pages; + if (this.data) { + this.data.pagesRead = series.pages; + } + this.dataChanged.emit(series); + }); + } + + handleClick() { + this.clicked.emit(this.data); + this.router.navigate(['library', this.libraryId, 'series', this.data?.id]); + } + +} diff --git a/UI/Web/src/app/shared/shared.module.ts b/UI/Web/src/app/shared/shared.module.ts new file mode 100644 index 000000000..2d257faba --- /dev/null +++ b/UI/Web/src/app/shared/shared.module.ts @@ -0,0 +1,66 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ReactiveFormsModule } from '@angular/forms'; +import { CardItemComponent } from './card-item/card-item.component'; +import { NgbCollapseModule, NgbDropdownModule, NgbPaginationModule, NgbProgressbarModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; +import { LibraryCardComponent } from './library-card/library-card.component'; +import { SeriesCardComponent } from './series-card/series-card.component'; +import { CardDetailsModalComponent } from './_modals/card-details-modal/card-details-modal.component'; +import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component'; +import { SafeHtmlPipe } from './safe-html.pipe'; +import { LazyLoadImageModule } from 'ng-lazyload-image'; +import { CardActionablesComponent } from './card-item/card-actionables/card-actionables.component'; +import { RegisterMemberComponent } from './register-member/register-member.component'; +import { ReadMoreComponent } from './read-more/read-more.component'; +import { RouterModule } from '@angular/router'; +import { DrawerComponent } from './drawer/drawer.component'; +import { TagBadgeComponent } from './tag-badge/tag-badge.component'; +import { CardDetailLayoutComponent } from './card-detail-layout/card-detail-layout.component'; +import { ShowIfScrollbarDirective } from './show-if-scrollbar.directive'; +import { A11yClickDirective } from './a11y-click.directive'; + + +@NgModule({ + declarations: [ + RegisterMemberComponent, + CardItemComponent, + LibraryCardComponent, + SeriesCardComponent, + CardDetailsModalComponent, + ConfirmDialogComponent, + SafeHtmlPipe, + CardActionablesComponent, + ReadMoreComponent, + DrawerComponent, + TagBadgeComponent, + CardDetailLayoutComponent, + ShowIfScrollbarDirective, + A11yClickDirective + ], + imports: [ + CommonModule, + RouterModule, + ReactiveFormsModule, + NgbDropdownModule, + NgbProgressbarModule, + NgbTooltipModule, + NgbCollapseModule, + LazyLoadImageModule, + NgbPaginationModule // CardDetailLayoutComponent + ], + exports: [ + RegisterMemberComponent, // TODO: Move this out and put in normal app + CardItemComponent, + LibraryCardComponent, // TODO: Move this out and put in normal app + SeriesCardComponent, // TODO: Move this out and put in normal app + SafeHtmlPipe, + CardActionablesComponent, + ReadMoreComponent, + DrawerComponent, + TagBadgeComponent, + CardDetailLayoutComponent, + ShowIfScrollbarDirective, + A11yClickDirective + ] +}) +export class SharedModule { } diff --git a/UI/Web/src/app/shared/show-if-scrollbar.directive.ts b/UI/Web/src/app/shared/show-if-scrollbar.directive.ts new file mode 100644 index 000000000..70771fdd3 --- /dev/null +++ b/UI/Web/src/app/shared/show-if-scrollbar.directive.ts @@ -0,0 +1,22 @@ +import { AfterViewInit, Directive, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core'; + +@Directive({ + selector: '[appShowIfScrollbar]' +}) +export class ShowIfScrollbarDirective implements AfterViewInit { + + constructor(private el: ElementRef, private templateRef: TemplateRef, private viewContainer: ViewContainerRef) { + + } + ngAfterViewInit(): void { + // NOTE: This doesn't work! + if (this.el.nativeElement.scrollHeight > this.el.nativeElement.clientHeight) { + // If condition is true add template to DOM + this.viewContainer.createEmbeddedView(this.templateRef); + } else { + // Else remove template from DOM + this.viewContainer.clear(); + } + } + +} diff --git a/UI/Web/src/app/shared/tag-badge/tag-badge.component.html b/UI/Web/src/app/shared/tag-badge/tag-badge.component.html new file mode 100644 index 000000000..9054ff705 --- /dev/null +++ b/UI/Web/src/app/shared/tag-badge/tag-badge.component.html @@ -0,0 +1,3 @@ +
    + +
    \ No newline at end of file diff --git a/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss b/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss new file mode 100644 index 000000000..6cb5f83b6 --- /dev/null +++ b/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss @@ -0,0 +1,25 @@ +@import '../../../theme/colors'; + +$bg-color: #c9c9c9; +$bdr-color: #f2f2f2; + +::ng-deep .tagbadge { + background-color: $bg-color; + transition: all .3s ease-out; + margin: 3px 5px 3px 0px; + padding: 2px 15px; + border-radius: 6px; + font-size: 14px; + border: 1px solid $bdr-color; + display: inline-block; + cursor: default; + + i { + color: $primary-color; + font-size: 14px; + font-weight: bold; + margin-left: 10px; + margin-right: 0px; + cursor: pointer; + } +} \ No newline at end of file diff --git a/UI/Web/src/app/shared/tag-badge/tag-badge.component.ts b/UI/Web/src/app/shared/tag-badge/tag-badge.component.ts new file mode 100644 index 000000000..6d7fb0615 --- /dev/null +++ b/UI/Web/src/app/shared/tag-badge/tag-badge.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-tag-badge', + templateUrl: './tag-badge.component.html', + styleUrls: ['./tag-badge.component.scss'] +}) +export class TagBadgeComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/UI/Web/src/app/shared/utils/clientUtils.ts b/UI/Web/src/app/shared/utils/clientUtils.ts new file mode 100644 index 000000000..7170df442 --- /dev/null +++ b/UI/Web/src/app/shared/utils/clientUtils.ts @@ -0,0 +1,21 @@ +import * as Bowser from "bowser"; +import { version } from '../../../../package.json'; +import { ClientInfo } from "src/app/_models/client-info"; +import { DetailsVersion } from "src/app/_models/details-version"; + +const getClientInfo = (): ClientInfo => { + + const screenResolution = `${window.screen.width} x ${window.screen.height}`; + + const browser = Bowser.getParser(window.navigator.userAgent); + + return { + os: browser.getOS() as DetailsVersion, + browser: browser.getBrowser() as DetailsVersion, + platformType: browser.getPlatformType(), + kavitaUiVersion: version, + screenResolution + }; +} + +export { getClientInfo }; \ No newline at end of file diff --git a/UI/Web/src/app/typeahead/typeahead-settings.ts b/UI/Web/src/app/typeahead/typeahead-settings.ts new file mode 100644 index 000000000..9fc3b28e8 --- /dev/null +++ b/UI/Web/src/app/typeahead/typeahead-settings.ts @@ -0,0 +1,52 @@ +import { Observable } from 'rxjs'; +import { FormControl } from '@angular/forms'; + +export class TypeaheadSettings { + /** + * How many ms between typing actions before pipeline to load data is triggered + */ + debounce: number = 200; + /** + * Multiple options can be selected from dropdown. Will be rendered as tag badges. + */ + multiple: boolean = false; + /** + * Id of the input element, for linking label elements (accessibility) + */ + id: string = ''; + /** + * Data to preload the typeahead with on first load + */ + /** + * Data to preload the typeahead with on first load + */ + savedData!: T[] | T; + /** + * Function to compare the elements. Should return all elements that fit the matching criteria. + */ + compareFn!: ((optionList: T[], filter: string) => T[]); + /** + * Function to fetch the data from the server. If data is mainatined in memory, wrap in an observable. + */ + fetchFn!: ((filter: string) => Observable) | T[]; + /** + * Minimum number of characters needed to type to trigger the fetch pipeline + */ + minCharacters: number = 1; + /** + * Optional form Control to tie model to. + */ + formControl?: FormControl; + /** + * If true, typeahead will remove already selected items from fetchFn results. Only appies when multiple=true + */ + unique: boolean = true; + /** + * If true, will fire an event for newItemAdded and will prompt the user to add form model to the list of selected items + */ + addIfNonExisting: boolean = false; + /** + * Required for addIfNonExisting to transform the text from model into the item + */ + addTransformFn!: (text: string) => T; +} \ No newline at end of file diff --git a/UI/Web/src/app/typeahead/typeahead.component.html b/UI/Web/src/app/typeahead/typeahead.component.html new file mode 100644 index 000000000..41b06ec5d --- /dev/null +++ b/UI/Web/src/app/typeahead/typeahead.component.html @@ -0,0 +1,37 @@ +
    + + + +
    +
    + + + + + + +
    + Loading... +
    +
    +
    + + + +
    +
    \ No newline at end of file diff --git a/UI/Web/src/app/typeahead/typeahead.component.scss b/UI/Web/src/app/typeahead/typeahead.component.scss new file mode 100644 index 000000000..2672736ad --- /dev/null +++ b/UI/Web/src/app/typeahead/typeahead.component.scss @@ -0,0 +1,84 @@ +@import '../../assets/themes/dark.scss'; + +input { + width: 15px; + opacity: 1px; + position: relative; + left: 4px; + border: none; +} + +.typeahead-input { + border: 1px solid #ccc; + padding: 4px 6px; + display: inline-block; + width: 100%; + overflow: hidden; + position: relative; + z-index: 1; + box-sizing: border-box; + box-shadow: none; + border-radius: 4px; + cursor: text; + background-color: #fff; + min-height: 38px; + + input { + outline: 0 !important; + border-radius: .28571429rem; + display: inline-block !important; + padding: 0px !important; + min-height: 0px !important; + max-width: 100% !important; + margin: 0px !important; + text-indent: 0 !important; + line-height: inherit !important; + box-shadow: none !important; + } +} + +::ng-deep .bg-dark .typeahead-input { + color: #efefef; + background-color: $dark-bg-color; +} + +// Causes bleedover +::ng-deep .bg-dark .dropdown .list-group-item.active { + background-color: $dark-hover-color; +} + +.dropdown { + width: 100%; + background: white; + z-index:1000; + margin: 2px 0 0; + border-radius: 4px; + margin-top: -7px; + border-top-left-radius: 0px; + border-top-right-radius: 0px; + position: absolute; + max-height: 400px; + overflow-y: auto; + overflow-x: hidden; + + .list-group-item { + padding: 5px 5px; + } + + + li { + list-style: none; + } +} + +.list-group-item { + cursor: pointer; +} + +.spinner-border { + position: absolute; + right: 10px; + margin: auto; + cursor: pointer; + top: 30%; +} \ No newline at end of file diff --git a/UI/Web/src/app/typeahead/typeahead.component.ts b/UI/Web/src/app/typeahead/typeahead.component.ts new file mode 100644 index 000000000..c106cefe8 --- /dev/null +++ b/UI/Web/src/app/typeahead/typeahead.component.ts @@ -0,0 +1,387 @@ +import { Component, ContentChild, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, Renderer2, RendererStyleFlags2, TemplateRef, ViewChild } from '@angular/core'; +import { FormControl, FormGroup } from '@angular/forms'; +import { Observable, Observer, of, Subject } from 'rxjs'; +import { debounceTime, distinctUntilChanged, filter, last, map, shareReplay, switchMap, take, takeLast, takeUntil, tap, withLatestFrom } from 'rxjs/operators'; +import { KEY_CODES } from '../shared/_services/utility.service'; +import { TypeaheadSettings } from './typeahead-settings'; + +/** + * SelectionModel is used for keeping track of multiple selections. Simple interface with ability to toggle. + * @param selectedState Optional state to set selectedOptions to. If not passed, defaults to false. + * @param selectedOptions Optional data elements to inform the SelectionModel of. If not passed, as toggle() occur, items are tracked. + * @param propAccessor Optional string that points to a unique field within the T type. Used for quickly looking up. + */ +export class SelectionModel { + _data!: Array<{value: T, selected: boolean}>; + _propAccessor: string = ''; + + constructor(selectedState: boolean = false, selectedOptions: Array = [], propAccessor: string = '') { + this._data = []; + + if (propAccessor != undefined || propAccessor !== '') { + this._propAccessor = propAccessor; + } + + selectedOptions.forEach(d => { + this._data.push({value: d, selected: selectedState}); + }); + } + + // __lookupItem(item: T) { + // if (this._propAccessor != '') { + // // TODO: Implement this code to speedup lookups (use a map rather than array) + // } + // const dataItem = this._data.filter(data => data.value == d); + // } + + /** + * Will toggle if the data item is selected or not. If data option is not tracked, will add it and set state to true. + * @param data Item to toggle + */ + toggle(data: T, selectedState?: boolean) { + //const dataItem = this._data.filter(d => d.value == data); + const dataItem = this._data.filter(d => this.shallowEqual(d.value, data)); + if (dataItem.length > 0) { + if (selectedState != undefined) { + dataItem[0].selected = selectedState; + } else { + dataItem[0].selected = !dataItem[0].selected; + } + } else { + this._data.push({value: data, selected: (selectedState === undefined ? true : selectedState)}); + } + } + + /** + * Is the passed item selected + * @param data item to check against + * @param compareFn optional method to use to perform comparisons + * @returns boolean + */ + isSelected(data: T, compareFn?: ((d: T) => boolean)): boolean { + let dataItem: Array; + if (compareFn != undefined || compareFn != null) { + dataItem = this._data.filter(d => compareFn(d.value)); + } else { + dataItem = this._data.filter(d => this.shallowEqual(d.value, data)); + } + + if (dataItem.length > 0) { + return dataItem[0].selected; + } + return false; + } + + /** + * + * @returns All Selected items + */ + selected(): Array { + return this._data.filter(d => d.selected).map(d => d.value); + } + + /** + * + * @returns All Non-Selected items + */ + unselected(): Array { + return this._data.filter(d => !d.selected).map(d => d.value); + } + + /** + * + * @returns Last element added/tracked or undefined if nothing is tracked + */ + peek(): T | undefined { + if (this._data.length > 0) { + return this._data[this._data.length - 1].value; + } + + return undefined; + } + + shallowEqual(object1: T, object2: T) { + const keys1 = Object.keys(object1); + const keys2 = Object.keys(object2); + + if (keys1.length !== keys2.length) { + return false; + } + + for (let key of keys1) { + if ((object1 as any)[key] !== (object2 as any)[key]) { + return false; + } + } + + return true; + } +} + +@Component({ + selector: 'app-typeahead', + templateUrl: './typeahead.component.html', + styleUrls: ['./typeahead.component.scss'] +}) +export class TypeaheadComponent implements OnInit, OnDestroy { + + filteredOptions!: Observable; + isLoadingOptions: boolean = false; + typeaheadControl!: FormControl; + typeaheadForm!: FormGroup; + + + @Input() settings!: TypeaheadSettings; + @Output() selectedData = new EventEmitter(); + @Output() newItemAdded = new EventEmitter(); + + optionSelection!: SelectionModel; + + hasFocus = false; // Whether input has active focus + focusedIndex: number = 0; + showAddItem: boolean = false; + + @ViewChild('input') inputElem!: ElementRef; + @ContentChild('optionItem') optionTemplate!: TemplateRef; + @ContentChild('badgeItem') badgeTemplate!: TemplateRef; + + private readonly onDestroy = new Subject(); + + constructor(private renderer2: Renderer2) { } + + ngOnDestroy(): void { + this.onDestroy.next(); + this.onDestroy.complete(); + } + + ngOnInit() { + + if (this.settings.compareFn === undefined && this.settings.multiple) { + console.error('A compare function must be defined'); + return; + } + + if (this.settings.hasOwnProperty('formControl') && this.settings.formControl) { + this.typeaheadControl = this.settings.formControl; + } else { + this.typeaheadControl = new FormControl(''); + } + this.typeaheadForm = new FormGroup({ + 'typeahead': this.typeaheadControl + }); + + this.filteredOptions = this.typeaheadForm.get('typeahead')!.valueChanges + .pipe( + // Adjust input box to grow + tap(val => { + if (this.inputElem != null && this.inputElem.nativeElement != null) { + this.renderer2.setStyle(this.inputElem.nativeElement, 'width', 15 * ((this.typeaheadControl.value + '').length + 1) + 'px'); + this.focusedIndex = 0; + } + }), + debounceTime(this.settings.debounce), + filter(val => { + // If minimum filter characters not met, do not filter + if (this.settings.minCharacters === 0) return true; + + if (!val || val.trim().length < this.settings.minCharacters) { + return false; + } + + return true; + }), + switchMap(val => { + this.isLoadingOptions = true; + let results: Observable; + if (Array.isArray(this.settings.fetchFn)) { + const filteredArray = this.settings.compareFn(this.settings.fetchFn, val.trim()); + results = of(filteredArray).pipe(map((items: any[]) => items.filter(item => this.filterSelected(item)))); + } else { + results = this.settings.fetchFn(val.trim()).pipe(map((items: any[]) => items.filter(item => this.filterSelected(item)))); + } + + return results; + }), + tap((val) => { + this.isLoadingOptions = false; + this.focusedIndex = 0; + setTimeout(() => { + this.updateShowAddItem(val); + this.updateHighlight(); + }, 10); + setTimeout(() => this.updateHighlight(), 20); + }), + shareReplay(), + takeUntil(this.onDestroy) + ); + + + if (this.settings.savedData) { + if (this.settings.multiple) { + this.optionSelection = new SelectionModel(true, this.settings.savedData); + } + // else { + // this.optionSelection = new SelectionModel(true, this.settings.savedData[0]); + // this.typeaheadControl.setValue(this.settings.displayFn(this.settings.savedData)) + // } + } else { + this.optionSelection = new SelectionModel(); + } + } + + + @HostListener('window:click', ['$event']) + handleDocumentClick() { + this.hasFocus = false; + } + + @HostListener('window:keydown', ['$event']) + handleKeyPress(event: KeyboardEvent) { + if (!this.hasFocus) { return; } + + switch(event.key) { + case KEY_CODES.DOWN_ARROW: + case KEY_CODES.RIGHT_ARROW: + { + this.focusedIndex = Math.min(this.focusedIndex + 1, document.querySelectorAll('.list-group-item').length - 1); + this.updateHighlight(); + break; + } + case KEY_CODES.UP_ARROW: + case KEY_CODES.LEFT_ARROW: + { + this.focusedIndex = Math.max(this.focusedIndex - 1, 0); + this.updateHighlight(); + break; + } + case KEY_CODES.ENTER: + { + document.querySelectorAll('.list-group-item').forEach((item, index) => { + if (item.classList.contains('active')) { + this.filteredOptions.pipe(take(1)).subscribe((res: any[]) => { + // This isn't giving back the filtered array, but everything + const result = this.settings.compareFn(res, (item.textContent || '').trim()); + if (result.length === 1) { + if (item.classList.contains('add-item')) { + this.addNewItem(this.typeaheadControl.value); + } else { + this.toggleSelection(result[0]); + } + this.resetField(); + this.focusedIndex = 0; + } + }); + } + }); + break; + } + case KEY_CODES.BACKSPACE: + case KEY_CODES.DELETE: + { + if (this.typeaheadControl.value !== null && this.typeaheadControl.value !== undefined && this.typeaheadControl.value.trim() !== '') { + return; + } + const selected = this.optionSelection.selected(); + if (selected.length > 0) { + this.removeSelectedOption(selected.pop()); + } + break; + } + case KEY_CODES.ESC_KEY: + this.hasFocus = false; + event.stopPropagation(); + break; + default: + break; + } + } + + toggleSelection(opt: any): void { + this.optionSelection.toggle(opt); + this.selectedData.emit(this.optionSelection.selected()); + } + + removeSelectedOption(opt: any) { + this.optionSelection.toggle(opt); + this.selectedData.emit(this.optionSelection.selected()); + this.resetField(); + } + + handleOptionClick(opt: any) { + this.toggleSelection(opt); + + this.resetField(); + this.onInputFocus(undefined); + } + + addNewItem(title: string) { + if (this.settings.addTransformFn == undefined) { + return; + } + const newItem = this.settings.addTransformFn(title); + this.newItemAdded.emit(newItem); + this.toggleSelection(newItem); + + this.resetField(); + this.onInputFocus(undefined); + } + + filterSelected(item: any) { + if (this.settings.unique && this.settings.multiple) { + return !this.optionSelection.isSelected(item); + } + + return true; + } + + openDropdown() { + setTimeout(() => { + this.typeaheadControl.setValue(this.typeaheadControl.value); + }); + } + + onInputFocus(event: any) { + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + + if (this.inputElem) { + this.inputElem.nativeElement.focus(); + this.hasFocus = true; + } + + this.openDropdown(); + } + + + resetField() { + if (this.inputElem && this.inputElem.nativeElement) { + this.renderer2.setStyle(this.inputElem.nativeElement, 'width', 4, RendererStyleFlags2.Important); + } + this.typeaheadControl.setValue(''); + this.focusedIndex = 0; + } + + // Updates the highlight to focus on the selected item + updateHighlight() { + document.querySelectorAll('.list-group-item').forEach((item, index) => { + if (index === this.focusedIndex && !item.classList.contains('no-hover')) { + // apply active class + this.renderer2.addClass(item, 'active'); + } else { + // remove active class + this.renderer2.removeClass(item, 'active'); + } + }); + } + + updateShowAddItem(options: any[]) { + this.showAddItem = this.settings.addIfNonExisting && this.typeaheadControl.value.trim() + && this.typeaheadControl.value.trim().length >= Math.max(this.settings.minCharacters, 1) + && this.typeaheadControl.dirty + && (typeof this.settings.compareFn == 'function' && this.settings.compareFn(options, this.typeaheadControl.value.trim()).length === 0); + + } + +} diff --git a/UI/Web/src/app/typeahead/typeahead.module.ts b/UI/Web/src/app/typeahead/typeahead.module.ts new file mode 100644 index 000000000..9f0f9310e --- /dev/null +++ b/UI/Web/src/app/typeahead/typeahead.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TypeaheadComponent } from './typeahead.component'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { SharedModule } from '../shared/shared.module'; + + + +@NgModule({ + declarations: [ + TypeaheadComponent + ], + imports: [ + CommonModule, + SharedModule, + FormsModule, + ReactiveFormsModule + ], + exports: [ + TypeaheadComponent + ] +}) +export class TypeaheadModule { } diff --git a/UI/Web/src/app/user-login/user-login.component.html b/UI/Web/src/app/user-login/user-login.component.html new file mode 100644 index 000000000..346c77d62 --- /dev/null +++ b/UI/Web/src/app/user-login/user-login.component.html @@ -0,0 +1,28 @@ + \ No newline at end of file diff --git a/UI/Web/src/app/user-login/user-login.component.scss b/UI/Web/src/app/user-login/user-login.component.scss new file mode 100644 index 000000000..1e6e67f48 --- /dev/null +++ b/UI/Web/src/app/user-login/user-login.component.scss @@ -0,0 +1,68 @@ +@import "../../theme/_colors.scss"; + +.login { + display: flex; + align-items: center; + justify-content: center; + height: calc(100vh); + min-height: 289px; + position: relative; + + + &::before { + content: ""; + background-image: url('../../assets/images/login-bg.jpg'); + background-size: cover; + position: absolute; + top: 0; + right: 0; + bottom: 0; + opacity: 0.1; + width: 100%; + } + + .logo-container { + margin: 0 auto 15px; + + .logo { + display:inline-block; + height: 50px; + } + } + + .card { + background-color: $primary-color; + color: #fff; + + .card-title { + font-family: 'Spartan', sans-serif; + font-weight: bold; + display: inline-block; + margin: 0 10px; + vertical-align: middle; + } + + .card-text { + font-family: "EBGaramond", "Helvetica Neue", sans-serif; + + input { + background-color: #fff; + } + } + + .alt { + background-color: #424c72; + border-color: #444f75; + } + + .alt:hover { + background-color: #3b4466; + } + + .alt:focus { + background-color: #343c59; + box-shadow: 0 0 0 0.2rem rgb(68 79 117 / 50%); + } + } +} + diff --git a/UI/Web/src/app/user-login/user-login.component.spec.ts b/UI/Web/src/app/user-login/user-login.component.spec.ts new file mode 100644 index 000000000..938c7decb --- /dev/null +++ b/UI/Web/src/app/user-login/user-login.component.spec.ts @@ -0,0 +1,94 @@ +import { of } from 'rxjs'; +import { MemberService } from '../_services/member.service'; +import { UserLoginComponent } from './user-login.component'; + +xdescribe('UserLoginComponent', () => { + let accountServiceMock: any; + let routerMock: any; + let memberServiceMock: any; + let fixture: UserLoginComponent; + const http = jest.fn(); + + beforeEach(async () => { + accountServiceMock = { + login: jest.fn() + }; + memberServiceMock = { + adminExists: jest.fn().mockReturnValue(of({ + success: true, + message: false, + token: '' + })) + }; + routerMock = { + navigateByUrl: jest.fn() + }; + //fixture = new UserLoginComponent(accountServiceMock, routerMock, memberServiceMock); + //fixture.ngOnInit(); + }); + + describe('Test: ngOnInit', () => { + xit('should redirect to /home if no admin user', done => { + const response = { + success: true, + message: false, + token: '' + } + const httpMock = { + get: jest.fn().mockReturnValue(of(response)) + }; + const serviceMock = new MemberService(httpMock as any); + serviceMock.adminExists().subscribe((data: any) => { + expect(httpMock.get).toBeDefined(); + expect(httpMock.get).toHaveBeenCalled(); + expect(routerMock.navigateByUrl).toHaveBeenCalledWith('/home'); + done(); + }); + }); + + xit('should initialize login form', () => { + const loginForm = { + username: '', + password: '' + }; + expect(fixture.loginForm.value).toEqual(loginForm); + }); + }); + + xdescribe('Test: Login Form', () => { + it('should invalidate the form', () => { + fixture.loginForm.controls.username.setValue(''); + fixture.loginForm.controls.password.setValue(''); + expect(fixture.loginForm.valid).toBeFalsy(); + }); + + it('should validate the form', () => { + fixture.loginForm.controls.username.setValue('demo'); + fixture.loginForm.controls.password.setValue('Pa$$word!'); + expect(fixture.loginForm.valid).toBeTruthy(); + }); + }); + + xdescribe('Test: Form Invalid', () => { + it('should not call login', () => { + fixture.loginForm.controls.username.setValue(''); + fixture.loginForm.controls.password.setValue(''); + fixture.login(); + expect(accountServiceMock.login).not.toHaveBeenCalled(); + }); + }); + +// describe('Test: Form valid', () => { +// it('should call login', () => { +// fixture.loginForm.controls.username.setValue('demo'); +// fixture.loginForm.controls.password.setValue('Pa$$word!'); +// const spyLoginUser = jest.spyOn(accountServiceMock, 'login').mockReturnValue(); +// fixture.login(); +// expect(accountServiceMock.login).not.toHaveBeenCalled(); +// const spyRouterNavigate = jest.spyOn(routerMock, 'navigateByUrl').mockReturnValue(); +// }); +// }); + + + +}); diff --git a/UI/Web/src/app/user-login/user-login.component.ts b/UI/Web/src/app/user-login/user-login.component.ts new file mode 100644 index 000000000..9a9c44c07 --- /dev/null +++ b/UI/Web/src/app/user-login/user-login.component.ts @@ -0,0 +1,57 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormControl, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { first } from 'rxjs/operators'; +import { AccountService } from '../_services/account.service'; +import { MemberService } from '../_services/member.service'; +import { NavService } from '../_services/nav.service'; + +@Component({ + selector: 'app-user-login', + templateUrl: './user-login.component.html', + styleUrls: ['./user-login.component.scss'] +}) +export class UserLoginComponent implements OnInit { + + model: any = {username: '', password: ''}; + loginForm: FormGroup = new FormGroup({ + username: new FormControl('', [Validators.required]), + password: new FormControl('', [Validators.required]) + }); + + constructor(private accountService: AccountService, private router: Router, private memberService: MemberService, private toastr: ToastrService, private navService: NavService) { } + + ngOnInit(): void { + // Validate that there are users so you can refresh to home. This is important for first installs + this.validateAdmin(); + } + + validateAdmin() { + this.navService.hideNavBar(); + this.memberService.adminExists().subscribe(res => { + if (!res) { + this.router.navigateByUrl('/home'); + } + }); + } + + login() { + if (!this.loginForm.dirty || !this.loginForm.valid) { return; } + this.model = {username: this.loginForm.get('username')?.value, password: this.loginForm.get('password')?.value}; + this.accountService.login(this.model).subscribe(() => { + this.loginForm.reset(); + this.navService.showNavBar(); + this.router.navigateByUrl('/library'); + }, err => { + this.toastr.error(err.error); + }); + + this.accountService.currentUser$ + .pipe(first(x => (x !== null && x !== undefined && typeof x !== 'undefined'))) + .subscribe(currentUser => { + this.navService.setDarkMode(currentUser.preferences.siteDarkMode); + }); + } + +} diff --git a/UI/Web/src/app/user-preferences/user-preferences.component.html b/UI/Web/src/app/user-preferences/user-preferences.component.html new file mode 100644 index 000000000..b6e2c5a36 --- /dev/null +++ b/UI/Web/src/app/user-preferences/user-preferences.component.html @@ -0,0 +1,192 @@ +
    +

    User Preferences

    +

    + These are global settings that are bound to your account. +

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

    Manga

    +
    +   + Direction to click to move to next page. Right to Left means you click on left side of screen to move to next page. + Direction to click to move to next page. Right to Left means you click on left side of screen to move to next page. + +
    + +
    +   + How to scale the image to your screen. + How to scale the image to your screen. + +
    + +
    +   + How to split a full width image (ie both left and right images are combined) + How to split a full width image (ie both left and right images are combined) + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +

    Books

    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +   + Direction to click to move to next page. Right to Left means you click on left side of screen to move to next page. + Direction to click to move to next page. Right to Left means you click on left side of screen to move to next page. + +
    +
    +   + Should the sides of the book reader screen allow tapping on it to move to prev/next page + Should the sides of the book reader screen allow tapping on it to move to prev/next page +
    +
    + + +
    +
    + + +
    +
    +
    +
    +   + Font familty to load up. Default will load the book's default font + Font familty to load up. Default will load the book's default font + +
    +
    + + +
    +
    +   + How much spacing between the lines of the book + How much spacing between the lines of the book + +
    + +
    +   + How much spacing on each side of the screen. This will override to 0 on mobile devices regardless of this setting. + How much spacing on each side of the screen. This will override to 0 on mobile devices regardless of this setting. + +
    + +
    + + +
    +
    +
    +
    + + + + +

    Change your Password

    + +
    +
    + + +
    +
    + This field is required +
    +
    +
    +
    + + +
    +
    + Passwords must match +
    +
    + This field is required +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + + +
    \ No newline at end of file diff --git a/UI/Web/src/app/user-preferences/user-preferences.component.scss b/UI/Web/src/app/user-preferences/user-preferences.component.scss new file mode 100644 index 000000000..761d937db --- /dev/null +++ b/UI/Web/src/app/user-preferences/user-preferences.component.scss @@ -0,0 +1,3 @@ +.invalid-feedback { + display: inline-block !important; +} \ No newline at end of file diff --git a/UI/Web/src/app/user-preferences/user-preferences.component.ts b/UI/Web/src/app/user-preferences/user-preferences.component.ts new file mode 100644 index 000000000..2f66704c2 --- /dev/null +++ b/UI/Web/src/app/user-preferences/user-preferences.component.ts @@ -0,0 +1,161 @@ +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { ToastrService } from 'ngx-toastr'; +import { take } from 'rxjs/operators'; +import { pageSplitOptions, Preferences, readingDirections, scalingOptions, readingModes } from '../_models/preferences/preferences'; +import { User } from '../_models/user'; +import { AccountService } from '../_services/account.service'; +import { Options } from '@angular-slider/ngx-slider'; +import { BookService } from '../book-reader/book.service'; +import { NavService } from '../_services/nav.service'; + +@Component({ + selector: 'app-user-preferences', + templateUrl: './user-preferences.component.html', + styleUrls: ['./user-preferences.component.scss'] +}) +export class UserPreferencesComponent implements OnInit, OnDestroy { + + readingDirections = readingDirections; + scalingOptions = scalingOptions; + pageSplitOptions = pageSplitOptions; + readingModes = readingModes; + + settingsForm: FormGroup = new FormGroup({}); + passwordChangeForm: FormGroup = new FormGroup({}); + user: User | undefined = undefined; + + passwordsMatch = false; + resetPasswordErrors: string[] = []; + + obserableHandles: Array = []; + + bookReaderLineSpacingOptions: Options = { + floor: 100, + ceil: 250, + step: 10, + }; + bookReaderMarginOptions: Options = { + floor: 0, + ceil: 30, + step: 5, + }; + bookReaderFontSizeOptions: Options = { + floor: 50, + ceil: 300, + step: 10, + }; + fontFamilies: Array = []; + + constructor(private accountService: AccountService, private toastr: ToastrService, private bookService: BookService, private navService: NavService) { + this.fontFamilies = this.bookService.getFontFamilies(); + } + + ngOnInit(): void { + this.accountService.currentUser$.pipe(take(1)).subscribe((user: User) => { + if (user) { + this.user = user; + + if (this.fontFamilies.indexOf(this.user.preferences.bookReaderFontFamily) < 0) { + this.user.preferences.bookReaderFontFamily = 'default'; + } + + this.settingsForm.addControl('readingDirection', new FormControl(user.preferences.readingDirection, [])); + this.settingsForm.addControl('scalingOption', new FormControl(user.preferences.scalingOption, [])); + this.settingsForm.addControl('pageSplitOption', new FormControl(user.preferences.pageSplitOption, [])); + this.settingsForm.addControl('autoCloseMenu', new FormControl(user.preferences.autoCloseMenu, [])); + this.settingsForm.addControl('readerMode', new FormControl(user.preferences.readerMode, [])); + this.settingsForm.addControl('bookReaderDarkMode', new FormControl(user.preferences.bookReaderDarkMode, [])); + this.settingsForm.addControl('bookReaderFontFamily', new FormControl(user.preferences.bookReaderFontFamily, [])); + this.settingsForm.addControl('bookReaderFontSize', new FormControl(user.preferences.bookReaderFontSize, [])); + this.settingsForm.addControl('bookReaderLineSpacing', new FormControl(user.preferences.bookReaderLineSpacing, [])); + this.settingsForm.addControl('bookReaderMargin', new FormControl(user.preferences.bookReaderMargin, [])); + this.settingsForm.addControl('bookReaderReadingDirection', new FormControl(user.preferences.bookReaderReadingDirection, [])); + this.settingsForm.addControl('bookReaderTapToPaginate', new FormControl(user.preferences.siteDarkMode || false, [])); + + this.settingsForm.addControl('siteDarkMode', new FormControl(user.preferences.siteDarkMode || true, [])); + } + }); + + this.passwordChangeForm.addControl('password', new FormControl('', [Validators.required])); + this.passwordChangeForm.addControl('confirmPassword', new FormControl('', [Validators.required])); + + this.obserableHandles.push(this.passwordChangeForm.valueChanges.subscribe(() => { + const values = this.passwordChangeForm.value; + this.passwordsMatch = values.password === values.confirmPassword; + })); + } + + ngOnDestroy() { + this.obserableHandles.forEach(o => o.unsubscribe()); + } + + public get password() { return this.passwordChangeForm.get('password'); } + public get confirmPassword() { return this.passwordChangeForm.get('confirmPassword'); } + + resetForm() { + if (this.user === undefined) { return; } + this.settingsForm.get('readingDirection')?.setValue(this.user.preferences.readingDirection); + this.settingsForm.get('scalingOption')?.setValue(this.user.preferences.scalingOption); + this.settingsForm.get('autoCloseMenu')?.setValue(this.user.preferences.autoCloseMenu); + this.settingsForm.get('readerMode')?.setValue(this.user.preferences.readerMode); + this.settingsForm.get('pageSplitOption')?.setValue(this.user.preferences.pageSplitOption); + this.settingsForm.get('bookReaderDarkMode')?.setValue(this.user.preferences.bookReaderDarkMode); + this.settingsForm.get('bookReaderFontFamily')?.setValue(this.user.preferences.bookReaderFontFamily); + this.settingsForm.get('bookReaderFontSize')?.setValue(this.user.preferences.bookReaderFontSize); + this.settingsForm.get('bookReaderLineSpacing')?.setValue(this.user.preferences.bookReaderLineSpacing); + this.settingsForm.get('bookReaderMargin')?.setValue(this.user.preferences.bookReaderMargin); + this.settingsForm.get('bookReaderTapToPaginate')?.setValue(this.user.preferences.bookReaderTapToPaginate); + this.settingsForm.get('bookReaderReadingDirection')?.setValue(this.user.preferences.bookReaderReadingDirection); + this.settingsForm.get('siteDarkMode')?.setValue(this.user.preferences.siteDarkMode); + } + + resetPasswordForm() { + this.passwordChangeForm.get('password')?.setValue(''); + this.passwordChangeForm.get('confirmPassword')?.setValue(''); + this.resetPasswordErrors = []; + } + + save() { + if (this.user === undefined) return; + const modelSettings = this.settingsForm.value; + const data: Preferences = { + readingDirection: parseInt(modelSettings.readingDirection, 10), + scalingOption: parseInt(modelSettings.scalingOption, 10), + pageSplitOption: parseInt(modelSettings.pageSplitOption, 10), + autoCloseMenu: modelSettings.autoCloseMenu, + readerMode: parseInt(modelSettings.readerMode), + bookReaderDarkMode: modelSettings.bookReaderDarkMode, + bookReaderFontFamily: modelSettings.bookReaderFontFamily, + bookReaderLineSpacing: modelSettings.bookReaderLineSpacing, + bookReaderFontSize: modelSettings.bookReaderFontSize, + bookReaderMargin: modelSettings.bookReaderMargin, + bookReaderTapToPaginate: modelSettings.bookReaderTapToPaginate, + bookReaderReadingDirection: parseInt(modelSettings.bookReaderReadingDirection, 10), + siteDarkMode: modelSettings.siteDarkMode + }; + this.obserableHandles.push(this.accountService.updatePreferences(data).subscribe((updatedPrefs) => { + this.toastr.success('Server settings updated'); + if (this.user) { + this.user.preferences = updatedPrefs; + + this.navService.setDarkMode(this.user.preferences.siteDarkMode); + } + this.resetForm(); + })); + } + + savePasswordForm() { + if (this.user === undefined) { return; } + + const model = this.passwordChangeForm.value; + this.resetPasswordErrors = []; + this.obserableHandles.push(this.accountService.resetPassword(this.user?.username, model.confirmPassword).subscribe(() => { + this.toastr.success('Password has been updated'); + this.resetPasswordForm(); + }, err => { + this.resetPasswordErrors = err; + })); + } + +} diff --git a/UI/Web/src/assets/.gitkeep b/UI/Web/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/assets/fonts/EBGarmond/EBGaramond-Italic-VariableFont_wght.ttf b/UI/Web/src/assets/fonts/EBGarmond/EBGaramond-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fa31b71df0c79f9837f117b5b773bcfd2ef6a3de GIT binary patch literal 829752 zcmd?Scbr^TeK&m1?Q`$k>1AhjW~a|=?@ik@t6lA??5=v3C9P#ymTkGn1$PUADGr2A z2&N`H>FgpA5GNlX3FOI#JWmL?V1sRNFvZCOCcx_b{?55GJF8-BWAe}Ik3Qbr z-<*49=KOj+5|bn;hX1M3vH97JbMM}ru_fbu5lPZE&2Qhf>mA?wNlG$4cvxcdQ}es_ zY>3|XpI?*AZ+$?L3VS#0o!i_zvDct6&ERg#uIa{Shtvpbqwwn;|j zk0pt{<;ojQp8n8q^J9_`z<$2ym3aO)?mP8PJpXPyzi@K-rW^1xfY0m2PxIupw_kbZ zf6l%Q&t5C($N&5!)_Xs__;->gt4hk72d_G@d`0Z^cYh@5?;6DV;i~{}{wVSVy#H?e zUA*e_&9`l6e(!0#eyt>Ref!$$k1v->>slrK#3uax-P6mr-QZgczXN}_Vtw|y<* z|F%-;XSYc5xrfjFR9==pCM`*qNx!r8!Pf2ju`QELnVDxL(~wQ$9*Y_HbcTkvkw3Di ztBOaJqz9y>=B*EQVR;_!F5f3Hlii00%=_xg8&+1!7h9y$p1S_PBDPfcmIn@0(>t~? zY5(4Bm+iQ0anr=Q?n=3sh=+sH5?iwUu?{0&u9SyIreyJNpnrH|czB>cW+-|r9*adI zdLdsf7xH=hbQg{cmkUN-Hw?XDNg=PZ5j;#Uir0!>OJ?Cfs;4!u<<2t`-jG*~`n^6| z(^T~;E0_udd_kwJI~pqG?5M&5POcO+GHTd&Lm+IP3@Jg|_6597C7GFLhpw@`YOlgH z)zUs`$eM1L9@UIxLOb90-bH_t&*ubeZ{+7c>TNSs`do^_yoN37{!HpMey?oUZ)$3G zRMj#KUDjEJc>`bf+N$}S|(S$@2-7{TVy?;82JARbEg=>yJLg{v2ObKKHqEKUHp*-y?lY z`Xoy{)Xo%@Eo^=$+7;P)^ba_IV63IeJm(=1WZBy*l@X0DGv=2hs3}u_{W(= z*Fkh(l%YXzQ@KDK;FApFIZO~uA;|inP59CCC;NKv01l_*J;xc{?_yX8g`C> zImLTo6{F`l=YjZRWv|2Ja4C71AenVKziS>B{2E55s|pcyK)C1Pqi;J0NK^g4aX%rrZ8wXLd)kaDW= zw+7R|&6Z{k7ui?9vW{YE9=xP$nwh9ZZ9~(7C6CVzdeZy$G{?eo zdDZ@jrg{F$(!eF08#tqq{(>No)11KsoETNWpO)#Ta_+m3_0#g(q(Ny;+9SRFA(?49 z@efJyRxdN5G)&`a@B~{{pi78JH0^;!o9Vi=tXi^=`qkdmrF@MnW1+{REK7=V(MJwc z3!CPLhnTcu+x(tQdnPA_=7#6`dwaT?6Y(fS`yd;1K(_Hb2$je$45}?RP%TjzBs-^2 zkP-a`G9zjm>7SB8!$g=MB)k^p`k)R{o5I0Tul;5_nD=|5-e5fH^OsBB*&W6F@KoAl z>ex){=F8W$kEWXPrLW~@MsvG%8eX}oDPB7^6z^*4-&h?F2jwYMvrR(*UfAE1(z;?8 z29cvy94{0{TANg6$gxdx9h-(yhN>o;`)67=Zn8XI59Mvk$Br0UbZ($+-0(c^hsa(! z_q_bD{990H<%g!2ZV(2dz`&5C$_7Xb5=;k2-BUYFwhVdokwqw9e#{UIgbtI?@lmdX zN&JmSvZiXXdR9^mO*J60bnPO0csv(APS_v2#N!@a(mm4I^FPX(4^W-Dq)VT^-r+94e&}G{wTqrJ%4uYC-Qf|{~fR+hpPjiBV}1-#I*Q| zvMeowj5&{Yb?VaaVCQ7lWHFy@_IW*q)S-8Hz@r*Bu3X(gCKz~im09WRYrI+!tjXDw zjI$V<^i1z8h0<9_-C{NuGT&=9cgOsmkhgV1CX&v?kGy5u)R_+++oy29j;$+kl!8A1EZD>@f8=~E5cqgmdS zzkJz81m(exNFid2aUy(@O%w6dj!xF4INn#?my{Sf(j0TehGqCS8B>=w*9%Ep46OIJR!6zpK4m zYzj&@vKzg^a2XoBPy@JR1>2t3m|GaavVhEo89_RO*p z1$tCH)19_pEOZx~;J<`?Okq*K84udQ7GIzM!z!j_60#@usex?3wlh)P>(f2uir2Ck z)U%=hTO2!Flq6kI(#EkU;N%Mk_&1rb$pxISF5pixh>rR`BuWJQ3D(pACm%t;A6c`W zM2vtxx@JB3CIbGL^v@0ZkVzuoPuJGNcK~(O;ooDQ=T!G2P~DC4d!?(Sk8FJ~2o1Ha zZb};_RPh-Jf}70xQ`{*%->kRo2No@_Ah~8}w^iQ&&)R2S`ojmR877@PaeR5tj_upF zZr)Ix9P8^YmzonzA?Yf1l`vb#R5_n&iR`!zB9g5WWu<0pD`Z7;L%B}5ple}{=UsCq z25ndOXLX;~3tOgWzuDWA^IKuBJ(KzH>_$~nz=?i^>6W1~OAGnl9`ZloM$hbb=c3yhSyjUu}?3b{X^2K;OE&VX(r7avx|;y#7l zSG{3R&-ASyI-KnZ`4e8vt7}%xVv%hv0-G=3^i?*#=0IQT^kTVt*pt#cKBvjFqG2aq zEW{IqL^KeHB|V-X93Z`I-Iy=8;l%8|_gp{ah3H1$K^3-(<)q`i(O`Dt&F@&~-!_^a zD4Y(5V6wooF$_~tbf4x`)Nmv`&|!Lf9$#}5p$LIv9&#vg@$*e~6|uVuCov=7PqI@D za1t{D{sggx(PTgLs*YmaOBG)qLxK)#cmVni(k! zRtD$095v>FYa}a9z^D4wZ^@2tDOM))?F;@^J6i}kvK(@n^O<;Qkc)gHn}2)Pa3b8j zp}(WEb3AT_Ex+!`6%$Npij}5{JsWzWiP4@r^I1b7tpHYr#=Y;{s2swV-X=}MwpM^+ zMTK3DU=q6r2LP1ZBgqCsIPe7gGkqC$+()z}CQVJ?0GeVEA22IzW7|xjQMu9Ln$GoO zz!`9&gIzsC+2ImYzm|6vZ<+2K z%=9F}<&fS4tI7;Q5gJW1^DTqZEjtgWiaI;ny8ZUw{(|naA~8!hykm#2?wOnjh2XDP zNhP#&a;SAO7z%V{Z79!VTf&6f84DLCDq~j_5L@&eo$5V)Xj41R2W~8)N^g~JmEI(L zS1S$8xgT+1d7-)L{$b#c1LEZr;-DT$@to9DSTFEuZHlXTb=RHE(#uA}%aUQh>9tHa z2O=m*I^gCTZ@BLG^1eO0c5GXm93LBKEvKTOwOiS(m(~H~t3U}5Q^R*PbeN7V+pqGx zP!e?f=LIkc8?Igf0T*(4*TY@a2s)h9U@)68-ec=IvZE8JrcgN1l4yzqoAOb8QueZK zx;kn4#jDwLG#E<2`Yx54Jnt}^6qoONCQV>a*^*!!Fx^1&BewRIthKH_TK_utqwT?{&p|f&Fd4wVUdU z5lA(yOvGCPH5QASu{3)(q1^k=R zgLU{f`2h*|6Vj*a@bB@EzJNa>eWDKkoI?6lz#nZ`|GE16>egdt$Qhtd^Fto!7ptFk zSAS>aNjm=eF5i>BSl|6Q9<3MapOQY#(Y5K^DElpZ+X2$vMQCk87rc2UpM@R96&Mdc zC{SL7TsGm@x+V><0bM9AAtZqt5~CLj3c7+-@xhwbk9Kw1j@cCOwge*iLii8tAUBf} znU-iUnxqs`Q_64N-Bik?e5vU#lmgMFnC%HAW~*}N1wt*5im#m9c621`PnU2Y^hN%f zANQD`N9jHM3w|G(D1m^=z0y>5d@@BbQ#i-WV6t%*nuY?Xq)QO2FhzoaN%!1!$8AUV z@7psm+*$^m-plT#uu7by2-ztY34PYp2b}}CyTVJL)8Re_z0Pe$LyzFF#6J>EJU~Ht zFjqoRDxka?Dy=VpG6uz$ZBFsz?Ld zBv{(j*0E)wTUEyQ7vdd>0Q66Dxv$&yN1{kt_#%GQdW!~AK$VBR5uk$9Qz8skg9o^C z@HA?tj)P)cl{n4Ke{JZ|;HT`cshBE{d8_n_(UQ(g&bFx@?dr3ISkR!H8H^=_uMI=d z5Y&H`Wd3J6po2)QaQ}m-SZ)XP%}8U_krdMiHyR@|>MTq+jvQ5$mUTDg#iR}6{k?7F z=B9Ww5|n1x4B1aF0WlCD=fxNr6CzxiOjvKVp@iuSGO0+sSWd)a!DL%Xf1@2JZ6BEl zhm!%Ei>BBCd^xYNZh7xQq15jlRe^n}7EwnoC35(CmVYK$tMk>3Xf7VxjLx|osg;EWA8Gwckz{oF7za*X}ixnX4F zgpTH?8ARrwTAl0$_u@Qts9#+>i}(}wwIm7Q9!+D*aLX8bfGveXyBB9SjE{D;w^ho8 z(4O#~HV>&#y^P%KdS#eYs9#ooG4;RrAs;hr`b0UQA%$a_@Z-|Sm4h+enS1m7bJ1qUr^0J7 zZ8*ib;^Bvn&Wvh!Ts7f2-gaVA7qp-Fowhbfss+M%xzeq<+JLktz1)Dx zfY<8{_LPlZx8!s=7>j7l-Ibu}Q=gI@q&d|{vbiZBo8?{v0h$NWk(N>_9tkGWAzO}R zi`lpWl|dz<88G8k#eLed$AY8RW>$6MMH zvW(O{d^L}`(xUn!_QbA(J4Vey-cbEInfW&IuCkp<>gx|*b!^TKguOmT*KIr^D^{Sq zbMM|gJBqdw43>_azHvBJGJ$N;7cxamIl{PXoDs5-L6_Iz6tWQTC)r)3<0X0J1?8`R z;CrRr)g7v^Iq~^CGBR5xKB5Aj+zYUD!a$ysoJ-l`c|SrE$mKpjmd!P%uDbHX@txbZ zY~HkSps%;9qb=EF>ZJL}bAuN?`N%RxDkDV8!ZB|JPezVbpM?=y9|u)aOn8_2C6U$<^-A_G$` z*nQ;Kk?wSH6+40mTAJ7g%bf{B^;s7ZK~p-U!S95Q2S9{#}>Nk zc%;%1fybxV9l)c^lWPwlsuDzqsjJ#fNs47~CxS@ePNcU*GBO-u5-KT5;gV%aK^7!a zlyY8f{t?IElabj{V1q$=QpOR9t)8Xhy#rUg)Ag#xc~Y)#(MUSxQV}qI8CBZj92uCFdC(bAL8b}fPb@= z5ae(QqY3yEY#-6E_>SEC7w|`@608oVsJwtbMp1lmCRqKb)Fn+zv(@Pk1(y~ig(>&d zvC01?WiD8K!9~y)g?vJL0r~c|OKxNBa3hG0 z`yJC~m_d&dvf4wbz8ny1$F{W5+2;oKUWY^9J3O$De(o8*$f10L9c(x(N>zx%dYTRw zF(N|7*W~w03FJ@LOQXow)7g-j|B*#h5;S%MUhVvl?6X)|3TdWh)V_>kH^e*Ym)i-SM zIf`y%T4b*y!%%cHg_iBumUC8e;7WKA@s|*1v#B)8r84+S+EE-VFLi)1>Gi71z5w#H zs2NZcY1uF6uaIZbJKp@-dvCkthSR4`9zL{h_qK&ib7KSfcNN~1N`?ZU$Q;X2EmR}( z#*I~`1#OPRb-i+N(^KeAQi(*cki5{X1=n>V#0lKtCGn4o=9iRlWHlmhof!_tdVzZQa7hM~byAr+D~v(0WmADWU*zrjo9YK|C*i{@1w$phOE(LmApfmP@= zWYRkAH~13$q`I_h*=M(RIqQ!NbuC^#WMz@wNI4y|ZH3u>(=xPoIdP4q{LTd%i>>96h5MJp%@}g3x z)h(ik5e%ZJ5@J}0i{OW>Ud_W=DB*!T;is{8*Us&;8{nUo5H#4w_Ps>k)TnSFbN<=5 z>gytB^CH2oe9R1LM#j7T=y3PaiD7P#s<@jb?+YQ z+rBO%&P-7~xxV$4_L+)-Lwj$bF(V@NtUNFOEkw(H={FymWr(jJlbD1XHH@lch9o^w zLT*|Fg)B%UB3;F^B8$iiYs(NP9~D&y9!QT5qh<=VFBgB%#0nE>l?yk}5Ft*Wcne}? zbhxLht=y9GqS#N`&-PowjH`&?3KthJ7bw5fXeCf-C904?p*0OD#0#7$fh3_YLEcFG zD{^+|SXalv{$LiBCmvI6t8U&9JM_k_xs9U(2R03+Du=frgHcdZK`71sTm60q?W z1xJH_u7gtPmffR1-)~{{YCw1sdaRkE0AO>Q<;s31=G9s&TDYz33>+LC*w*3Gw5D{z zh!oRKG!tp=DR=^vg5!-f$Nb8W?Gu!ojDX`=Fgi8WwsFW8_Irl(u!zcl|36j8IpkiN zI-I7n7JJ|sz<;q^nlN;6zU1L4eoKfScQB^@#BKPYzAqf=}q)Ujn`VBXGVKOgtQ z7U74=b?tsv*Jik`6>xG&1pG;yHU+|;Klek~0YmJP?%w)f3Y^d-F{%_tV3q4mgvF>D z6IFw7n3ll>(5GbOnqYtr5d(D8*Qi$1q{)sJDAqrf7)&}rMYA;>mA(E@TvHrV zO$@bF5BQ7Oj>(auTo#*k@qDFlSx}QPY#ufspe=Hw&hWF)HS~a7Xb_W z#6>xz5JP1cE&^HP3Ub~N90er_MBoYf7p~P=l1)mBT2PDNli9&iN6*Gt#p;XN4Eyt77Q50CqpA2C}0()LL3f@6cBmzcmj+ok4)+|+s=M|I_(lhmi zTt)2NxntW*bz-cqr@a!3_`RgA>%vZ)alJ5p)n2LND@Vx=`U}WeV_ja;Y zEH}skB~d$a2fFk<4^%XTbn*|dIgbf}n5Cw(XUCwLaudGRbRH}rXl zxod8|Qrvt|Rl^qRRrMBg<)g1Ip4ft^+Tcg8f92z^0?NQO9A#XrUCzbbldOw#&z0w% zS0-SvZjpMcT{d!fY@t?10WLxQq$ZFi#@6-cv#8v5q%CX<8SGROC2V!B*dhHv)`F(V zD5t;O__C`dU?XuLl!Z|XGeh=t_3j#Rq6h7uFO&2}+mo@fA3YS|V4&>XA4@OvZ9ZNN z*@>7QQ4&p_Afkb#vg3z|gT4}03N$6d(T+rF=~iE+dc_=TE#_2@L*YPFBxq_|+seOg zInufD`t{{)vyq9hCLIC}COzbW?lo0^_rS>6jf;0|#0l|};0oacKcUCjYq*jYaH_Qw z@Ncrq8sHSA5%4G2l?`yJsTA->*pUV}MQH^5F$N<5@{9IAE&oK?OF@Tmlsym@;4;AU zy$>Nzp2=E+iMiR)8YcF#y}uMD*2Hgw!OAr^asZb^i?_{ln4{&yY}|+-MsGL~j~{4B zm5_Q3IjA2)SjQXmWV@oVl$9E|By!3vD_;b1Hr=%po7+(?bR^IRM95J+9@9ok28DW} zX>T;2FwK_amiJx)QQvT@&jg|-p5!E6gMUvn!np{i1~#$&TMVpGCj^Rs z2>4U%Fh|r!fv9#kxEm?J2)=+uM>{6fC-4M-R^yb>;i2AmFyNCmvW*mAgc;1WZ=DN> z3HrGi#Z>?$zYwlqjgf!OON0>OC+1T=>x9g7*^r%9ssxIRWJ1NP?e#`|>6|`;DnAv> z&{T|ieE~D%b%qj|Qk;Ud$*J_pTLY;?$d~E<{qOF|7Id%$wxramC9BEu%9TN1D8LSO zjv&2FfmiZ)4O=tv#g%HfoQ*)*%PWub@4ZtxF3nV{e&qPcmXUQC{diy{oPfwzLGz%P zlS~+RVY_!RY1i@H$E#D5qg|a@r0AucY$sWjVG7DnKwLMB!-w{4*<78P7;bBY-5!!|XSY+iDoAdS zY9P<+-l!3so8jxH)2)jD5Tq-eU9wYjzF-wU^ztg%GOj}f5<#K=3$Z*q77eJH){^rF zV*bcTIaFw|z5b-H3AL@h7QYrqF@Gx3Quh0sy#Aj4a5$d{Ahpz!(MGjkk}1V#s43tH zdp&JEL6?Fvqb)1H5p2sDK6LgeRxD<%e9A$kfiK-29li68tIO?Wlz3Ta`_O?T5Vh>f zWiR`)qxmeWW-Gp?Cgc-PNRHw$#o?s}g_X1U9GmSLPN|677%=pR;t|ZumsZwC2a1W- zj?l#GUN^CFOQ2kcK^$<@aJ_Jo&c$38{mRFGsGBFU(hmU|o!kM6uTivRqf)iR1 ztG|p_OR$7OP2Iz}_dym7+UZ=_7fO2L8}q3)2a&l@+3PQ;j&)5ogmx-_$Q!Igo2SBL zK7~idldpFSdBTjemM9|U^pD0;?Ln_MWfel6PQ}vS88DpyNkFGJk(nlI){&J^YvCjQ zRMRJ0OYqlG919_a7mz$EjQpC9dG9H=hEy)w7$ucVP0RMA-sbmv9!a$XEnbC!ASDSz z#Z%6G*p|(Yhg0Bsd^1G+!JEh7V0;}W(lSph$%u5KN|_P^lm?`f01x3EJACLsb+n_c zB_=JSLP9X1YhhCA7H5Tj7e@eze{u^hwgN~H?0SAUM8A^)YE3@IXjglhX!&J5vlK=Qc!|I@0gXchu^g zDJ3h;k2BEif`J(3E7ak{Kmz^*D>T4~fdu>!%tlyUPYfjBk4cYk2BJ!!-v)jTNgJx` zp_LIQ(b2r50o`twC3?e-iYSSuNk>UR0c9QuN!z(~eZAeqd@3#-@*EOAcCFEQxDTvD zG8AsLD==3{A5cibcnlI1h=V=LeQxjp|C?|rBqe{4{it~GvOSr=%;sjWadX+f@ut%^ zZ&cM_U}AnI5!>7h=L>-x)sr+dpY82Q6c1%88>)HTQWocKI(1z&o{scpqSG5<1N$>@ z@=O+PZqii;E-R?er{!AxbGP4o`$iQikHXDzN0*H%am9y5>wtr0^j{czow@dwElI?m zQBP?M4Cs#6FiTw(k8UIG!B3H62~HbNQkLn|T{y+41pGwk=4n9=fPjzLmUoZg!b1=@< znw?Lffv^@CK(Ormw&>lvHcT_=vO~L;cQ2!Ec;|+l5Vz|pxnz@LOI21qzrh)TQ1C05 z7xJlMdOK_6ZIH=(~3CA>9_P2!c2bI9ndbtTqVB;0h%`g1M;~q0Rs#j(fznEd;Ycp__n;fFwcqog6BTf^C zE6$e3=SfR7oG2NJB3wLSpRuE92Qvq3r>)vycwu6pDyRoNr;$>uyfnCY&!$AVl4zay ze(Q91V#8E(QTJzU$F0>vfA}qh-hc_YXEUuSYS~6}%KlwnP$_L$H+Q5Lq?Jo_O_kU0 zYzlRqYV9h6UKzqwx61Ehekp(?$Nis0tLi5t_Gj|_RCtGs1DuMh<^PRD!|y({i6KGZ zwu{e78WQyygCLVVvhJZSOw^^^LwS0Ig1;YFq+glH-XnGhvw+&-L^~$+#vzP|iZjZi z%+>co$P_s(?1|S$38G=8>=ZA1aO)vtKbk0sfrWZKl7 ze*T8M-BB-F9`P zf{4p6)d|K44;mh2BVu3%C6&eBFSBtSIErn}45T!*>>!k(`<-B}CFwy!*eh&dSB%cK zmSCXS@A3GHG z#g2~X()9X~O{1H7+6y^qT|%q*us%%jQp((u^Tsjy8M=jwSAB zv#&I#(SO+A-)atQZtdQ2YAjhsBPt?T#-QvqukP!M=rK#h^Zua0;Ke%ORPY}QQ%#9* zBw2_WZ?TeCwlD~Op) zijD4cW_b+sEAk$Ud={}%1ibt6ALuCf>{xX^Khy`Y`vh?FdYFZ0q@C4m&^WMDfe6=p zM>9L-y&x=&Ch(&ID~f`G6wC=*wov?MK4324k2BKgYfc?loSU5-8|?4t%4SlDNYI^A zH6%h9!!Y{D?t=#6hr?-@I_=1M6vr8LOUPHx8s;A8o|G833E~ZLQE-4RPFyU)ar@*L zMhd{;lRdhLi8Gd&EM1jv^-gHM;AP>I6QYJF%T~~x%Vc=r%%47P`s58--2An0DeQ?@ zaLQGWVkCXCPg8qx*-g2^;BW~okSr2vE!%Ign+q9*nj3R1@zUb&jvlQcouEQEji0ezxYCSz{mvQHh3ZOxOow*V-A-x^cFrInX#D%357U!r}y$qT!oY4b(xhF`Xk90gGw?Tr@1D`+PNrJOwXf7urx zk$a_FwS|{J@tn6J%r7QYN-?k0i;Noh3=zz-u=RzAEPQtQ0T;rta(LvD@a_+56Dbr}=4EhbyqS zK6z`t(;tb1FqkZ$Bb_07V|ZJlBW<9$I_+p(h5v}U3X#~PTr#3XBAZExN$OQ^%lJ0< zH}G_%xtfl|=ch0lio$p(Y&+SR9wn|f`f^v?K;VaKZLl!kEp4gJzl|YEv4B}eGV{o1sYMRwkA5*eWRusq^FchkfaJ|@eBIgG zUvukCXKpyQZ_B2!zG6ONOYdgyCUX$X)yP|<$JVeGg|T3}2(h%vf0tN83T^}&a3hAV zAtvQUBOj$C2)K~PMzkeYg$RnE&TEhxOZrnsrn>go&3?|i@xDx?oV6UkEQdoLEZF7v zw0yC9$IM`G0*eAva^m>2#YlQ2u)1o0zznu#JGNE_LzAYHbgZzfro4$}U+0D{tWpb= zewaCtLeML-kkgb1c*Cu>7nuX%Ty(u?$)V9~-&op%7DC^|ST773 z*stMCWaa<1?cLn9?y?(({|2wZP9piiCxD8VpBmXS)-rVHhVj2kHv4FlmCazp)6BoZ z%EW3DG3IRqY*hYfTCx;r>1;#WhG%eA7(~3`=!|q#^+a`0R*Zej(vc2k78yb?U>$D% zAR54Z3FQ8kkujwTFe;{Yf7Nws83vQ}fQ3?`Yp*_f+2I50C&$-~4p&N2;k~$L z*coa*I^U!T0a1igVbg#VV!vz;5^C2Pt(wBZ(o#iNlCO5}kzXy&?Yg$!`#bkxW(f!-(a58{CNfcNnpXv~A@X?3C zU=c1d)vA6Jyo+Wu^~35?rA)0U+qQ1mGyzYeyuGr$u}!7s!o66V3bLwVGN%~XrW+L= zAFEBy1xvb`L}zVVm%ICp-G5-~a!>!U`}YnWnD1{+Pxbfhn;&Ryo_yNzF}2XzZ+|AD zqDXYI(--U+X_?((r9VkSP&ofIL%||W#_P=AC3;`*gL+?Xb9-N?9b;tW|G1BSR7p_rC~r+g-PN(9OuFjIqt_j~Zqvr`zFejSsY9P*NcAH zhQ{h%&~ED757>`T={X}^v-Lq6VV@GB3~o6g^`oPMkku@th9;}#m$DAkylDGn(&)%Q zAF8h+s47A0x|>}js--YEQusoV0xg6T{tsds2m>N`7aMm~ft=MbdVf2#wRQ6NXz%`! zfnvu}S@n5PXkxZFn%@ksD~`_RTW5E56ehY7y>01gHEp1-M>d*h&~9N{AUoMMvu}Mm zF|x6zoShuPj9a~FIBLRu^=BvByJrSEP3?2#mYC&TT11d(ApO(-`u&h zxOM%+=x|p@xsXbtd=sV47nW~U^5k9!lIL=hOWv1RyZNz(n!sDzH$*TBFoa&@L?GO? zIL3CoqMA*XUX!HB^yNb@rDT(;WY_WZ*iPyGHOJhuN~@TBNK@KC1vFq5GQ@DhETp%D z>}3eCbY0?!dd+OZqpE1DSj0HU+M$O6i0h*gNW_3e1tE_>a?$L{VQ!D2?f_$WTw*4v z0;yb!sn8SL#^f#_5jGa+Y&o;8;t9R&6&B0>X4EQ#a|tJA`h&&M&nHI@tY_bU8FjKh z|H0-x{)9v6^=t%o!mWsm?3drh{GJaW$8$mI=Qv_vKZDsYC9OlNiyKTAE)@dm)Yk&L zfoz3(4d%!YRp{q3QAe6$Q)?^#!1Xu<97kgfCd_!H!h2cWqvJLK#Dc<{i7f@@J%JAU z78M3{yfYPV3#1ho-A=o8C^vp^{f$RvOLC}?c2bT%iP05GdZKsx)}fyD3t(NRW$1n|31r%h>k7^*a? z13Dh<^holo^(3LTYIPMvFGc*^ti7&aJqHFuY*4A>ioQ(!m)%N>4#nj%-3~&bZZdSIqfyE<&LW?Pj006z^VSfwHo3V4!;p`XtqEP93`)}R zcohYMh3m84U%e8D4;hBv!**e~q2{-pUrjlL z7?}(EhcQge{miRY90A(Zz^c3C2ax4CQazMs3evR5D4>@TF%WcgKxAvZ4K+M=9dLA`a8v?lu+ z(hQ`UNMgEq22xl917k8TNWnx4AriP1@VV}NBOV`Sg_`Qdt-TAw>C{N89W*RIV(Nyy zf?2r_$2yamA7dH}4by%#B}}u6?I!zU=}at@)HH47#{tZ32z&afx#E@^eDM~qZ@$&C z!jbA?VQj9DpC}<62*=ZOtj9F7+~o-&*ATY-E!mKb-UQ^TnNNMf7XeiC(x#b_!QSpP zhRsXI*fCc+)NCVHJP6sqvovHM;c&@DJx`%f+$fIY5+_X>hWeK38b&O~|Gzl0Sm{2t z#g3x4Tb2(iT2j?o%kuA=xr|H`)C_p-6cs=~UPo(F@Z)gxU(qr_%wrha)|%)q z_3SPMLJ9`Gdtx3VWjF8h^)7bw9IS$`O`0z8uVz5QH6s|Ig@6P`*0dKfAQZUqnLVAT zW(-9>m_dh>-(c(Zb>%0D9fPr$M{n+mI$_NY;b_x1+6hFCwoBivS{p&LKAb#dCTU3P z2rj+ASm!h6Q}62dY?K&ymJ!iIQmlb?5sc5_@lo;kh1CBGpQolydgluttuao+77cGK z2DEOT-+&1d7~kF6l1es(0w})O&bGUZ1JMrDa_n-sKjpeF;1bR=6?z$%=TtxxP(wcj zrO1Fb#LKXlKh)Y8HPM%j8R7v0{VaoR{fmRmvOF~2GTMr=EM!fnWsX<;WimeM_)gOlyE+e>{L9ACitEJ8vU zrwD4%Y$e;7u)G1MPz(h>r>UJ=dfNAIrkNL*<*mI_89`|ipXDu`m4CoXq<(hpG4;Lj zJ8E#{unVU#bl-r+a7(JBF?pV^|L)3T%B`z#(5HaEaBfun0A`@LrB>1y+6}1m>xGra z)c#dC2CNA9!_ee5? z4+Y9Mx%T2Ke#~wmk@kySLZowuhd+-*%3188w+>I5urH6mkAD}#u zzs>Df0q3PQC^;aVW;?6aVJ2CpsP+t;NX}vv@eSQjc~K5V_TEEDD9Lk!WJ!{BgCu#m za>pD@nwbCsbNfCq+-Moss>mP37)-&@8!obs!SiCk5Y_0tq@8H~a#hk1-iK;i&4)?q zi*3Q9kBy(G`YL=FD#po&V7MGQuz&CFofzCd+TYt+&Sg`{;OWq5Zoc?nzLdBMbmw)F z`C`2IeG;S)gbnzzMm6u_225TUFyDRk=Qh8A#{Ijt%e!C28O}V7li*A#>MoyTGhjAZ zTEb}dFCuC&Ak9;Uss#qynJ$ZSFJ!W_Zu4cI39capf|oI&BbDZ45Bf>G%W>ficiSP3`q#8s9LU_+BpM+GtnSU8M0#DtW)+1<5z zHA69%^mc`2luYuiTT5y$#kvG9~L3LA_lm=jLF9D9p9X9-LSoq8i*>UiFq^K#nRzJ zi-?t+`}ny9`H$hWPotc8u-b=86}qhN4frVBOojbS{rDd-cnf!Ra$<}R?GA?m(lncP z3t8)N`c;d>&A?IIv}U)*d7W@An`v-D&Zfnr~oX0F=H8Mzin(ebA z&FF=|5G@Q`QPj?>$EP>2q0@hOb1Z3AEL7?{NRE-^QW|9JvR~U#>gvp_A89jpTF#%k z2PWT`F1eNorMKWGIAJrY_DoF;bX|Y@E&W!!>1-xXb^bQ;XKZuN<(D7p%=Q*3pQU2E`XlmYOEfPcp=96$dKjBiVS!Pg5otxs}( z`VLERIIIxXIP~`0hiP|$KEihww#j#-zoONyZ9-frY?E(G|J4Ae-39zR4DJ0`ui(?) z!9TqyKmWFC;|Msd7x3?}5MM8B9NJ&lINxTT1~{!3@b9pz34ZQ*l(%Ed0N`Srz^A3J z@b$L>j`DWEFX!L((?UAY_fi(Pbn4{rCmHR>&i(t!x0DFz^r&>Lh^J=w$T}DiXn1m` zryw@qHn*c+uen;5kW-OO>FmWxK>Vn$Y2*MAxWc+PMX6fcy2FMPvd-S_I84dsd#%qTW*7VRc10$m zhYcs`MYb1NU2h`kr*yBIzj_PGK{!jql5q@Dx4as&RX?gW1`l60P@L}chCXeZJfRhK zsE{$5%B_40)eAc2n9C=(A4%r|(=#jonn>|HE_8D(k;|t+3#(oCsX@C}wdK~qWOn_* z@t^-;38QWBy{R4q!_TEGys$Um0?r|%2M$&}lU>aw0tOW1rn@-fT)zS(G^Y;M^|A`u zr^0P|gL0^NQW|GSc)UP{ z823OOlhpSosyIWNjts}%bm#amWBrGw43D1d%7ZHtc->W5rW1frL5mG}hf24a{zz@go+%%+Nr2^yZ$H zfx%4M(p0I^y}8^!n~tp8Sn1hBs&C~vnL=A9q<;{V>Vv3#HC3wqLt(y*6dSSZ37yYQ^e1B&)a*+; z+pZkQSIoYdO}}(+QFT5uGTgrB-j(N~5g2rc^9(H&vK>Zvz|^R@|MsRk~R?TsI4^O{};JD|WdnZa>dC z6e}tal|pns+Au!x)5^VglHe7K!})u>R=QKTYZ zZv9X&5eDVq7E`D$(t{$`i*C^HY!$`LDlX$iW%+%05W^fTk9A+eyPEW_bPXTg4_rjI z9~`KbP8^R$s21e-jVEqgKD>Q#!}!=}S4X83xjcHg<&nZHTpL8&t5aVvr#3xGozEC2 z`>VN=ce8^oP5HNsoDY80&#y9??)=qV(tFr~09SO}TSCdgpZ%9t--nu>SLxbb@~6&S zB|og#QV8u2<%f2l6QEWH`~T~kA0y$*4(;2sZ4npQjt};?w-)j(sqk`SnaAw(azzl^ z$Z$NuX>H`iop%@xpv5w*-(S#Ea}5jyp!p{%?)g#JimAr_`PI4|^1Zl)7L@cFpM`E? zBBeJw)_sLneq*GY;-Ojg0cp2{GQTcSVTysn7_xnqCwSlt^80O2YYMd_)BT{FvnfEb zYhh-3Y^1ZTwOq;vcZYU2W_BpzxtiH|X@#dRGVcCre04eCVFQ@ThxEY8^;DhlN++@N z8xHH~8t!-GUhWKb`P}2@J_f^>Wb!rAyC0h4&7DHL)@Kn3*@$ynGl7UE+EMr12Nvs- zg($i0&M$JGsgEK;HXMUoPw`Fa>km|OBvh})0O);4L~NXy8V7}EBiBT)5hAtLF>t;} z9jR9wQFRg-%C9W@4GRNqIz?K@xG>Har*CPfKzJ3VM_ojOqAv26o+qV}6C=~j#R1G# z*(Y5o{lPwL zp@{K6+ve$Y{C4592deD{_Rr4|V_kl1|CI->Tw0vlH@|NNmvwcvx0Z|f;KtBK&SG?1 zkU(Sui)nc>!!I6DaSL+Xc?lfjgtmrGRZ+Pdrm}W2(1|b%eT;`5(fvoc)0NM^YIh!g zydmWHrx=oQ}ZWXP^a95uGWyVp#H=;1fWpErfN$=s}3}e<%G_lZ(pOBe!Qx-XpXrquR zc|=3*aJw9Cjzhc_L-Y+%f)Ce-YN-;gGpWIB)Fkb`h6UAh<7>KhA0!;cdt!(i@8E>x zi18xx8%Bpaiqyf0`m;@JlRI9-wF((|oJ6tYcZ#y_x=jB>0bv_RfP zVeo}|dV=g~Z`h|sF-QtGv#RP~*@5nK3HQ#>A*_CdR(t$H;OgV0$A!|5T<#xem# z$E*+x_>ghS>QVW6B?1+4pM+a*Cw|#maHEl5yYr?SuReMC(L)E87B|mLPmPUsmLm5> z@8iYy4OR~wL|mBI7i)*WvAT9R5jc;VxS7gd@@Cvq4$62L`x?w64I*`=qQ>rpD*x}e zEce4OpD;rCjXoQl=-d>)&2ipG+W*zRK^M5KT~Za0W+jMl+)@wbfk=YqrNXo_P}xSc zGb$2ts(b>ytJ?cDE|G9eM|(>O7x~PFX1P4#H`@r;-t~=u5^hluj-ZJNTQ3qw7x!3g zAj$KnD|qgIS(jR|)<*dfcOi6aB^L<&jk3{N$uOiqS(q{qzdRSf zPlW^n1T>=C5D#@(0ovC~)Mo<809oLpIl%H*dvC~t+efVE_~y>(gWZgkH(z`I?$!;% z;Z!!4a>5kzZz)C0PlbaiCmHfboj@Qlyz)=UYIV?i%oCiNn7nG|SenV3ztFR^JfLZI zq7t9JZo}9eXATZ|Jm|f~g;l*_DMf*g$Fp`IvLz(u6~}jCBr^Q$GgqA1dHK%e1N+tv zMkbRG{Wo=Xzfez+PyoNb^ufq(z==~OFJ4)-D0uqdWlu^j=N)fTbIhj>dEI-h_@v|^ z&Exg{I*3KKtv%7niB>T*x$or;Zd9C+CUN02=FKro9zeG?zxMqq3Z7y>nohU3BHlq3#f_)0y?V#yiLsta@J#5; zi&+$8CO~`f92bm+n%zKzDi|HKTdO3*GVXykSRaHgB5hGmBrG_9YDW3*a_j9gF2`qn zB{Q4YzcfmQ3TZ>dc=aYY!4~P1m*tNkq9&qv-(~YWS;6gg9^LaxR0#5@bk2p3l0A?0 z0{$!;bK(2ez@Hazq+Xvv>|`e*b3h#Sd5$6OhUlTV#GWE~;u8Bu*=83$Du0LXFW}Fz zn_c+6HSp(aaO{uu*k7!F4z(a+|KghU-*?xG)Y1pBKF?!}KW5jlK9rZpC@<*~bsu8M z1N9{@us5+DcS%oeNpa2P=ihe|UEes@y9WM4b|wEbJSM8(@=FPcEPe_%ayY*%ou6`1 zoHEN1+)XG`!dfJhpQc-tMXC!aAv!gY5_*)KcHyK0Xws5^Kg(`wSf8!KAE6Wy_W4J& zHPJ=9we`=@y^nnVsWtojz{S>Q&-GHDEcWT)pYw;(U)J_#FDRb^9CN=AZ+%?)ztR;V z-g<>NDSpu+PpXL;g~w^)Cf@1$&{~Z%qn>4Na^d^dz@K;FD12HoOR7c}98U3ED0@2D zr=@>#KiR%D>udD#-E+k?@ETowneKbzpK}A>=W+HkzK?*@i3|9n42@y<{9i_474C^AgcSL~_pYvZNFgTJ?lQp{&ID9rC78f{pAXcRyuki~^}6rV zD|X?xg772T;~p7^6~rsxbOZwaD2s47*SVZ{MIQB0hK_2UcO6|b_Ul>pzEwC6)zkWl z#o>hF`g8l%JomhK&K>_w?=SMKk4oR5{Qw_blYf0y`ezsZLwP|t;I6M&FR)vrzXvft zD*aEXUkczZ#RvZ$-xwm|!G8YD-9hrdjVCZKn6LaUPcvYJNHd7{;@_1%13o*w7e2fD zS#j^%LSYb@$Y;qK4W7p_*obtbVgU6+qVY(ybIq3a&BDz{rdWOa@Fw(!SHzB zf2X^&_&&XB;6JRxi)-NDXLq{m;qog)ZYWs8H+_Nq6(e#Zap{tqNP|Csw}LFfl1JDZ z#bLlk^ktN7yjmpPL+fy~qJQN;x3xLptxb`MiHI_wETX_YUw; z8M#dCBjC@n9q#&lYv9kj@Q1O!QKvrZ>ePp^|KBLvu#eES&#*tOeNN?sa<2=oSWi$U z4JY}Z@@cRTFF4#I2#m9Xs9mTs2ixt3M8FMVG2V~`tv@)pUOW_=;XwT z|6qSC9TzK(H?H`j`if^D=MIY%hwCepLFLQ!6;H7r330|;afa_Yig%$g-guXW&-V?$ zk%lP=N3t;Lo7Rg77aCKTU@g@TY{J;qWgjSGaJ(Pm}w7|Bp0=&kD95 z6Q5P=aN@j`y7eEY#>Kkv)ph^Ki%;pDR(E`ceMV{*E8ACB-mQH4yd4Qk>!sI z#JA;GYH?5DWR0p(G(+E3=AT?8HKGQ&1>-p$k_2hxFF9G|AuVTthy$w&ye8_zU;^ zYvs=`*z+m&TIqG--CxJg2Ycds@$=d0o)4rBq!4}nELUSo9R4_J6D|gSi~(2m^>hwm z{WF5=-F=991pKLbZhBO~Reg2%vvturx<=%#!b#-P{z7y=!}jv`B{_SVf6i;%&$&9p zz7fuc&vQ{v>uDdce(gT=IR%{0KKg|87utKbAL}U$ znKC+^oMN>zzqDnt1kDgQ_Z`KHIRpzR<2xa3t1kEuAVds|9Xq-mWnBv9aG)&-i9kdy zF>(`8M8q9%NtWA_gm&$vMH)%4xPNIsO}@`0nqs&Oc7ZLdHW^b?A&#lS%Gy{%Z8$rE z4dIwhWC&8bcr*ex0^pibs`e_Bbt4iRp$d(1WrSw~PobD|tUc0+i^Js>7EPUhVL*qR zM(_lL`{#wIeUbYD-kk4mGcvu2NUOit&YHd`WMKP-tGjEYW;x{kTsACj2@+-+rQ(d-D(yBh7 zqH?ag{)l^h%vI+t)o{@fM$D+1X7s1={eSE4=x z1ldR^@MJo^bwO+RTPFYy1-sJWd^z({2?T)Czf89M zdN)KQTi)v$qecJqN)zv7#n@rsPOs0`&Y+KtU& z#8*Q!^%WgFD+Y>{_GqjxY|$q(jX-C2*q<+TB;pgOGRGZDCK6ODztpw!wjVqMiH$SV%Z7^qAl3DgJQ6zZMnW%h z=c&B1YdYB{8fkcohi3>PDb4d9Zo=HYV-gyY0yKBb(=Ers-m^gdaD!Ex7_8m2;HexY)V9c$B{} zRf6g$JuI3maF9Hx|CM%-YvBHufBWH~)x?RPC5Cs^My2rE55Lg2>*O%|+{?Q9aOHCi zc@$Y+I~@hmy^Ti^Un|{R#WX695r#&k<~K@AXE9BYVNwlxKbc24iQ9s4mpfg2ff=wE zbW7tVihSPZ1xtVcDsZG}HdNq9!x*o-_L?gW>|31Mh)RNSY{Y-sRU!cSS}VxG zn~6gy9{k)*0kH&65Zh`0!H&|V20NQ7fxRe^4c?F*kdYXb(e7k1Cf8Ud5e$S9v1rhY z#trwFAcHn1_<22`c%xBov$~P+xH0wbP_1XrUWbCPme7!2>f74UKvIiaW+itWXP|9J zO8log4Nq7}UIQJkOHU+zN0CG3Co~Hqi(PKe@}fhC5%s1r(~BKKLJK_2vUSYfRh(Xd zD)i4&GzR_xipHGDPZ*;?N7orX+8OH&e~^?Tc9!RkAKo=PGu0fdmypCe&!4yFYjidY ziL|mJJEdzsOkF(2Z#doj{0BO_0qvnjP4D2$!Vg^$uJqJvm2%NCeL6TL&>PZ8%-=K{A94C?aAt5saF!^4PfY9E zv+}%g^GrNwyg>`c*rTnyY1K?Ouc>za-gA9U-gm=H{N^<1;D{y~{!u<-r|dJ=CFJ=| zJ_W6kuVK0cp#nxEpe71`W2OgcqR6PACW^ERF-Jk=z`Q%YCk1Qo7hzKJ*WJK$5-OkU zhz>Wgp}1ErT{wSueF}}oj4lxkm5$1>v%k;-&=15eL#u{TU0T6ma*;?g;16kvZJA)( z;INfN?@foV2G4-_T4ASbZImgUj@Ger%AnPPrm1c#7Rls-fl4W>3m$3nFCJ7;&p^Z( zys7nXRD!B*_AddS@Pda8mQS-Fn%b zFM7NoGn&o?v_uaEwPw>sa;{6I7+Y+QKl#=tTBzLF{OEhUDA9WDzrHpsL{5DC#6UAh zQ<)r4~I);^(=QSuzHq^Q>;Q~W%Cb{O^805SN1LNEIq(&v=7dKDE4k%#6$uP zto9fn@&u;JVXg-HyX~2M2*@z43MGW_XSc{>Z@)lQ`v>;zm@W4J|A0dt`%27~1H8dH z)wbh4SVtC1*z5m_43+!j^yLe~+qjzQTDx)} z9^Px~eyS)Y-H)l0_#3*P2Bpt%62=D5*c{}9;bb!0h-?7LwOHY|au)F$EGdR4oQ3Qo z)_@6jflI^XdKT!BZ9y=E;F_nnIaP9Rn?A7fX*-|M2EV*2tC9>n6woa1+WIgr{TLXa z?k53aT1cmO&~{W zp2!rj{U#}3?kqE0*#EL^h3Fzo)ytXQ{twjw3}ZFZ$=!)K<`a8@rtYU2JR{8W!>@k@ zM!WyN#a1-hta;t3zDTeyWBCm=;tQ5P_rp$n$Lagp=63}0WlwPL{rD1(i5dt(X*|+s z$D>6(B&L^u0udMrF{@qU+A^!s@w!;Y^w7=TxkZ7HIxde zD7F*)Uv!`e@T&BSKae|2ANJ3m@Fsu z-|4bh|3C6!FmH`Ny3Je57pzmSc$EM64F-DfwO1svzt|b>A)o|h64|8pA=~~uue8-4 z<8`AzIJ|@3oZ-Bh48QolOY>(a7so=Z<5aK zf}UMXOU0zDudAba?WPn*(LzfzU;$$@Wm{b{6t!ey+)&e$U?j!89a&{+{bg~YLYHp~ zJNS2l`w!&x9)&Vvxw+;mLI1b;{43j9_8FoR?2oA4fE63a{D6Fdzl-?shwet>xzVeC zDI|o4(2Mr`>T^Vh)ze9VQjkT2kZ6Nj26L?hyHjq5&?|Z(Ngi|zR_g8VI~pffvrwVXfqpi zzEY`8TV4>Mx&>EpVzoS3D{br!fO}@VS~;@XpZ1$^c#N_9=xnN|j_-ycJs~N&dtWYH zsaoEE=GJ?9(=78p!~dP|Ms7E}V;U~!#PDtzEby#L9@>KAgyV?o*s6h8ZFLXN?b%q} zm>zBQML@v-KYBO6+aZA5sqjZfD1q<9c6N7rSfMg|QEsszuA@!+u-WcX2>cmX8=Bck zCz;ZmOFI>MOZ3&IXL{WcOrr>4;Bo}cJA!Jrcv+Az*uhAd=+M=5K?BuMKz4yivy@39 zr1t)jOXXK&S^ihS_33Rb9KVe2KG5uh_($DgRd)$i*t7XdpCEh{ zt_fq(C)y0w>=iJ7?Cn4LmU}K=y12G$e6%-jzBBMnTFsJNrXDT`NF*E#g=OVsWZbR+ zQ%PakXeva}mOAA|GhEmn;a>c%n?kw#pyY#hFMrOZp^ry!Z~7@O`m*3v4ZInIubS7u zt35G4hDs;OjegA+40$!b5%js#x7}#e%R?A)hE0Q1l4hfA zhg?mtuCgJ^luK7c$?f-l{n}YD07%|}T;G33k&P_^>ox@N7XZ=u(NBLOcWVNrD=^8dy1XC?*7)iFWVyTiw^( zin!_hbiblYc9UQ`$8)cH?9o@h>dtewo<4cYv6bbenO4J@j*I+Dhgo6>+uA9fVd$8B z<``{QnDh||2hfz4!8x|m#{IjwoI`d@d-LH9g-Vv;@%fNEjZ%Y~CRcuxD9bRLJeG)B zRwDhp7I2R?JTSbOwO zOTh3?pTv~xm5DJTE6%39n88O#KEcXR0u*^dVcNmv=!^?a4n>t)6+F#Rg}sd9&%hq? zOY9wH-i#BmvUCg65H^jw>whdh`>|VZec@-uM-QSAETmZjjsA*$^v&y;g^}Si>tmV9 z$$fx}3$CQOMHARKx2I?Q#9TZwQ<{7BqlYhl^4Zxt9s)(P7Sm$MwRdj*N}?wk9Z0LP zrg~&gAYl5G-lsl(&%n{K*0FmquH?iNA8>6^2QIwrv4P}ZPf#}8$-Zd1k)CZErs6i# zAhP#+&)|TdNFmJsmhj8WWHn*IVbmoKbB!J1#NS#&(Ha!(3p{H54(!{z2RH6sSr{Ac z$@jZWR#C$6#g1#pY&JZ^YZK>ryM-1nlT(QW-2vHP{YOWMps$d}_24+N(?TRxG5VI; zB~5pEyqe1+)A+?1Sv5VX$K#GAbw6ergC$$Zgp>g4$>u#?Y09r^GBNYUeOCQXXLK5NBq`=^oVumY2*50=XrSBtPpPPc(KUcr0RG6lY{phFIY3knhII)Yo6hxk7hKFsxl?S7qmVD&i_PEv&=5buXfqNqwxE~~r@_eYklU<#9q zI}6y7<6a#lBc3lhNX*}(y{Dlg5hx7R_+G&49;twh5iKiALKHIrzWNc-3d zh}M1Ez$(^nC)+B8q!~JB6v#dyWDGsAao_Df?hoMbdSf}|kYYqYJ{E*H=~g^7GR22` z(om?N1~@(LPFtaP_#FciiN4-gKvoS|HplvAGU-ynlrXx)<>5o1y5_}Tm^Z=}7?-hx z^>Vn7P@$-${$lTVk}NeJ%MFH0y#XuJMDO%x`A{_xsp&?1DDIbG2Oj5r{67dE;l{Z} zyWa=Li6UqCle|D(jGTBJXPZ%riQEC6t5@?`&_j;%bw!x7XuA9IhaKQ-TqrvOJP*4i>UTOof+-IyuRd)kWS{ zTdEJ8+*Or8r>rT}n2e5F^b@-L5fF}x)rCX7BdbAA%;$FdBrWarWAYvbs|N+Y@H1S6 z8{zuN4F@}i;JOS58{Y@BL6~&ZsxpV^KO?n~Y{ac_6}h6Y-DY`U+RYtgbNB{u>ah7X z8G|!Zn6?@97MoIeFrt|OA5sfq0BM;+iZ>W=iGJ|M`Fl&!#A>m==e9=g-m&Z?I=VgU zY6YK=iZW55>au7PaW^(m5b7)aJsV5)aB1#nvpr^}HaBx>Ar>pA~)%jS>s(b}k$2zK3pM=_kATRhHLGQMAHwtcgZz;xqfp zk}u~ESG|Ip@=4ek!@uG3VK}b=&K+gi8wLRu24M*Hf<=dRl??A<*( zJ<#7*3_lflsz;S0WJH0%vIB=rg9c(}kcX=J-?p#(!*D1=ePOrPFB!5g>2tX@|NMX7 zUJHLHxXelbGC(Ow40d2cxta0;(Y14Q$={-r3!joVhHe3%|*(eM$(#z1Ya18yvT{;Foxn#4fY8bnP*w!T|cn4x3 zkv9~#>6SEA(k1$b#|q$>`cQ%pO7bY5gldF+^9PV8ma(u@#x4tH$}f7LS%dJU@6`nz z^voEnmW;4tjEN?`%GuYz)XHSg#D6*le!hv_lC9Sj|)K(=w24pu_G1FBQF z{}W|+-27a7qFhWTp$goDvb&)-$#r#%o^ABmir8*w*W$4gh%~UH8y){N%vRa4f=odo z7tE9`3Q@J*`QqUI^UcIy0AsjC7XvS(OtrdqvM|^PRXlnafHo|<+f;mrV0FO=hI~HE zkwA^LCScH|1bqg5CCXB;(c=Au+4|_MyX%<8;a1&M)vHNr#H|KpS*Qwt2-B!gtTC1lKA3P)_z?FPx7eOLhY!K;#cmKuDd{{Q zgzigT_{NYDNqRw|{*=eK#~yw7p$D#9ICf+MQ}$-2r$*|97|4uu+rpB3Zg;3?aUgw6 z&X||lvXP}GyRi&SM{XCp#$=RkWL2X0ha-~s+j%NI8weK3HhH#T>{M59ndD*+dN=@c zaW?DXz#;aR#Sqs2DDUPQi;Gq=?vOfS7A^LolsRN-Tp{7-a!S`bX5DY%tQ>YTb z6*3>hg5!TmawKntu*GnT$UX3gcy06B;UH1-z(IrKOHT+{h3Pobz~JP)&q~llBzhDE zo-t*00-H6!71~+o8*CD!9Cq{tfp%tq8|d$;S7|Tg&R%TW3R>kIdtuk&cGnO5N95on z9S28Hl}N;b&xP+#%Lj#^1T5z(2lPaJP^nz~ z8uuywAU=4V8*KN%qv2suA<-ma9rRA3uLDms8;?a8YFFp$^excFKroS$jJ%;>F^K^x zp3H!L55XM_RwC&?tf)bY+%$X%cyFeN&5bIzsP&Og>AGsb!Sn`4hWOCdW??_f(B@xc zCQDfBHV#Hc_-V8{O|(as7X?Jdd#R5FA@Y;3`!B44gB=l#>jf7r{TIb1iUv&k{AU$TYYzAEqQXzhdW z#4Hy!4=m`q3b}?Td)2UC%Da57XC)89Im8yeKnRsRh5`O&+S_KVyjT{+Qln&gG+j|6 zawy+d1xJ#{hm%lOwq5`e7dZ;2POL01&bRt8 z|0W!=C<@@Ika@eLbmWJWDq*QGVz6QmrY#!=T^b3pMI|+BBeQnMuqALiA4A%OSwkOu zC4L&tJW{lYfru$$GNjiXiU(EAFbq}oM^GzG<|7(o>-1$7f4bkMS7BWS4z7Jhz3)_L8x_g$+xZ;aeNR!@TG45v_l z`v50VG}7^}`yzf=KG1~$)C&0i8RV|*``fw?a*vD9PG)xW!HH^)Qc zyM}1xvnLQPqHvPeLA3TWIM>eRq~QO%o`hE+fDH`_ca7x!1x&$k_9q6#Eo0x{s6GjW zyzMncmUjH`1bT?lNn%Ih?%?lm91b>3m0@2yO_^=)u(BOj1KWguGX>5{I-n2;T4Qbq zdtsY{rx?hk%ltE{B1EdS1p2T%@q`W{G?*lqE1#zMbnKAeQGG!jMk((n!SfnGI6+V= z_-jm)$NC52aMD1mWcdV9b$cMs7+e*N#-fNoNofQm)iV8lQx)Aj%9KYpj*J+xJF#}G z#~*X77VH|H9g4Wj)pHF!s;JOCZY(?8N0&Hy>zPp%lSNw#OGBtLB$YwPn4>auUv7M; zH8hq*9RwzQ@_v;1d<0Z5Ij#rpwByxL!yN-L=#bE`WF%#CRt`>`$(v+7wmEf>WP=s4 zGRVeeIrmlPE5*e#Q`Om0apBZZW!Ffizgb-#PB-9YwQCb+S1N_+^2BYsYmwUW@qxx% zeb@29=9HtVeglVkmK$z25leEws5nIEP-SNkB>WboQOHK%T)ZHYg_z}L^R-fWIM*0J z@%@%7&-Tz({5AxE6NV#71bNtGve)eMI{07LSUX;NTv>B7R|gTW=?#b6BklgR2Bg~S z0n43O97*@Z^X_Ac$1&XSzr&8$1B@RIt~X+daIes@*Em)=UQ|1 zYPOMUgoBtVoZ&MR(jdJ}I*1NJ3r&u!klxnYpvwp9wB?lFX#YMF%BCzc6?BEeu18?Y zw3t6sjRr$Vz6he%D*nft?(dH%Kd*b*m-)XZqC)kqD%5*ta(q6@-5Dt@RilHrqiQy0BK zP11PHumah74ugVW^NrhK&Y3R@49gDjIwB@Evg!UDsFB6`t}^l%y8F-4L-}|~S1XeR zAF14VUgv2j!amAOLfb+;qhb$uAddlxBFlhp&-P;I5c3xo=4Phq)nq&zN7jrMiH;La6TM7VyG|v{n7xQ}yx4JLL;fI*w6MSK%lMEm6OrIo1i=GE z2^}V+O1;CP8A{jl<3&$c)dJ+!fWy$`La&74E@v|}Z#Z=;bFZ(g6D9YCq*lx(LN$adq;j;a#p zT6byKNyMsQCG9`ZN(=yIKW>X3@&qQlA6X+o@y1Ka0ofZW`wNiV73tXjL zgvWqo0$K;q7@>!KE=T&ZY0Ch6A;xJt5mcGHBs()e($ifE2pautFBl2bb`{Q47cH0} zY*uE1p?*bk13WV@=2?$|$Pm_3iAkfn*`J!*6O@B0#74nK7k#?v_4s`GvJ?$G-#ZdLz8qZ0`x8K$Sx5=X3Ew*!7+S9ltkNLO55j6v z470?&%Z4;_5D9#3&?eych}=_HbvW?HX^TXdEnYkTREvC3L_idt!RN$Dc5cQd!Ezrb zn@cwfxVioBKhW;-9~~JUOsAqIsA8A+CFhi~#iO;uVZ`|h1I+3iLwwVJr`sLOnZN2* zT_*A@O2h+K(jAI<)ldLqF}-eoP%MiGHI$zZfB zA8VG1=+y9Wck_35!pV+DXs_9hC8I-1Nk5jR>8vV*6pITzM)Ig2EqGJ@0H@5Jb_Ig_ z35>6Ry$~gD%Hz@9T0W*(0SKng9nvLFz$0qD_xn)d>-HFmKIjMh?*Uqp2#9$(`Qw(? zW1t*JargTIY}K_u*8DGOB#5Cn!0dzW-%%qL?=6}=mv5yODy%e)G{uU%U?ztj84X&W zwZh1&+Is`#h+!-UBZJ?pR{kiSfvJW{fF$ETP|2at<~P0RP%Li@zhUSfy=ls+R1v-> zSkQI9E&3P?hTvU7@Q&a0Buq6n-Sv>;gA{^4lD2E;hA(2T7{Mfr5dOtH zfHM6>+k+vdc#rKKIIk8^G)QqRLanjbS+`f{QIa~6uK)r-WE#)95C$L@7uG!qQBsbC zOcb+I^p?FxX2LrBviJMhU+rltJ*1Q-d92fqy){=21365s95KC>vNwQL04_x;5!ZD}jI0 z(Zc~D8_2__&~HI){3V@5+3ZkaUtSGZ;5$&_#(R4a$1{a$6xZO}hpUm(@s} z55hMH#yorh=mY*22ulW%%OxZcDgTHom<|~>>PziqWY_2po=>GQ%+w_oO9WT)Jc?yL zb@fH`r+ygP>F2Nv;?-~9=U?J~5|c3JP@C|&)#sX&8}jmQR2;aKE9e~I&a$wN@!q_D zO#|JFcvhvv2x})Svll(!y|}#fChF1Lc_SJ+7UqXRfr%l;>kDWr9GV-R!!Jd%dVeoN za{^SWuGr_^cGn=T9fN7Fz3u+9=*bQq*>Z0yR=~F4C)=?lkw#p?i>Aj+D~F-V6|W_Q zEaZ41$zX50kQ>QEAD4TYM@B27kw7l-vFc=gsMjBt(n@e0dN4Gfeg z>avXWa`HE%eIdSh-6nCeUm|tz^}%Cfje{3Qf_bmu7YVjd;5E8bz&dD!B%jHxq^-Wy z@l1I#lWyq};sMd4>$nv<5s7VCO?xW48nfpY3xsDu4kSbJjeP`44f=F!hM0XSApXF+(*Pz9q#4>}Co^gnTu-K^Dz#{b2c@8sk#(T!A zrDC4&q@c;wcr5QW3TYb{x=u=1gAyqPQQ z!6Wz1=lj#4eD1UT2iwK^Vl5U?*Yq$(ziYCR%6v5okO&=<Q-v`CzAgSL9Tb!d)V-iAROuGi!!U)rt80?^l42mf>bWyCES0SC;&G4zv;KC7eB! zCBmimpqLUj;=JJ(Jjy-#>W3e^|Mv52itzrK>B;fY;aUaUSm9s*nV_D~HRsJ18WJB8 z9&8}}!NM_!*)av(y);#SMmellhT;{3fDEX@ zM0^%_HLYPCFZ=_3Zbqo1O}bXgUi^fPeY5A zcia*PhQYE;M_Lc@0hGF;#!w;4j35mZ5iVcwGUX|6ztJn3-$J{Oh&RL2#UJ(*BlueK z&>n@m*nI_}@R!*76cdGK*jAsrdVn8BTJJX#^ zf9)-B-f;&b6wBv`gx>IiVXMhENk@?OWZ)?lnlymTSaahIW7RFUB&#kV5*2j}gHS!m z9{-(+H{jL;!7o8R%s>d#E0`){s-c9u-uUN}VTAt)kd(gHp4d@9Fpu&!4>dJmMjYTH#9gHR(A1=O?Sfjk zs;rUSe$7SEnFoNghx0tS{jPTY+8f-sfgJ-C9QSr@E~7@d@1DEwy7e@M1aHhtP7GH{ zN%&8p0CzusKbai6V*ra}2f#Z`jy>g<4uIoBmAgjCIU`QM!A{CG2`r|MnP(8jhTuj> zK28FZkm=8t)kRgyKnrP+B)ZB>+>(!_)DTpqRPsfO#R!eE#mlHi@S`y<3? z2yTME7v95u{wVwT3!vPCutU#%5W+8TwX6TYe*qTIZD1RNKMB~z zVic@`18m#dgDvUQ&vt=rEF?p=!+$WcD_>l?FgLnPe~s4`TggB*S6LWJ1*&@Ao}T_w z`v&`V_x7FMH<%pQdrMDhI8T2eL(Sy#MgAA~cLFy!zxrGOj!zm6B1gcUU4rH~KB|Y9 zd6@b|8U|ja3^4d|_tx&q$J+^f+a+#ku}#fWJs3)s&w}X$%9d(|x15`6H7PUHOf%Yt zm1GNLX{0u<)2uGwCxTyz)s zA8z?%!>3q{p(a2x@8p5{>e-Q=mEPRM`YnS{>xsEcsufRG(YcLenp$jpFg-qy2-VWn z#b%-~{HJ}fNHHX0#+e}bgBHAI-o0yTI@R_2%zl7|RkG`9_8Y`|H(If=w*h&+m79 zD0}H`lZ@3TbIl}?v>lviM3lB?<(L!aRk`y9l22gGwr-Oj4;OXa4>k;ZN_dq%z)g@c zaUxqAjFqFs;DPB-M#GRO37{sVnvWu71iRZPr2Eo6^;BsYSp;kffm4brQI9Hy5!1f|jFLq=_H^Mj!n1~lUcLy?LqMu51CSm^D&Q)oi0op(f?upTQdZy7TXcjL-SF2TRL}HEN=ipdX*d-#;e&=X)%2s- z4J}$OUnl2b0f#Y0p~be0YGMg1MldO0~3SbzI%*+j7CyBUd0U-tcy@yw_bGY zuwpmA;RXv@us3FO1XW_prCSG}g(dcNOk2=9s}3&^K<0K4Cm6pY;_L_naf71|S(H=m*fl7KN*QN_7}Ri5 zY)23^BfQ}ArzTU!VRy?)E(Jn4C0>k$^C3;k1$i+ncvX~Mcy*VldV)buB*jjIH5R$# z601@*Wkbf&N#SAXZ~7lldTL1^tauRiC+x(*_B3|o62 z=N6D~>}HPPiGf;P;8D4chS=i(SeO%`P@6So!qQv7C;W2X!#s$^`N{ENG+$)WaU{0T z<+X?3L*Tz;=bvej8B#YA!OGj7I$L!d9|pxS%}@5BQ}lqV_R%7A3Ozp)5vv%A<_tL= zE=}apwVathd1a*B7f^FRpN)95*en;rf!?VaFyCq`80jx&n=bTF81dHbQqJ;6eR;p) z3V6+8gwJf;);$04aI#iQBJq)k1QYe$r-!PC*9)lJ221D%eHwrcGOP$|nAs8Ikyi^6?6kAbXk5pRd2!f>)sfoAJc zJ2B*wI}6TE=1P+dDUb*5-P-n2ZAm1pzO2m_OVh(!rKE$_(nM!U_xE-GxE$AhKQU91=SsvBO!o zfI!T*)!DHQJ!~pqSn>rZf+6_`|NQh?Y4G?|xf}uUr!4D6&s=f7XYkc;eDaY&PuOyW zd^GtIdg_wLNc;VUsn_~Lfl^M3`n|bQNXfV? zsD+ktme<~sv|z)ywrRN*+@v)o+Y}C4Op$fr@87hC<^GsEQ_8O|_GFWW5lJK};nTnT z$jXIwIzKX#0`xnvP~ClQygrtU=1YH>Ul_|BItVbXErAFtJRIqZHkaCymMP32?gVB= zQ*!?_9&=lTfkZwf2?0%yrw8M6CkLa|R=hY?ivS}QBD{o^N!bL~sf!HQ`k%|Y>tf0OK3K%>Suw9&tlgS7n z;pGxqj>QHwqyTFHrU__aoCQRk$OeIe1)QEYdzWMr8%|9Ox9U|Q&gD4l~hq)C40g3ENaLh z@LsgcyEU`FP~W>SK4?XK$^FZNdqx5-^!>O*y=Q9Qe?Ii1zj*x6JFZNkJ6DC_kaW@4 z9Em7;I%A~uaH70;@~+9fPrqiRcd6`lBlOt?!hV6f?dtc$w+inD z%#EcIi$rp|Jr>7Nhjs|_U-HZyECo{87`O?txq$nfzR19}BABigPQPv6%ze+?vij&P zjiIxP^`a)f*$7TDb0`7C<;`4_|INYp^|B_+K6-NRTko7n&)o6k^4e`pEn;pS>>WZr z{OXI4s97|BAK@OeaYPJ@LE#%!tikNM(Ab39R^)VG9}!zCkSw@2OsGhndb&5;jC61~ zI20M)@NQ-s_pR?)nFD+Ka0^VY)sV#<;g59Ikq$3pgoV+zS!8^pkRP_XWn0Ix3aqXl ziI>Rxu(7R<6aw%NdHuwzr&&F(>Po*U)Cvw+j5B}%5OH-q-IuSz=SG3WL)b~teL1Txmf!??R zB9UO$8w^ey?aNOTWv{NnrxbO}~=B6sJo12(TwIX~5MeGmq)6egR zb%oueGkkzUfwM<5p5P4KW9V@CcH%@}DN?`#PiqVBQbr}Ek9@uhpr!l38t3&gZaSQC zcI3e|=OJDh;%d#y6)YJFNNlhxK1_I(aa!VWd8+V6Y4hK7ugC}eD1BFA#bR7h15zXe zf)O`@s<665Vg{=qda%pxl<>P-gE4p zJuADG7Uo)wTBU2^ppz)sCqcE`D22>$1FFQgH4^EbG)1-!m;*HhO-9O|X(=0?@CisA zT+^{M>x_ZrpKRZ=F);VgvnR8t@{D;Ua2u-~V<>1+kOC*YQCWKUc%wSER_-71Bqb<{ zDCjOMJyI-0Vue`9?+?d4#d>hC@6ny)L&b}pOsmIA&KbG+3yVjezIz7QD`I(Yd0k{Q zRXr6M44K)b2i~=}xo<4hD%@pJ(JJchDZeMmhJ@xoEBNX?sPWqT#x@$Fhi*&X_V}(~ zirS(MVA|z#=$C$s`;u)()CN*Bw}Z=#(aYFB0DPw^I7(M7aVWn-t0I{hV#q>P4~?Bf z->0BHT0woZ%;~(WqZ&nY%(7QQ6%*s?^$NMqanV8~jMwXn3{o6WkmtLK2YEWyxKz3^7#$Q)g!-d9Dqr#;P3#%<*$hc}J(~{U)m) zX;M)g7LHb*yezn>wpE}-{!K4PT(hNy`WAZ~7k0S&!5oTJL|_V0u*|+yaVNtFeL#U7 z%cjElL0~)fw5?BJS5S?|}A406aeQxiQr9}31xfp8|0i>rPa6f`O| z2VDKu=9k640CCyl)N!$oS_43mjJ%bEMRb^1i2~mqzruR6aOk(uvZ9Fa;k)iQdSG#W zw9o0ndYpfpJW`OWiuMt8qQx!Yfjim}zA}}7)6%kq?aG^z0mn;}7h?8+83S5UJcmKg zk+g(s>~+Ur(0Ypl^ABD*e`e5O6LY(Bj_6^idVZj6i>*yxmX-vFq%$7E7T1JNo`Bl+ zJU1K{_8G2_~ z5nboR-*h%adTOCp(dK{jsRxg@3YIUR$bNq?jBb`GG-m;olZBrIDtD0k7dwqW5F5M? zpmN~KprFHP=wPrMiXv|S%h^s#(|+UDHovTQIw3Rt%B^>9`&~|mgE2@1QoK)syZZzD zqT}!}Vm!BZ&%)fqSbuM^kOB=iO8yS=2kls=AGEy!E1bL*2qc<87VTUE1wz0gX<``M zi3R@8;$nL`m1|EXu7d*$Jwe`|3SEZ>*49@GvF2c3sN7@4Q6!NV82^`aV=7&ksa%f= zMzMuSc)Hi%g8jS7iDoTY&*)KA4@b@T*dWN{2^o}L4HW3zyl5kW^9Wc72tpE;L4i>E zHUh{Pv58O{WqeGRA$-|pl?fGOt|bykc3x>==aWcPe*ceZFJJc*%>}Yb^(CL?cnaG- z6Sg`^Kh|boqF(`+m>o#)$@WnHt>!%M5ZHK#>BSD0x zHy!!Vi!T41PXn)AsThf*GGMK={MnoqE9cB>hD`YN-jnCL8BURx&kG z7{Bd}@7+I~zt*uhIcODcJ_F+S&n%2l0|!beK|O(rNp$h#^Lt+`Jwo^iyrqIzJ0-T zh2Q(dADt&RlkQFLdGi1Ialhp~`>uUCu++JvfN4dV30NBB+1O-Y%p8{43}J+OpuhBE z(8VEcS9_5|WiIuoB8`uJ1Oh`b2JdkorQ$iLedr>}O~?-X$8%sa**iNk&H)KEtPRx{tDb;wvrw&I&=Xu$Sbpg8>gL~w7of}UpJ+Ah%m=>~C}*wNx14?_pxWvQy2+QCubxx4N-d*DU z9$Fr~cyJ&KG$VxS^SNDX2aoRXa9{kb+Q#_Ih#B^}rp3tSmnSd3^`{S`GS~A9 z#onF%E{@LcT_5dM+Rc1GFU$>9+XE>H<8X&x^P0PlHm}(u;Z)zj(UHAc$oF4EREP26 z)!T$AVC%=YpRxhjF?7R&6ajT?sQVI;asb;MD*;3YxC_x8jWa|CiF6ij5jM@4QS?4H z+|ZGmyj6zhEaL=%DEj(Gc#y$Cd`P1v$47^n{k`cVjZ}tFImREODh_}dWJg9?BP@kR zuBUBc>`W%x8>gTkL)i+o2b1q)J)i$@aJoV z_4%Pw6S<*OvXvV>GwCmyK~!U6vK;aSpi&Vu1RU+*;zSL@^7EuqOg zq9#J7*_1E>0AR)1%44!ct}S z!g3i(>LQeXFQE4%`k4N|=LZo}JJ967& zhg*HUl~QUWy^#Rhwx(_y^y0XL3>t?6uytzX?;8aFq(k5Tp4~sC#`CtdNrfWClGXva z*Vk8Isy!X+Ie54? zSQy+6$Tjwk<|Lo%{?A_+UCNGJ`pH{EgW+HbzG6_%H>3Cc`ddyQCr-=cGO$b+LB{mq zwzkj`T*7Tgq<2P_3~>SwI&u|pK0!bVS`(}u8az9z2RDdiLMVk{|C?$b$F6%DGsZiY z^hR%GYWwcH&fR+K$gU-lRcDMzr1yZtU79Zw7bl#FoM9U8S(n%C+&|OFy?tV z{w)92{*{^$)uThx#oOO={<tY)*N>_j;+9rl}vq1C}kEio{ik2GS%mAOXB)I3zO zD(j}FG`DfKnVCs7Zh3BCHXDg#2C{yiF?_67RM@;>_e=@0C}bL%2P7@XA9I=>6Q<&O`s<-S@UrnPm2v;nzISQ)>3@IWf?;fn#tR zT&Jf16TX3ai+v3GyB$MN-%#R|-IC5yhd1WUQg5i^D8Z_7EY<@IL@ob3vYz&6yzOs* zG~oWOcjdf^ZQ^Smz4z`j$TTf3OivE<#iNk`_XhqAw292=Ewf7CFcdU)3+oR@2>-Ps z1>}>cwx6J)>kkt%!gw3ScDRpD68?fdvT;T{jsD>OUD$}7HM)aLxA=`+_n$pdN44E= z8!kTzI|$y^dt;fo2p~qmG6SPCiQhvo5U7Ne+(5Du?y-WHOTY1m+b5=~LBT8i2Sby+ z9yH$jy=Eztn6W^E0^mG(wD!x;^#gnMo>{2og6JeqnHa{qxcTLoC;$9un7Cg9r58qm zLH`p$m!g6+yc++cq^kpWjt0}_wg8aT%N+0bxR)NALjUE5^dh)q;Ol||n4%p?S*(5p z)DCa>{Cf_RlO{^Lbsb}2C=A5LpNHjt2PA8%t4+Xe{#=3!;1bS9ro#v>sFj>s$0 zOhlYs8$PCe>-tXEw^3(zAOW^l#=K{oM{L?PcE&DX!uHa=5E?#2$Z)RIQYQkQ$Yg7A zqZ%D7fJ0o>QL~(AAFfY6u+f~an6BP4C(H4{Yy=(u9wi#?KQP}iC)8L6X3nNUc?u(u z;iwgVZ{prlVgTU=!k3Zk(78!;^4`lm)V}`+n%w!lmwA<6#KXFrhLZj7tY;!;`pHhd+uGmcWU?4 z%EH`mtEZOFhC{}rZ<6wLqjH(%k?-&)!S#9VM?5=&drr5aUzJ(9<+7HmMoy6&+WC`|Mt<|UFFK| z{w{bMd}96$L%B22ujYkI2D~5T4w2 z<8}7{C1055x%IvCM;4AW2J+ch1O#Bn@O4^6m@h$EEfOxX^D&~(_TVhQb+j+o`ph{9 zD8Z6#43u&5<9rPhi3ZLGzya98K5x`Fcw}s3(eL-d+koF`P=h*ZB$RtFtFC2%UEC#7 z+9|3AbxLCe6{wl%qx13b(b00Rj$C+PHlCX*`3*g&70+C53=Ck*fha~*7fo@Lf}3B+ z7h=e7;rRICNpFB^WCG>7A9VMN`}4EA=X&>`V^orhvF!dm5ub(jCtB;T0IDkUf54#z zS^Y^K4CBuAuM4+2*JUk!cjxNw3$O29O+DJV`aR)7_iFmy&edPr_T;Cz=eIq1Z};x} zWp?-GSJ<9ApF=BfU+CWb=fY1ocPmNv- zKR4Xte3O3=HabsGKR}(@AX7lX0Jip7F3l~WoEZ7gL#rTxPsC9vf*G`e>H$R|Vk_*C zn=~~A4*)n&qbRwL8CRX&uUX65W(N*MrpAS?Le7HV)u$4$!8tDSm84UG-sV-Z#;IX-5 zJ)^$FK&E)~$V!i;`*Vh>SrfP1R?9_WNT=%VY#|DOn?Cq!*e2tYlGflpLz~R5zYSFe zWuC6fT4I{c_MdG29evI2)#UEZy(gG1vF}Y;ovZ6im)KV`Ya}ER&Z=AZJ;dDSxRdSU z7#=080yUq2Q@n^s$+Z_KI&}i$oWjfkj}!#R5AjtnyWnA!-srqwXY?Qlol)m~?%=t( zS*l#9lTEq+{C^DroLd5G!lns<0wHx&t>TNQ24X zI%H7}yk`-6u$(I9#*3BxS>2xu!F&k|5Oc3T>;{u{CLR#MsPJI{^^wJ*j_A)Vgp0K@ zqzL2HP{&OSeoL3kM0<8P3nzYJs+I8>)ol6nt+n0;sz62M%lOvd!`7jyKx=@0Nl`#Y zy7J@&iEpw0tQW)I*vS(sCJ)B`MO;Jp+}w_4QmT*SoTDI2-n3p~qnk{s$I% z6kgMGdt$JfL@OUnX<-WrHXM6Fw+*l-2%fR@Xy@>!$KK< z2<0U1SOweDo!o~$KIcs8rADgZYX#B`b;-Lum#&day9WWpEso#Py6O7>r+|xyxD`LZ z=z72q=)4QC+?g|LdwK56ooDX2c-zs9y{Fes&rV}P2}brpv{(7nE$)OZ(Z&#E=A&$v zY_=8KM4S4ooO~bdrTlJJu;JJ+$#%+ku$6eNu$(Mq#|owOd?-uJg(ANu2!@FaZNQyO zN6=~vITz7KS1GDQNaOWo^99oaKNq@%C9!oSlWI>jz^vd8j7|>cj4uGG6inq?RMq2G zjdH$n@^S9NrKyND?a#7W@#(cCZoiRzQ%L69y+jX*x(&lqyhmye(y zdH!f`b$)esJecs6+WR&t!2tigj#moFH=xo^K^M~mpQZNvFtl+FP8wVRA_rrtg^m>p znC-p>_?@WJKS#(F)5x&)7(14T;RICp$~7l|As;L%?&#y~<{a9^4zjO=dXlx3GsA^S zW&S`Nw8x5(h!>kkR;fa;Ij(8L6E#B*HF{INY$MXV_xx-sp6Snpf$GcQp-7=z3;;@& zgj`>Q=b2fy3K$d!v&_EUvrJ=u+0oeljcIK9+8<$l9$kl@*F##Eu0F@~xP3KowsZA$ zOk>+uQ=^@$A7>idzMAgqT)l7G)eQNB_9Aybg{(e(Pv`1K1ab}RC*(`GdiB4LMZ?I%Mqhr%B6 zCS*nCQQt$DFXh|?uq06a!=^xha3KT)RTPa`$F>r=6SeZQZQZ@AJu^ApYEb%>W&jXk zyWLRO0W$nDMYiKOItc8@;FSiB1lw>2)xyW<^k3mN(s;sLq0(AOUsa+J6rQ2cFoutY zP)Lmik*mSanIg!n74%wvXJ`cGq1{M@)5V4fiQxHQb0QnAlf?MavD{d%|0&SCD~cFM zhg8EYYF^b1DoUe_VO7B&Ne)+abL`l;dbCPX0xJV4$qq(Iim+@mn_uF;D|{M6w}1EX zHoB4ttDuqNQy49T#4Io>U=N5|5OQJtQ1Z5gbYoE48GGeW)@ySjbdW2%eg-{pH+}}_ zI}mnLzC&_Q^X{`cPXLU0lQ)CKOmw5M@4AO{5HJRTEicSW4D?kiggAA+h(>PF%oPu^i#H1I#>2nKjVisv+K8>QAYlhV;Y&Rx;s# zN)FB_vR7F)F!_XvV4Df>9#Ii&vXTv=02Ox^Yr4CGvZ+b=$Z!8n4N4`CaB zlS%(Y?h)=qyB;20jZl@6i=r7KibFeNCyrt9GX*ouPlAsro&~n}3@Vf2~tr?!Ei=M=m{b>g0io z2QN-fft(K8OnxyPQA!@$sU|X8*g*0-SVVqJSv?7Wz00)65CuAv6tmO8?QjGcpfGU) z3s_6`D!q&zzOK8X1jF}EoEe)r+2@wSag@G^?qI}|9$H495d;K*Ygw25UfGjPVeSxG zyfQ;`IR!+FR?HmeH^OFZepRYAqk)LKq6Ji0m#0=*>#aZuHZ16~%7vuK$2Px&1bw7d z^og>S@EaLF%G*RyjTgfC1A7Lrdhp;iujNN&lG`0nD+iY9ie&f#QB%vLG=IVu?=J+? z!A!uH)8#n)2f^yggbN}5a&cmA%JOBi!?Uw-D+TS#1c}*&Z`pQ%w7PSZ{CoRq;{4WC zLIv!rsqw9=gbLVKGxx)fy82-V=mQYY-P~e(j`*`-UE#Gu4WMTiDKz4yp}ukGW81qDG&4|*i1%-ilt1t2p&wgY^Xi6(^hIQ#gFW(xRp|`RcaqR zvH2yxU$b<*y13C-pAH7W*MtA4Ny}epE#rI2x#SL5U01h*IA@qL{9~fdm1{z}QfogWSQ@-30Nrn$>bV>I~Cn zLf(mh*$=EmlH6+%9K7ti;|Is3qZ_*FZ%dA4c?`je&iv3?^K3*ZG`I?Vr9v!<$G%mt+?;xpi` zg4^v?HtULO?!rWGs&(I`l8l)!=v0#oR1`_>>ioX_`ADp1dH>$TAh>tBE9B?SbL;I@ z4n3oYv{Ckk4@ukvXzK;XUe~d96c{G&xm-W(S~pFOGtZmnPu_Cqz}o8K0#%t{(zLIn z`Pf`jG6A*}v z$(RI+cfrs4M;7ROk9!^Wb_6;+|J>Udg2pA_aV;=k?w^@1$jswLy2||{|I+|&D(xbu zirFkr;^)Q$!zb}GC3JbNh)!a{Xk6XkngtTJJ;hp6^&s+3Eat!&CT-2O!w}}pFfY`` z!kFor%2LUFqTCk)S}ME-c26>jH4DeVRUV%*P*~%39s2Q6%r6Ilsw7#_L_%|U1JdSS zyFptnB`Ovid4Hpk$JeDVb2oEA>B|sw@k!% z+O{C+P3J22-R_g&+|IG9n_m*18ZR0?<1$zescbwaQD?;g42to?%WNh z_wC)gpI{)S{i#2|y_-41V^F69^hrSaMecj1pPquN+&}OihMRk)d)E|w3;G#%rLfZi z=fC<5{x{(A9pujOzP5TRykxNTNR)P_&b%g26N;93xPBlSBQ_9_Vn8d2BEwc3R}WFp zvmjKk;`;&K2@yk){P+1m@$0BaK5_UE&p|DmJA7_=acrbs4Va3& zRVGg)FwE4m1}IpMu3m7wiEX--@I*&y6~>R~GS&1Ad=b9vy_<#}S`FEcF!_>;J{ucYsN9Rp(ads_L%luFg5< zG&zTzo!-f_VK(n-wJU9uR=Wx;A_!~{3n&;K#ymiPQ8GgKfo)8(WN-k+b26aMp`WBhPJb(~CI6nM}` z8qfh*z1@bD7mp*Dh4c$+Eb~6rSmu~;EZEsm^w;ZMx;te-y(oM})Yi;^V#g2ufq4tT zY~hi$kQTs9vxz5Z!PDG*fmO5 z#iwV+eA%#QC?510u?Ks5N;=Gpc-FMJbyqZwMi{`CW;#0%j?+tkcBoEUz>f)VBZG;O z6IbU|`^uq^nL(w#>IW-v(wz#v4%1ke8_kv7=pu{u5#^E-wIr#%Ro!&QJ=FZcQ?0~8 zvC~nH+uqqod5A#4fQsn>60A?CHOiL8l*DG`*?p)GYAHP~oU{-JIpscq8dV7Hsqic|FoOCt5~ZXWb2-2Rhoc#a z(}9vp)vZ1E7__D*-Ql&nL4wp#&jp|e>D@mnpA^6-#ZHNz2>&SjCqE_rlb;ea;xYWX z=7=wg6&5hVIYI$5>ltroju15aN5mA=kt9TL=N4QK2=fA(C!=Skh_nLAHF2g~Fgu~( z=x}E}I3Jp)+3~9+N0YK89V)s)(N4XB`P#3V4%@ECt6_Qq&8NL2a`N&fP|V6MB2ld? z4FK`bb;dTXEPvoiW)%`Ky7GPLU$Mc?QR;)`F%j%#StZ(4&A+iUM4JT`C^WjqjGYtC zRU_$QtyZtCZZ1{<%y(9qa~S~eL^~_QmD9RE8HQ}AkL@WHI}N+4gjvJhgLz1`!E}LC z9;-AalM#cqfsx3iA3=E>?K417OR6MwngYj}pT?!n=JHx&U06HmRy5z=tYS*VtgyYyo3DW$}}xqR4n zIE4HG1#SKuk>EQ)!8moKCsfaz!C$k7yCU8BuNOio*4zt^EjC;sL#zjoTh3Sg+Ycgj z6Lg@axtjP{*egoKsyQ&ZCEnAG$%rpGy#^3W9C)I19KjAGmqE8_ zg=R1MDV-+`KXsF;Rq|QDmo?V(hZ#H!)@KRx%yxDEQYx5sm`5<%`2t#G!6a5}vGK_adSWQa@fc#KMyeEYR{91b z4%6dsc~mjcp#*|#ZvARFCK>_f?_fsfj`t;dGhZ(FqWBE-Q);>|iEQ)qozvB*tI4V6)yJ6S%*Uoinpe-Zo(voQS7`=(_`a{hJ?a!D1(50bM5HCQQ)eP_ zc5v%?l7dpkxRfGwf8ZJt$6yvI$1M`QX zQER8|rAUeurjCs0$TVbA0Y3^xv;ZoQ-2QYafEEf0KJ1{`40zTh!;tbbKnCtcX_?*S zbHu%&YR0E1K0lk}`s}XliBfJg0Y;PjzofTV)28X~7QWLq$#7h(>CE*A2t0lVqu&J~ zi3xRKLg)wMohUA{oHfpH5aUyzibE#eCoXk%B;rE@9TS}s#eBS;sCQ^^##!ohQn7ZI z>PCGX;UO+6KN6TPyQ4pj_QK7v1B;<4eeoaqyG8l*^9Ys`QP?i;F9N;b(uQhP`oq64 zx<%>v<&FI~E^mno+hrOpnh2ba=x2l;O z0@_p{_DxYvZayQ1-ujcloeesAtWd1V{vj+4^ozhO&CN~#W;Za?)ltl6QjrjoEEtTd z023}*ZALSW@AbJSXsdE7pJ%1>ip?+@IV(+Biw^6VrJicGf5%b`bXi&=S{Oz5IV7d} zC-RYQBfTx#o_@vdHwMP4&^tZ#crz7SE$2Hk=~OTJqe1S9m+6QK@f4;Y!BMt z9ai~3aPXlF7*V4QZm`Az5w>lsAne<{_3*aC_^!pdse!(FHIt_ODsu-A@d?C+N|;QI zS)S~iwwx1YYq1%(g2;4!(?x7>9%9bnK9NswIhUiL2R^z{F@la@M0*^SrFtYEw7VRt zXHx~Hr5OpKXA*iu+gw4tZ#3Mo?V3Jx^>Y~7lopQaL{y%MJEGm99v&OaR|*J@90B2g z;$QwJa7P+wuI`uOCYs&Z96IQl?dXY`(7^`MUDF+7ItVkR>}bB{%r#?9RI~b@2nJEg z0NNcG4>qx{f7jKOk%}lS|In8hZ63~gHxMfqtV&CRw(3n8^oN{I z?mEgO@WX8jLaV6yIUb07eP{%57l&?TD-un?i6t(o7^sE)|YS_&Q6<4 zuI!!*$AXv-M4Aje8#M~miaU--7f|}e#1C8{NIYzhfWzTTbf;blJpJtH(Nw@!iuw_C zie=o)HS1u8D5jB_VR^ha1!56<59q+arntcZhOIU~6GK zEY>kg-CmGcY6cS6ZXl075e zC;Ll5w_n2`jMU>Hd#+#xCc>${B0?|h=iSOCgVZZc#-Gw;u|Wipx{-h9*jA z3T&tzyB-aNt8SMb3w0G-o!!}5y}q=i&mE}bT=rD=mgT2GYwL?4K4^|ixEniWd^_JY zefs=FZ#sfL0s%8#OxjBoBi0ix_PV@@C{XLPeEFoWI~v*)iuUv+^n7Q3G*;=~b8T(p z?zhc%oVp72wuGvXywc-BmoN?>1Mr>T2s)3D7I>BjNYtEJnokl)HlKxDDiH}W)~_zH ziv*I}9<8|{aKifHKbeTS+CT`=TER0GsP<0m92lF7n!4BSh=nR+^?WX{$z2Rd_idB`0c;3@TH-{QXdcKY-{Oh;Q%jT+)by*f_$ z=2CcsgTiu-tR|SBA(5vY*wY&lphsdYUtqE&`tT9d!T9q1ZQP802 z^6sGJsjRsJ&!nfLAnk1H>zd!t=;lKynoQMA)|b#NNYQR^2Q662hYaoF{Fceh6NCMT zx4=*K9`qe#Ia(*&!eM3^wB=}l(V^9QF$>vCn))H0oc(VvYEi$~mXm$@#VjxmJzC(q zrC&$ftP{!^h*RPFKqIn5Y#EU=?8YEQd`^4_k@t+)lN% z_wNAS-#X>yX9xN^YS}bOlZZeVOybQwL3WlEprl!4wlYCE@gKGaUEpQ`v&7gHQtFgx z;Gs%3paktRZG@fj8REtXC*6`^vqvX}O~qxmWjCc9HeIjuCra}Jb_HbnPDqDca=2<8 zi1o{med>1KH=1z;RWlO>*gzTBHC{FSG5d4gh$n)sX6W>0%vdqj0n$K^t zcoAJkyogFs_$;%tl3z`}qIva4EMCN~rfzIr{ao9V?-7082`#g71S0bF;XZYRCdl>fZ z#Ic<_P;Wlj-`iQwXJcscNIjb^>II7ITMKU;zLq9zE`4j|Vd2oauO7*4{prYNrsDI- zM32iUswXX(Ad3Q=6C@UHr!zG|QsG{xl@^E4Wkhp$oEoD3UZm)(fL3lG9uL@W-cV5d zs+o>(L7D6^Lm4-^lt55`gB7`?gu>Im3PG9fsvll-qdWs=5wLb`!7p@w()~ZZKy-?( z)bz+&(Lrk{ih^;`dAFEs6CH|zadF7CA)!8EVV*So1Hxah(aQ4oDAkV93KPIj314L< z+#|S-j3BOS*7dir@p)WFY691JX#G>db8P(Aa2@Uiu5-KiQ&vsYhhg;Ln8tOe4hV7r z@-4SYYdpdha8GP)%!7_YhKUD(L6!rMnRc^|dU{d_1*lW$UTJB1iu5w7I=!p(3Cg+e1tN|++K?CP60wn1gS{=zD8q;Q)ae(sqUSC=CR2UdO}MHo5g zeqmcH>u3+Zl{^Kz(i zz%Xt0NFp9WN3KhjGMz1<=P~gxQKu$UdZvMDMF;h+yw3>F?cTY?_xu%2&1$a45&N9G zSgrswL_y5SiT=5PIe@Vcwp`nUsf5WPUxEI^3|ZC~B_KomD5AsXVpUwHblHvO%@SDr z)6+g=zR?2)5D2%!mCMIbHgL%)=+5NOLwll_yvgAP@_0R z@N5qthRIR9@FzCBo16zc;=Mbb=YB$RztC?-Vw!!iavmkOSMuIu-6b+CshJ(IHbs(AS7JU&E zZK4b|kchZ+%@DtJ8O3hm9kIcvzq_6YdF@djAlkliBHSPHc;w}qFHr{vo1993PQhe5 z4uU_hVjTgO?ly!((Zt0rBS8dzMTWlu!hS$j0h>lB3d;@D+EE1G7~7I~9GZk|bRx#W z0y1;$FkM@oqXAzU0bQD91SocK~(Y_7mrg7|3*b>md;q!A+&$6d(c1$|D!*x zebiRnLl?1?Fz;A~%Pm~nr1+it{YAgSZvbis$hHsRuTnBz z_aX|~{t{$L9xdYm8Gs`&oPccyHr|VHGUj2L5iDV z%FU<+75{~{!1MRlvVlS=7$}Dd!M^VD^nvca;q>UPJ|&fnq&uq)cR6b>Mjf*JNVKo3 zh)T9lPiHZxc$S|*AwfDKNg2N{U+{O$Rt9fAGCI>&J#lzSS0lMvBv3De(7p=Y8buWJ z?cQIC0$B*&zUBKWDEkyBRSCI3}mco7XcaX*^wfWd`= zI%rXX0&zgQGq^BvIJ4 zed}UxcUPVI;-W#bSJ*A?rYbyEuSL~b%v`jji%RTx7$fMX_&m?OLhPCn2R&3CC?URQ zSsHu*2_~pbNKFx*5aj@F2|bn*z4a#zlxHI(DLTArNHhr_eD*Jb)f=RpaL8o^ESeu?MmJ3OMKsdCm+BXQ) z)CSPDxP@$+Kh~G%%PjlWL)$|8ZhF~``$J85+t|_pK&D{ZRhOTU-U=3)Da_~}gTIOP zDDM(T#osXSScglTp$>nGo;W0g5QVHEEK00BQw(ik-qPp*^4)x%5?>brAmhrT{a|$AQiB zXUD-`V0Q*|pyD0lGs{}Qg%;FcVPS$lJh-!5KQLBZ8ta>_`z>V1_i;|o3)cwmZRo>j z_%j4z2s)<;kI)ar0xKMmHp@$b^<%fol+d~#XR)R+{~h22Oe5kSm{V$NN}dwGi?zpA zFLk$dBa#n`3jzq67p_^n25&UKsoYfzbOIF6jvl$>X-D?><)9QeZX~My{kj5EoN;hGET)HtinRx-|1d*Y;i_lBsEC+_b0=!B1LWC}5tk--o7*vdDC#o8v zh$Vpqz*{yhj;|KeGd0hQNXw`s$!^XlbPDAZo01%Y2FH~T3~!FqMnaKFsvIq&tPe0+ zxM8`Dz{FI#E9xo5tEE`4LUeAZq*dfxznSd`WqV65cQuvnF8S~XDcA*kx7Jxt)w3Qw zS&DU4a#0)XZEx04y#$Ty5wz&V5G4Y6p-)3Zue??8FYt_`!v!1l#%#!;qWTVvzW z&u@7qv~&Bwwt+p2iFv#{7?YhLBQ{*f_QyJgUGBJn!vuRv(y}3&>`8^VNY~m`RVR`gVK>iM3g+a7zo!V20=F^iXJSagmzJ(zQnS$_u3LFoV^}^SktwD ze4W_Y8}cToW9xfxEKvqADjXBD4c#Z|HZQoLX@^oP??H4$P}Fmvy_Ib`?Nj9TB;hmStp}DQ&-6kxbF_0o;se`W4?xX|28u@5L9=SEE?^>;~W3809yC{uDXC z^XtEuZWb?cFImXhc#Qbm(ew-aP{V`W02jxO#g8%UK~#(qc#m0dq?4h5nJ+a=nMauk zz>CXy#q#y2$q~nao_b<`F>Q8_jLf{K>=z-AU2y^)ckVqmJ=VBmBr?>U6az0N5e7?! z5@G*>-L#*Q&a}=T%(S|ufR_OoPNhrUc6Pw1Vi(4*hC7t(+`>i|+_i@%HomX`h z>3V*~(iVOpIcTR{wI_BRX!ml;SwD8~3rR?a!q=YbYk4*cqv5XbM!9K!d`)f|GqC)u zbQA#1-2$NdnEOY&(bF6;^EmqhhLhEJt%gJw<-A~$;ykBFs6gZrXAs|E$Q+!~Cy083 zv7Yv{1~=JHvB=`N);%o6Ne6rL7S{M?es*fh_-Lt^&!)l10923VDp<}EMZ;KTixL%b z8xavHPTF`}n^Fjp`o|-qK?YLOV1gng_&(O^4Zf_?Z3JPZ80kESm!+3$VP@{YDe!oF zAO8DVfgmf>QylDxfJY z39tgNPr0bV8jHoUMS_GMdfE^jj{A4G5t~MNHOyNVw%WlfemXjVUf$y=bp2oQc#5ny zu6$ZrFHSRX$A*&w=6lliq2NttuRD44ntgkgwl6^AlTm|S-nWKsEqW`Uy^Ym}xx7*3 zd0vAmfHl+KkLWH}2@pD_9>52PV z?`iJrzan)#x&E(7Mr(d|R8M6M)aHw#VTzfs?s2)(UVkm(OMy=m9Ssx(l?2X0!SH51 zz6{6$4J22<#$_%)>xO3*1|>t*8-`2aFhZ%0`gg4o^$GeYO~%+EjMA6c~+AWoR=YM3=uIz7dOZgYf&G=n>Ve+}#D^3?8XK z+ca|^hJ(5joJXfM%%vuQ!yFxaMR1ve?BggV5X;oovnAe`xY!e*{twe8kvA%HUWV^YZ0=vERzZgV1=czp@y(+5K9{18;vHN?K3*A z*&d?(M2khC4tz!>$|3xlpAd{ThV1P2<@{h~s25IYPXSfgKkT9YhuaS&!PZ%f{ zJqA)vH_k(vaAYYBTgqJM-cy0<7d4<2%SEt4Q89Rax}KldQBS0uqv`4vuMfx<>AK}_ zICGhNXUHrSM#c@Vs3zV26Zi+5yS}K)7WAlkq3lG45f1~pS#ky4mB~gO(SBc7y}r5V zb47iLOu%qvG+SlB+Fx%F??JfZy$y2?OS}lf2hS4--A@M9P>YHQ3{U{KAXEuk9q3v+ z{$kpP`x<2jD&I4K@PLuj(oEdr>uH)1S~Bb#=*^@O(D4mCiOfS1`@8L0Q7 zb7QfBlaH2-?;K3}DswV=l1T}QeOnWO#J&~SrKvIQuVIlK%X*KqJ*~JV#@wW?7D%2{WGUW z0Tlf=n7oVP4~6Z*`@thfrV~F{OV|d4@Uz?^Wb|9OKIRWKA(GrqE@CvmeU}>C$gdd( z$P6)z6F!ezEbEa_WWZ8x9_#6XS(}bVn3u9$+-~8<_?f~Fm?lDcXt=4=XbTK8<#r*k zl8RukOUT1v)om95r@iJ7gICr7uMDVOGJ!l~%nmVhr6=!oXWTZBtX>369j?RnwD6TR zXCkBzH%(Zu-%{F316E=cU~L7FsJv(n9>-N&)Z-9slovHqf|MwGa0h|v9;7bhC|jpb zLDvks6>L3L;;=d3Py^BWT}yc0-1HAP?>AM4usXY;(xK3p)pV} zY@Q&!C7L+Dl~;s3saH@rG=B8fVW&&#T2nUk+4A1`4pag}mD^SOYJJKjN`}xOXW`{n zP55l4V~oLvDd_(Gtd)JRR238Bm7Icj(Xt_u<^v$@_KfiGpNM-=qXgT z_{R(t&+9tlH#Kp3-(y!9j0?|rkUawkKq)9a4&c-P)>Jcc!aLE0!~QW@{OBuqwK8D@ zeO4B-ASP87!>0Bqcyt#OiD`suoHGU&A5$;Z93HBS5yAew8RCkWpV-p0of zk0EgU7R@1`ga6W;1t}wa8PKx7w%+tX;jOp>MAvWScMv6ZhxASSmh;w#-xc1&pZOk) z04x5R5sM*qI1c~|w+U|&(;Qi{AZSitG7;xQeX3m-&U-`y|8LmO2xx=N5XF#jD0Qb( zwxV^&QE;G&8#-P>M{Mj5hA}4c(``7RooG}AU*nR`z2qYss3P6?X-ICM{gQfSgSTxx zb_Q)rPsEuKP)1liSK1xvuyk`?D-D~Z*E<`gN^6c9~Suv66yH4Zz z^@oK&Vb>W7osH*^*oOq@WxNl+PUHFYhY`rZ^%VlSu2v*z`lkd2a$WfhuCIbt>H53a zbJi1*{Y-c-=7-_n-%NT;7P?pdTzZrA7!KI0gj2$)#_@!xiYI!}eA2!}0V+%0jySAf zy9-%71pJ`JTJ?#D@q^bAS!NVKf+-iZknC?^>FPrZ^MY{f+C!(VKDBFU{;Gwm==h$T z7#S+noPYqKZwgZDh!-)(yXm^o;oRRhNU zXRYK7GYOe1Mw823Doj}lDIGR#9CpP_$M1|>Jy@S9!`<(hkK}TocL|3wLz#~0NW{=w zUFFhbp}MuZ|I|=rI8ohF?3r6KE4#)zwoWF2;K}bDP7hVXF1r$|B{Rc4;p~<|PcLdm z-Ql6Gd}AyTAD{0WJ2sN4FH}ntgVEB??!5OCqZkH6Sq8Ca$s9NEzC*+ zlrRJIv!xpF_+DUZh6?^n;I+Xn7Z|s_TC}6y9hZz(xFTQ~(?BtXfC0F?;lC;4Ad#k#Cz0}{fK@L02X zU?^a`6BGt6YskI)71fa)&X&Q=2~|R-;GlM2hff z=?P2W!E^(J7RSWV+ql_u8#`RssBf@QWY**JYw2?sfNh_@mKA>R!zcZk=Ci-o_H10G zdv9KI@5=oUnzzsqCGUqW#ODrReFewL=f!CpJKe~MZf=YxpsPk}$Z*@F?Z~N#(p?w} zV502|C(VFY2F{FLDAnP?p7Gvs+}B+xWm2oPs>8_aGX;cVoxTC?@&>(@_F=e0u6>5v zv`t8{SM$NBU5iz69;8rgTCh8k?2gsC0=YhL#cGoNr-4!~;LiKhQopXcw-&{(z?qf6 z9j%%sN{b~@9mienOeI>&cvBgF)u(!n1cS-2+f_p9PiU-sUV4T2`@*%tS%egVQ!kz?Jih!4zT0G>=Z0uJ!J{d-i(kH3`Pfbxp<@dVxzIa z?gfk5`a6)MIR@gx>rWj$d+aRU=2~h7JU{Epbyl5-!ZOu9G>jcX+k*mdt3DT9BJGXM zLfV}vdi;ZF`W{Qu2LfRWZWMg}DHj)L&I^@LKYC3gSpaJKNWkj}qHipc1@5@$j)5h$ zJmjV20NlvkGm*}AM=!Z9k972+)7JPG+MyCne8p4o3Ziv3gxaz$#4of?7wVy%>2Q3o z{LbfDx-dj^xA?z7<+2E_hXCROLJddH{D?{v>f7U@h?OIRMG;ADn*zoF1af5U3_=fr z6?P?51Y1Q)6EyPHILJ4FywF*T-_SnlP$M?ESrBHYH!n`2{e&`*+3h{JG!hsCMi3Ni-U$*B91ll^16 zMzs}^5&*rTSJpbnM0dFDfsb8uI(e&z4`atqBf@Y-INCT;!V*uSO&4+8QLB=cfwBru zAydVIr*KP!P7a_o4<4AE5rq@S4xBl7W@-D({#n%LSe+iG#p#Xk;bBbGhAm7&kYlDT ztR4?T!=^mE2D+>uI?AG-d~Z#08nV|pDw;^O3^fOt$uDt@Iv*@db%afhab!|)>txh|$i@ehg@Pz<#{ShcK zfBw2;u%uZ}wx13uX!XgLgyBr`umN@?4-W~j3T)63g ze-KTQ`F2=+5*h;C^#UG8du0mzni{xmtaoBhx}tZo5hAR3{dM7xDBODPx>sNS>XXOz z@7=j$aei_F?dhuFs_7JhVvtzUE$ugaiQ*cu6|H*FlpP{#x3sHWO4>RrF=<$S=9fb2 z!5cJfZWo%>HcXaqEPw8oLj57FEU$b9U5>sc_@KFVHnxuvd+v5LZ6Tg&yb<)c=BChvu~dkJd>(2v&coGRHpKqnZ-9{x{rpnYaFLF3o{*zsoTd2boNt1qcsp@5 zpF$ZUjcxN(z81+wd>*u2a+^dhVyLEQOH>1eTs<4u>qv5y@b^RP+74H5)wA$BOb;@3!Y!tl6mwB_HN-ACrdrS35awzY%8(l$3GPPi_ zkP77Dx+B+{9hmb?PIU%#dsrj1RZve4=g2w1bXkA%JPO zAy5rxl2ZQ!cSDk26Jc;&2lJA-8~2N3T3uu;004-cpT>AWIfMmb`A%RfShjQb&bb+s z^L3r%?hZo>J|@;#U>#m*C22L@JK<9n$6DdmFs7VFV;&=*Yi6xVwn zlsmhK@8Q!whZJb4mI?)euJ&1vlzV#XNpPvJaX(nP>_X?`3u;iz^bPl>FPL!^NcLAi z+^2-Y&5QvI8z3dl!+2%jKG5%A|G(E1coe=ml>1;+>=t?|i}fH>r) zv2rmM3HU7Yo|&3WgnQFQg-OaVM9qK$`N))xsDc7oc6B>_cIMA2>{REK>4iC!_H~ ze=-n5o~)Xt6tKT5mFe$J8K&1a(r$c$5AZo?!)ur}9D@mYu(59enqUCvM_4?VC!B6L z<5Y!!pc<0)mVVSY*$ng|R1jc2ExkB1MF6X=j%3_F78tvvUTlUHC__tO7qSp3$-ZIN zB~YHN)sY7;yA9I@n(_)8GqK1dXK=q462KVTk&^luD%Pk4>L#EaUjE25p+=!asrzXG zyl57W41-Krw0D>?xQQqivA|OWMwzlYcEe%NnVTm>uy0K4-n_d~ibp-Buu0rR`xmJ3 z61A>HoCbnL;sh56GsyPsx_+oo@urO3jQ=p#0E=VT+TN!knvMh&1ucA`deG4{bV_> zbwTq}IH)m1KL0>`KjQt{gfH+zs(=i=)qzofP-+BxBCsJvaHvFH(;m>8sHaPheIFZ3 zx${eprRO#(8+^UB%*@go+~5*!#?;p0w_<4{{ug3 zHvy}sIY$-xzkq!n=NT+yRxyQ@g6_rfq-e*v(G3U%v#XGmqI3^&0-+mgG8*>o_U&Fj zOX#y~C3twT1caP~nW+pGcO+E`(PmS_CW?tVmvb6Sx03>%V)>f0e72Uy-6^pA>L$3E z9QhsDusayn^{^lQH#&~_(*Z8nc<^SQ10h3P+To3iD6FldI*=3I3g zn(lt-%+{;Q;gnNBL!WR*A(YG1Uw6tUxh8-6lwzXHW%CFBjguLGlCJ}Ocpm$*tD7N#^8WLjQjCq7eM`06?lPRK>WMqip)%eW8aD#>wA z&Yx7I*jPE7l*DXrEH)4epu3FjjC$%0L|vtdmq5Hq)$1$w=FwLsGhRU-Bf|r#C8s^D z*ifJ4{ceXv8xFGLI81;{Er!|?T@M;4EvZFwVI9Ou4i8XLvcJP+rbAyAMZGc*!;5Hk zpMQtbj$q^WFo!kPXznR-wApA*v>MGJ%K(>>dXmlyhXk~51#IaAo1cq{80TDhFwqaTVbY;RM*jrF}osZ+3c3^G~~ zMoC5oV6tKY0StyX!eLSnCsG)=&eD7=d~V5StttwAJ=M|L2sn)bjQ+MFR#veoT(e>3 z7>Hg|ah9Pc6l{4O+4gfIvqZwm5Eci^z()XSf)adJG@Bl-NAGb*bZ~PjsV+dS`lE%p z;~iV=nl}@!6;Yq5xsqlsgj5MgTa{?Mb75B=np=|HQ8x;wbCb1B5WtCDhTWA4iek>K z1W-`~oX>yaH}~QG>+&4?BOGwBRdAgK)t@TJ6d3Dv}j(H zD1m8O14aOy%*>>Zx{Vu3xDY@|0~(iuXcQehOQU9QW@M{VRxMMMgr-#7aUh1e+Q23D{YHs$XPUpv~n=lY>Q&S|0t z4nar38E4a@iiqkGDxb1zDSzj-(R67%9ZTB1;5*R#s*Or@oQVY5zC`U3!jNvo<}xtF ziE`bnZta~sIg?kZ&n!$jQ*jUbfxWkTv%14uo7q<@O;sxKG0@z=o`ypVPZCwUs6sOA z#XOp!s9=Y+W6ORSo?a5L$U(tM_IV(}jM9A7y(6Lp=H4N?4YKnMT)RP(Z=*wDJQhLy zGP!nulCaZph=}ai+%zYL{-4jLMSjcYmF-o3%b(k;q5FeDz8X9=uP=a{GkDUxj!;b7 z+j8RqR4l#f#sx)ZC?tcSpjBRg9vx5>o`D2F*_Dp zh&N!SW#x9%I{}*`+>U@P!Gi!EBwAsH`FzPu$F3zNiN@x^fzCQ*tNdOPp4Bj-KadM@ z?vY`j+j&-!jEl=8qhrzrN#Yg-n>uT@V2Y8sCT_Muh#wdGkM10C5j))?4wwGzLq+zF z=b@_0cE;PN>T;u;ziy!YVjG+A@;~qhqAlzf|5+5ruHR7ybKS?Fn8x-G$1hG|mmOXu zv77!ikd?JxXrmg253=$Uuw6Y6!jpof1Rx<`lE^*(P~xXTzFfLc1!kkkv4%>`_!h z=E~}ITxpYIqOwxOgN~^D8fr*|Bw{G&)S@msTHdWuo35y)2l_d(uEH_yYmm<~Nb6^5OWj6}Rswwu?23 zWH?K?H*QNLiKGMhR$WdK&R&!(X1TtH;G`3_6kCjIz_>rofWB`@T zSd6cU|5H+J)DA#mr`LzYcLBV6weTxE8k9%I5+O6YcozEsb&NP6QOJlBj25I-a#lkq z&H;uSq7i8y&8i;P4hEuqX@@B6-@D`LrK?Ag%kS$+C293^hX7P=lV5{HIcWvgM}nHm z$2|Hq>V~upRghx2dB0OE6>E3OPewdQyfL0JU_WSbJYe%k8K^I|aEdn)_9QxEHd-lr zw5DxyfD{@!$!+sRA|C%}V)K|dF{n%SgiDLXHR^j>`(*b_QS9jUdX%!Fo3Vh=(Fa;? zyLw&3hu8o*J4%>mgoZ>V5c&5+8j)zaCM%p9@Dq)*;IuyHTY)}hS_>0R?&4RHQ=^5%Pz60NwHPWgd}_c8 zMeYy!6=zuQ8c$3Pl&1O;5gR@+aCDKu(d|zPmIzUz$5MHk?CM4a|CEEbT6GmvOwtMiTpO9mkwa<7`{ToSkUSnIDQB z&J`VE)Nx8x@1=x$3LS;e{7ux(qXW9kPB=}wm-lC^8>MP9nU3HGqv^$bvKXiV z6Wo?W?TO^l7wqT=>C|!R;QXY?4VW~@=kN>#Zt~&Ii=LoR)1LG0R8w7GI)H#-j2@nA zbp*Z7CJdGEA#S9CvdUHoz6_1~Cfl_UR5}AHA|-iD_|PLAusHKE^(4URkcnP3>wVbTRya9=i*_Us(OBzFJOrk* zs^cu!_yO&=9%>{-;i?1M7H6loOb!jyDzQk=&zPu>iN{FAv>-;1VJ_r2F0dxhE>^IR zFEBJvm{1e}{uwzWJivsza7;8e3s%w+1)}uJ42*-=+h@2kfsU<1sg8cId3a!o!!%Q9b zQoetRWLgKm|EB>R#sQ$}tQ3uc(Wpi9C1a@RL^K=Zf4mg!DHj|JIX7M`?b$I=#HxJ} zJLVjA%ogD|*YpV(enf73-m(hewpsfAUP@x+nwBAk;J@1~1F?M&awyn7TM$GT?d`6W zxrsKK(j}+HFUMHip}BIi-b&t(eP{_HilL|~x|H-te}63A z+l>ET#BlssAQ{QIY(8|JE_Z=u5^7b!dHAQ8qkCaKP9yTao6k}J>H~-m`7{OF(L#ao z`otR%x(r;&X=rJ{eC#R`gzO_IVE{p9@Cc}r&71mq%cVjtlOiQ-%?biZq$nt!G<2bz z+;-gMF+(B9D;Gt`t2*2dRiyPOrp@Np6PdX8AI*Rc+Ca4GmBv&lit0EUbU@IDaF8#k z05Rj&y#br^uDo9ig0-7{3gk{C`RC_Sl5Fr<(p(|`zoN&s2&jM|JC?tg?f`Wy*%<`0 zL_==L<_V3If?+3D9L*KIKZ-vf%-ng65rGhX?kG&+RpoRw|Nw*l?IV2bs(y+R{Nt>`%EoJ~6KW z+txMN=uz9#kJxNDd`-}8MI$x|rzfm#(IGECtxNh3y;VAu;rE*U>h$DPwf$7KvYo;F ztLB_Gefgg}P~P28W?w@Aqg0>fi%!E4}aN7KKG7PaVqpF177rJ5ieSd?6 zqeVk_1v(Ll1t;>i5Cp$}lkSxFsVU~)1(+nnfD&i9WHThX9bqFDvQr#imE8k=u%;3C z6@H;z(<3ft*wEa56^xG|efbA4doBJag#myAloxFRfb~xbsL+50?O*wc_yze|)S7(> z07P&yptj+syoThb9Om1j4*&DY%hp_fQb2tbzUglODgG5= zb{D_Q#=lGWbM{R{`D&N1;Z<$yo1PGU!oTS!{F{`O2}%s$&aYYD^b70Gm#w+}B<`bk zSC+rU5((CLBOw;8@#dQGkKq^5c&Z-xZP|l2cm~fe89CS`8v40>0(BA$xcpxJ9(#tElN+;yyO*C~D%N8zo|g!6{4G@cc9Vu{~lU7uLP za{s8n7dC|VY-hiJ(h~eU-n0GsW5Unaa|q}E=h9E{d;-yw4MpHe0Kin?jeJ$!$XA6% zJ|le%BRSSTb?8;}x%AOjt$zM7R2%arVQZm{C2g&btlL`joR6X8eeF0=_-Enm{QKU{ zXPg=r{u!IWj5ULp0n9jSXvk^`*mcavJ=Tm+DHhFC9^(N9VNE9TSmB4n_ghy(RA^qcs;H8bS@?-o&60QjUsr2~QOMi%$WH%TxZ5X;?aSs>5Jeu3@Ye*FpSTnXYi?bja@zRRYbYTbSyyR0f+5;^E*QUu~6 zY697&dpCb`jFkMOz1TOFQDOXc;Wo?*>WKL-w8~7n@x%{PFHxCnbxprd_ze4|Zv66J zr#H5)KPr5YUGKwluczgdchY!>(6_AX6VmnK!_Dj1gyVF5<@)$9q$PJVTQsE4epB%J(27O*ny*Ppc7$I|9**XGU5 zO{8CUwn;$hIVJ&8Qv&$!eP{D`83o}h?04~ZrR)4%3ybs%s8Hw=(%m>~Sk1WpC0J>6 zoi*f=cVIO-*m|YW#=h;8f--Hk?D7MRhqOMT50s;ALaxAFc+u8f!2qFmJJ4k(77a`V zr!)$fH2GwCc+f5J1SHwp6hVOneUV;X`!syB!*3A8%8ts+17=4jL%_ZqtSd>y}5f4>XZv+a#V;Pg1ZR;DNmlHLPelH5=iyfshpGRoVhs}n)Zs{h0&&}uV8}mGi8da~=e0_39EJ`x*-oie|1;YcYdeZK9PFhwy^ z6K4RLV9%_yo{8QN&$W%j+hU|5hJ+9CksoS~oDiR&P0ZgD+Z7|BhLgYA{B?gLJ=1!Q z4O;&>_A4sFjnMlN^!{^r5dEARn-Bb<_}MkLe3#uK2+us6)`kx#Asg8eQh)GU9WUs&(M^(_`+Li`T(bXxZVV=uuEgzY@B#-@E#_%JOi zv#HF$Wo8@0^&Du9{svoY8cmD+d+Y~@;>g-1WY4{E&B#w+q-qE! z*9ZlTlYGolZ9eg@_>_pF=$FBkI>n}hJ@Jdu|HYIvM}CrxRL~-Gjq!nz6XNUGQnQg* zYW!AO>S6i~WXPUmznBbJO@Gj;K@a1ucEk5k;eBi-ytuwvgHL+?W7hQ_iucoVtg7+{ zg(q9re<6LYhFTk1X=ml}Z zqvGVs*YlolO#R#Fo4g8SnB+iTfO2UNA2Y?z9 zw2s*u zH>(w=>H$VD-qF|f?aLb`#o8c7&;7%dFz{c=ScJZ)O#xLc_6d~+VhkwnM{>hTHrYfA zCrU{oab#x??6?07m+OxalRYZjBz%O&;XLRGjJUcko;ti!cIYTyZO|pT{gMT%C<}H6 zF=C#_&qq2$KZAfS3^0n?Il*+ZN+97X_-L=%BrE}pQOn7PQUCxq$%+52K^x=aHm$C`!a9yK6Psk3N+CAYG6a)^c01=ST;lkO(U;o;mgG714|eV;Mir1W)&?Lj>bdj@ko80rQ9470Pv2{ zLtDknZLdPZ@nWl^si-9y3~b*zGqt5LGSu5$1#mEMb?|DxkDw$P5TslT;5?I(1DX(Z zE`-9Nj8>kjN|wR8lD5uMSTE$*?$g6SK{{;9XSCoeUKA~Q1?vnFTq>Lu?TTzF%XVFi zzbI04s^}=NSaw{vg|Op3ruI8w!8RAZM7Icwh6#i`F-+IB7qbA zmc%WmueScmt;y;`jt@&L&XgH9b7C=^sOq=g9 zjF$6!H0?Sp5srPUcRR#Fy&s5iTV~j2hhq1kUuV@9mi1i8+gUgZ1e2y-q!-w=`%>9_ zaZ_H6WU{8_M}4B|KrbAWgp~3LuiqaU9v|s4qtUMtDnv9&1CgZ98PE9CRA|IEb}WWg z+MmNc?o>#8)?3we-3G8a$Z2KW05uf&yO(R4ZOe6I9m)P%Zz!sMpUdgf6jRrL%c@N6 z+?5MQ>vOxd$I%u{M$EoIv3VRlw+Oe3y$$mSc+iv@)`vu?6HtP%iYDRc{ z?j=dc*sEUolH1SSe&X1^J##Z%o%vkimgFrYXFNB}Hfx)laZsEoVIN!Vn;=Gz7Dy7` z)(|_suiK^0LKBe{xr!UJls(xw%-pmf=#Q_HyI{}~yTcpz4ErA{koiDx8QFY-xOb(y zFTY#Z1wxn!jafqY7tzRBZ#->i*-BRPxY0;H1ok99NJJp~0Q8G0js*y$U0c5HN_vS2 z5J{qbPYAyvb~c<7y|Cv_`Xs5{ zU~dXI;-N-91(3wcZ@u}()7Krj`oO+jOLH^hql5j0T=G{^zak{W1TkO0S6Qd@sEChg zJ(5PtP$o$vY}+r5gZ-X$@)$yQF|G%<{THyYUm%e&S3cw9dhw5biRA2*zW55nuum9h z^nw=wjBtch1Z3bme0O+5un+}U9hTQvEu*C=P~L6bf1BWcw)tscxEF~thTIzKUu=C; z_4Uc3p>MHEPA%^NIvD6ZUon?7?4~APZFr*N+hVR@Bp>$#6x~%G^=40-wN3F42cju2 zfY_?3N6T^3>D8Bik*n>Q%Wt2q`r{GRvvugqX{hKvpn4w1Pq|9?(??Kg&A6C}zoG-` zoSX_6yL<;RPE@-czm0YXsv$s&fIcBjyieka?qLw1E|h+ObDK^MWEa_9wbNd0eN)?) za4=9*6o|`e6#W*n86v${E!0uarEQqkZo^L`w{OF#g+WYpPjvL-*tRB^5MJviT|Ax6 z0#X*4-Qtht72hTWg*8Qw4FEIQ;m3j+s-fBrJ3VNp+mV6-(jCCq+MQA0#!-hD0AO3v zoENN3?s|{dIhD1Qrfd1RzW19ZAXqq_4I^BLnP>{X{PSEr-`{2E)t;&Y)v|V1Jnza6 z`Mq_cYh?Z6NrHRjJK{&cIW~vF*S9sCyHMGaOt=BoA~p=_C6hwTEob+2BpKHhPkvIY-~NAvhr)kN{YJ0$6l12Mpy`NBX;fp` z!IFD3=&TlOvdLU`qY#VvQ2+&!v4XKAIbA@&j<^FrJt9jahCF`Tw-nIx1NiJQyw2)i zZ?e>Qi7iu%hr(jN7V!iMrfv&|5tL)t*l~njt`gqJXR*@6 z#uAhnpnmKehEhBWCxEM1}8t*m#^EgX3gd@W$314AN+~0}$T0sfBlCn#ZT!cnS?fI<;LG1%Q%K;za>!0Se{gbuN8 z71ffY(!^Q)G$FbWK?)=RU1og*pA71z48=jdf~9bR-yGT3)wy>pQw=C7*#53~JXbW! zJI0*#{S#yJnQnAwEpLmAR9uxh%=Un64jt+ryKyEGP&8Liccr>#b3F%!?ismZy6@o7 zz`@B}e|CPfXWxJ;9Nk{PukAwWM8vNh5N60R0=XQZ^q`favPT4fTA>CgQK)A-1dp}1 zZ2m1QjSPwi?+nh2%#@2LsYTN{MC1m<0dkBK9RAJNfn{H+gqdT%n?(@%Q^Y1@X-{lX zk@RMBi(;I3mytArlhw{0T?2#u_knE3dlpxGu-b7MS{i39wprG3&sr}$Rstp zSMy{-W+LQ^c%7=|o$aajN8r_^q55@Otd?`jo&er19+S0z5)AoWItqlKb9CdSZHR$nCV} zC+qRLFW@X}HU|!m)pkvlM-C5--LS>hmkpI7o!N3iU;pjr4 z_s|FuD?eKKx%e6J9im(Mkoe!5P;!g303W}5U-!|sbTm5WcW*^|@XLuN)Jy&E`RJkeNN)-$ ziRYG|mR#a8=JgJ7OGB@N#3U=CcGt2<_JAf|K}e7sG*h;j=LJ)jP5pKcG8X8{geIB1 z;>QJ-%?0^&K(jgIGu$r|48wUG#QZ!hbHZ({2QMYsb%jrM!W(oN>%T#ggw}H#d-1g{ z>@p{glPh}bbRwC#}_^Ko) zUZ~^^Ymn$Lw;VNOIQZcdEVEr|NmEmM(~-|jT{^C0zI`tiK9p6qkD<_MuLDzm$NCy2 zWH4GqN{>71L8?$nNmP{->J9s|`o-#!?sg>{%B$hIR9LT*0?76vwosUA`5uPxYi2-a z0$bjbFJ@!wYnXty=0!|T*wK^#6--?yTEb3pv^r=}*^(?Z%a$IA>)wc4yg@_HEUPg} zuRZ7iy1IhsSRl5pncv{bl=vIs{lYdnPGeMb23ix&H~{O7@eP1HMj^pO=%4rmU_EF^ z>Jtu#!v8kd5t9==U7ht}KAj8)(a3b0xNVi31JgN>r(7T_-hoZQ6e(Li(v{7_)v}A3 zq1Mu;?4l`srgt2C=d!J9D4gsbOZjS!WPjF!N`D7Os<~FVvnaY7eJ9fNYR4<=TIe4 zN`z!ZQ|#G%6x;d#Kuvy9d|-5uK>tE^##*69nvVHvD%r5)2~&|%e;>tTHMKv~N7}Iu|G<>-gE~Dr{nB?&xZ}&v?N#3jI^vvN(vE8b$1S-Mg0DS*pVd=JP>GF#--V=|S19Y1)jK zlW1{_QAd4rRQyewF3!QD?Uz$JajICp?bjE~l-)LS9z}No`Obb)heDN?>(0yWvnHT-4W5iw6U~i~ACk z)`mPn^;p`c>vGDYTJ=#-O#D73^cxlH1rx!G)4AV@I&EzpMwmQ| z5KeH$=hx<8*sxS<%b;%D(9ghvnrj>l07E1|g6|ip5dM8I9VtBiFDyLnMltZMqPwA= zLq&HHm`OV7C^X&&yBrBa;-4ZWFN#7!1tRXqXp=0yV|J81u!D9DtWh}R6coSGJ1LyP z!{JwYCw=D&`8o=L$4{N~dTu&<^43$g9@w`qH#U;XhC`kc-V?OPhgBR*v_<=ZfnJ;@ z*xdg`A@5JCPQ;Jw??Vx*KJv?ta(95BMRVJ(MqbJAs_*_U3T&gEUp#|Ee*lWMt5J6Y z0TdB&ylijjT0*42-6JUp1xJTF>%sZZyp6Oe^2Gx~lZce?GXynCSD1@`t!g@KyCSc~ z8G**&+DjsLTxJ6PG1*1cWp$+i_%6DJ+s2h;^$IiatU3Vw$O7Q1KPNoMHQ+GLVEImz zBU%m|R3}3%I2^X)IC%-5VkMPenxm0D3J*2yK?<#muDg@+rZ}~q?*Z1m0IeK58Vm}; znd^_9J9aL3ZSdN|2N&mw)CDgW7#MP)GYZ5Q2RiGLMCyzmNVrJ$It#vBUbi!L{Ih@z z^dh;Ayy2N>L5FfV1cHg9;w18S@Fl(CfZHY665gky3G^2ADn`%|jA)O8k4ul_8Eutk zQw1wwMnVX(c;V_%~#0Tt-KM0>RCXujvnHDgY2So}Zc-UH5!^Sl$DcV;laGysF%fdzJf?Umbi zNpQ(!TP}MqB3C3uk!qx@Vigv3$&wvemg27Bn%Is{zSzDbj;%|adWn3OpY3$ZX-=Hn zCAs)6{=Qt|<@bNy8DO!y*yU0p^Id+7wE$+`nR(~w<^Ke~Id48%Z{LnX%|p#hoc&QC ztD7`7{sS1BydNl^=Y{vOsd8d!b021CJl!h_@)5KuqQn!Db!(ZqfVEFB<)Z>Js30kX z(V$PM@<I<-ao1s$i;nS+Tam3A_JR>hL>Cd!~_tDMN8E#KT160 zj@!>3+`nU6Yre6y-Rny_))c6(e-6)?$EG+{LMD)Z*}tk%juwehxC%~#L$cKo8r8uL z6xX8IEg7d2`l*sAnX5rgqR{<3zz!@G9DxJy@1rh1Lar&Z7>-3TDzdFF5ow6~%|O6w z88E0bL(Tr2UkzDMkw_qDa9 zGwq#zB#U$tHW=iLSMQnqOGmYb{>92SC$eLG!Egu4=zLZ>7%WAUd|QiAnr!tbzv#(j z(8h@ws!RaGXKCdU2 zH5&r)9>3Y?)qK$TK-On(0>%O$DKOW*XH)91fM|@0?sU3+)Og_aR>Tb-^;#8LG}uF; znQ|ann?meLuA#*XxZRImbrFiq521}3Xcvoap!WPa*XIHI^v)fEaP;twlRHmtn<}p! z8Cuob+H8wD8UlrI*Z`=i4~3+2qAtpn4Zh}PI+@=f6;KjC(y4=h(kE3!xh#+cmu>`< z%k6qQRO*#LHSxN#ZR>Tx!e1cHP(A{ACdGmSXKxz-9!AS}u8?Rwd9t;o8*Zo9A2ifp zum*%mVLjQN(PVK)){J^PHt*k809?H!bU=cAoqZbBb@vL7GJo0o=voNi`?hBxmUzk~ z3YpOf3?$n#q#?f*EM3x9TuR~9!#|qF3|8ccUIA#v)ayl@)sB7>3?!5^#3L%FFLw^r zBz1wxTnGRo=eXRtbC<$QTLe=8UU(TPA^TJaRm~$WaaGie@O$L-4l~CE;qt{hZ$EzT z%)QuwV@D4kIzY8+1mO?d6c{3QmkVBge?OcA?wFAraj2s@a)y*0|I!gnHnmX1!LeZY znQmLI*t(Gf4dx5h`B!S>fsG~#KiiRmWjgXhJqf|oA{iXOheKNN4FLEW%i9*kHC_GHQyAOQebyKnWzv!jS^fbvi& z*OpE<_H+);?A?^sEcL}o3qMJme$|VSXVK(Huw!-0wvpb+wqS=RpmsmAx6n9%6doD^ z_rnl+TmZmrd1o_**TMlO+pv#NG=2##f<3R{r z)vb^>VPz7LypAc)?uLO}akW-J03+L%YgyN^^d@Wkr1~* zT?rWqgsn>67NR$pkdAz&gnTB<#%ctY2?W+RG|=A4V{Mack`QPRmMHdHTu(xXCuj| zJt3i3emNf3eY1bowWpt*7emElbDt<)S~P;{{{Z?J#OszK32pX`-8Uh%Pook1S{4zX z-HBXJP~QMwHH^A&G*vhqn{K^e_Yd->if@VNAGA9{(O39M-t<5nomu&x_-4o%jBLmD~~zVsv0!&h4y{Bn+FH+T)jvcqH7cm$K|gah8UoV zYN}so2IWx8BMK6L+9!jBc%d)Zn>=wixBwMKt;?g@PT1buc z<=+I>6*N}<=7ASd z#-sKMR4;SwOO)3Nh;;%W1gT01mH|RUs@uK~^tB@9jM-RMxeYi9r~*5DaQDt_Ti31` z875mUpGzf>a=Mk>I#-TJA{lXAiL-w1$#5}ixRYVv-l@npwxog8^N^{xHF*K6+1{SXH-vk_hUm$Z z({VuG*lpnG?lV7Lz|*9&FirmuS=VJ z+qXqG^fuD)vQn3iiEsnCI4nu-%Ao*=0_qx_y{@?~w zSLUx*1trA04X;3ApWqdU}Jw885(;pd=)sUy_VS5i0n>8kp*0*Kxq`w?z*E!Auw) z?CCBQ6ES2RyI2>A9?YWR$wr71yJDOoG?3Viy+GcWEor=>6K=Fi$Jy$kTX%Q2OdjZJ z$#qOl=k&nFdnVRjJUOa+6<^GR6rH;G;n{!E`$sS$I^5Hd_J&)=N~NQ_`b*(VXG2J4 z8Skofxmfqcu1M1FHr-)=IP2eh$EHRmn#s0|H<0h{)Rj8#?SJDv{=YECb_tJ`HDIer z1g%Ii!nVl(vxuY$G$YDRdF&UlK5}QMIg^S|$+JlGrX=)+lJjO2!*)} z*_W-DTwoAvwD>wG?QY@K#T(s+OoP4A+}wdLGXwXR?=tP6^EU}M)DUqyh*C!bRUfo+ z_KHsAvhlVvCuR;Ep#G=P;p%I+o83KEctqaTHN6Jjgk$SjKKRZd`szEG*R(?w5zhO8 z;xQ02Z0my2g7Blh)ca|TH*Fm2j5EudXo)ZuYR$E->xflfSF~+x3+i{1t*bM!bbf5> zzRIgZ;~<*hLQyT?24|>#t^TWPXlt3+wi)vhhW4~Ht!-&px2xtgcAh-CrG3@*wwb#+ zGtCW0X7;RtOZ?ZfZ@CV!-$nVtQDIwo3bTSSK$F@ZDz8HVWTxc7aAgWn$vk3hkJo@G zoZiZWeS5YZoj$r@Jp@Ttp@9oVlrK;k7~ve711c6v#bP8b;MR+6t`MDr{5haDc!CTa zs5LN(!v&6%fl%cG5F*l#&;9WH)cc)6)4?w09{J7Y;&rY9NgNauSZK1*?%hBuIF>YZ+9o4a=$ z@6N2sc5XY~n_rbiz+jpMSuY?S)*#Hg9>zJ!OK40BWHDF}M!F<@lhO`fL)unRQ0VU# z1pq;8TU%yAdHdS!!-K6Yjrl|j<4V@BHL6vqcpztZ&e?mk{O`g6Ty3fEQ^=m*q8*yf{HKe1tHG$$q{do;l$4enTYfa`9nYowhLswP6ct_fCF7= ziNHqj5rGm^G;HeXVe^iFeD3XG0*3ug^iH(3$fD5Ay506p5(u-ibG+CYF#S%=2w}V1 zWzJj%M<{0#O+xf&p$x>%0cE$bshOE#1LH z+p2h`pn2Re-`+$ctl@(!!ghnKP^w%WMv7NzMDT%9yiUn7)hT1MKwA{6LTFd`2I=@* zCLRq~D9UVS?TWnx6%K@EvIzwoheyQhGjJk=CRh*OUY+OrlrN8aqKwd{tPJ3E5n*WR2sH5KThXUUy;oopyK_Vof0>fB{Mo+lbdJDa<8-j> z!QY&BFs4SXEh8VhZS6J$ox4g+O(l;NgP0=2nQLd8k)m*INo^ny!g-79W5VXPBPx}> z;ZbIS{&zT12}dHR6eXrlPRpiI8^2XOS!$_p<>VGR#eElwW(l)vQg-NLni>7A@t{D zTW0?;Y5`sfl_A(S#GBLJWawxj)4MsJiDJhOfM~`+GzA!l_uC1lmTJL|v#Z~PAOhz7 zF)ouJoou5B#FH$eE84Cl!V%oRI$e1cAhVhy5v6KsWI}suV^>ob<`vo1ss&bX#1{=f zvjuv=4gMoJG@sI_65ff#E1xbkvDVEUsg^+CakNNFsg%_KfGSL|!B%+(b4NU?HgZ;#x$P!o3liKY(Hf3UH_rbItz#3ibuoKZ-=Y z1a9173lxEh7Z(VVU*?#-ylR4YPf@<1Yy$6l zq+wgIDUi0dfFS`|L3|*QijUPJ@OguX4pMYR1?2(sow*fD*O}El&>s#ZfdekeaaGY! zY~aldgiwaAOoB2cRq79DVxR0o1{L#BL^I+wV=M;m2QpPReilF^*dkf#TVKKyI|-~7 z)fJD~HJgbQIWaIq21(X)PkIL zYV{X$-hynXV0)t5u!&?boq(wda!!pU{Bgf0q%=r~W2qwZN@mz=h8dIzC|iW;ELt&{ z!7M}VfFxR_%%!-mxBYh0z%~-VG}H|Y62m;5&LU|W4xZIaSY!Mb(Bl}kO%^|levbj6 zr`+jfFdVkRprWRGNFebbsF}^6-ce*b+gb^yuyvqq0EZV`B>N~n={!0mxi}#@do`D} z&lmD}yH?i`{Tl)Jp@-yFYzAt#V>$dU!yUHC0l@Nm6+ECf_K0B`A(Rm%iHBiMx{b$u zLB#g}52YA*Dp$JYX&tk1@F*TO7SN1EwD4>8J-43 zGRSc=BtT(gap^9?I)d=nS!@yn6khifdvI1`JgVT?N>ws|Rmcqi{&aR2$7ZK_4<)-$ zw}EJK6zy7u(g9N!FcZlJbko8LG}=4?!zi`9QF$s9_#z7=do4ZQ5PHE6$n_v|#WdWE z)>C>4`vxPie2Z|)sS`IJ zpW3o{y4H@tWut{v!|6M=RnRVu6!8 zPDjLlk>K7$FVfO2`5;IcmWh@qSg0xpdWHc$uZMy#ZeX{-Y*Ae)4I?g@l$?RlF@a=SOvY>$7?_4j$EXt!Kgbtg6b7*D8vs_1VQVBt zN~!;ZEmaKD=aJB02*3)+D3y;yP{!bVU=p7s0=Nisyj@5rqnu|S$Y;Bukh3^Hd;R!m~(*91d@PF;;HvwvVftK$~20Kdhk*d(Tf z$H;;y=5PqL?vbVer3>GjHVqxl0@ea|d_yF1cuaWg(aV=E+;zvy@nc7i9Gae5vwD1V zWQgn-Z-q2CLE!y!D&WMynU%-@*=nv$=nzsU3$%5GARGbc&{RE=Sw=)|gsV-j*Dp7^ zL?5yyvX;PTIE0K)a^(`O@nSTDm#O)Nv&o#=O5zg2&@Y-H2t!kZSHe#&c)am^#vM=^ zYmPAIj_}C^kDm1BeK@2b>y*l9 zNW;7}omD(sYxycaL2DgCU}YbSGgHV49q<&Z9xuc>!rC(U0B)fV{EK{A)|W+?-ejiZ z^iu2Tl_2+R_>>rYtq&50`QQBg%qZy^WiDJBn>PdPC`s zo?ti^Om*~z1Gy0H#wR?>o)Hu1nA|2@D2Gr_B6JqfZz^t0q1GIA}4eZ|8di*olB4&~Kkqz&dS6|46VjR> z-?i+?glN$QOQPm_@{>?9OJ1+sHSbdPEy_TfTIvj{k&BKD3&Pqp!y897;%SE(IvX3C zx^yK~^LoMScu|nN4l#pyxf{*pGi3GxHN-&-DIdkj{A&=G0GR+@PYQ$1v|^^YWB5R) z4-jlFj9^2{7D9bA6?L!d#qe-u8>N;hCOh0oPdpcCYYgY#gITkvb?|5hEabS2Rjuut zJ3u7}6N-pXE1A^nKhe8HFcBrOuQbOGBr?%rcRb(XNWblXb)68pxle>5G&0QaE@7j? zt|1$pctc=hqfZE9JzZ@GggOSNL*QK6RqU7uEH*TG@c<`js7g5jH1I-g#YLMzz9lSJ zAKsm;L>qvI0&m-m_?adJ3n4F@8!rM47l8qt6qHg{qV9Cv^d3J%0(z@r1DK=M89 z%UiImTyPFtm^zn^;<=(M-5K{~-LN`fBI&sOU@#r`g(9OYh%l2|)G`{1?8Iau?T^HD zJz*j6hj^6k#(Xabek?P# zr4JJQ9|0mti)cWYLGYqPNelvi%t9r|MqD32P~!nrEV*ExTWF9+&^gh>B8|3z7YyQHzXeYHoWG?#3X|L$I4m)6b63^@mX8;WCZ9an6wnJ z{yI8w7{d;b(gLaT4X8cfn~M)PSXM^^o$YPS3L-8nPu>^GWXT4zIRXL!&xvi|kz3jX zK4lg^I>bW15|4mm@c%fS8~ex);1hTdS=L-jCYLiC;Lc-G5nPmj3EA#eU0F{c(vZ?j zF)y0|LKOgn34Vj6>JyvD%R~wQ;#>sE0{qb+4A7($4R$o&ZU*qga94SZ*yT-lPbD$| zOhv!PFc55^;ob^RQPsHT{y-cX;*m@YIfvOzTWJAl+Dq{|zI{JG1T@Vg{#V$Hk}Hzs zKG+E`(7!%SB=dCw#zMab$jycC1ZYd66OMgL$!cg-tT6a;5{%d|Zf^BgYQNlCarv zLbgtJHCwmKN{l<+{6RdO-sv`dQMadOqevBXn za-birzJB0Mz{XZo4rM$zC;pnxNA(C4^oB=Iu9shZR5#8uV^OV26mJrbzOkkz1Q0zpNCLkvnmykGRA(yaw`^PnTmtp-tfs&ax;v<7_`iZ+iO zBh%U^8gawp_0q41K456A6he%#EWvBy1{rdh3eXm@vCwg1)HUHzH)8fMaxtXZ5l08M zqo$P5VA=*+MwSlm61$B^gv%I(NZYFzm8dA*0aQK^jQgPaMVzvD`AwT`zYUui z=WV%7-?pc^;B~<8Q8GpZdK`IP2o}UdByV2?RhalcH1OhEaIJ(5^JoDRxM84M4H-Dh zY4>37up`9YnikX~;$U|)^0!*{X+!hC%7Jx*9=gFM*@s?l<#`Qy5-A)|C9yAxHG|r1 zhB2cdgG^s@rbY)>YWBaGUQl2+^x;OBuiJ#Pc7Cf7Rwti<-YI6lpf z|0w@_^Oc z{GZ{Ur%}8!$nWp7{PWb6ABs8td_TiKZ@BV9sfqvov-J52W{1FCp#9|o?kdx-@!1}1 z_oFMbXk~j1pE1q@bS_-^v3M^kNe&C&E$a=`LV@6v%%-MZr>>@MK$OwDMpBo0ENCJ# zJP>qM@JY5X#Xf2$tyMQ>VexV-y9}Ur;dwCI8JaSj)1i46p9y%h1s9ut63>-YPIGEN z?P^PELLcn!>uD;aQ@{W~os>%w4zt5lQRK2^xZTHM3nx2=X&2_g46{?{(4i6V7nsPA z`rKKg3IjX6?EE-)n8IF5m12l4svbZv!kY9*eN8Q$>A_|c{d`DokN55yH+way!KVcb z04(_nT}9+q;>Co!KeX@OiBv~x*lk3NThN%;I^4ZOGfm5q)166=FKiZv2aD*RF_9LGl1OrIK5h4 z`0SLv6aFZ#q&$7<*wF*~wr$l! zispI;-CXO!s;Ma{LTt-bxHUp$Wg^xV9qZOi_(VKZ*F?<;P;&_8~nIqE|%sum5( z&^5?fW*e=_%DJxnLwyI% zJuuRBc#H+)jrUG&dhx7iXpcw=c8@ij7{z8I=_C)fl@SMxMCLi#u_8} zT-&9S0nuFZnUm=E2^p(@=9iD`MIDWB-<5xmepCFs@T~A7JDFKV5X2+UWMs|I4Nbo+ zV92u0TLxZ*WsM0q#}JnK$TUEcJTu65eteo+SRbACni!S*np$a+v# z^6KT5K$|K`L=@rlk~cye3_u7@4EfAnPahq;I2gCR! z_@W{y#Y(hfj#Y_e=?FWHW-Cr{?mL^LG9p@9=@=MzK#_|RN<^-nr2nyfZkM3O_^&4njBb`9=3OHa~Z$*>3(Nvt>-`Iq^=h6V? z9sZEqsNwiRUqdOPMUk5m{bpztW<~QlFt6K#_I82*-|UtrP7N;u0q#J53DT8+fztT_ z6v%BT)OuF8v#QNB(Qp(@I_ zaGZHQ&?i zjf9e2S>4jIy~D|PCWs8Xs>jS!!s~6jY5zK(8p4nUJ%P$j*Z6_Scxa@Y&UcytHB!!} z`*W(8NoJ$|tlO(up0=BBZVvYr(AkO}dD8{Y&n26l+3Q}s;Wc-EiPGX1Sl%NOV! zOj@lifn-l95)b$ys)8}KiBvIH+A>nmEZt+NiGDw_q3d_#$66-}ty@gh(%TD}O&gLS z{V$_kzF=d-4Uj0{(EfuI5MPGv@TBl;`RO3@8X+|5KZ-;-+A>YmubTeL0tXL6GZUaT zeQ4|O!M;>3<7^5eo`Fe?5;CAW$TBpK*IU7PLn2}ZfhN$8&!@};utjiYUQ@OmJt7E? zTzcq%cb&ieHsD@AdGtwK{qUY$jip3KKG2?z1%25$iDB!0yp%}PUGbnJeH9UKZ8D&V z<=ZxR9}sU)TYnCc!sUKG*4~@%Eui<-umZgU4WpxJy}cn~#TtWW zuZ8tz|0YmMvPkQiU46+^Q1|FAC1Ax?b)*uJToF+|#S?GCv;iCX|G&GHQn!&VgoA~3 z>F%zOX{pmq3k;`}b{X3!450ucik_4xMaih{ciTH$AyR3~$SanZH-? z&JSU3%1i7w%aH=}c^aASyOn9)_cPTBp@+@|89`7;`vtGA>0a$}5HNo_hxxNm8gx;x z&@7Cu9z^otyPg41Ck+ocgLmzjG0`%Q*N!0|GiZQ&bsD}NI^#pgG>I=`B1FZ?B)p^> zvi!>^{jounZpiYlQDxB$Ss6D@*@(W|Z##0B3D3XpJx@P+`Jo5zyXUr-Zhz_I&4Pb*rmb?khWB= z#O*$ZO~?|zIs=Kfb_9wFN+S^{H2nsInc)t~@@L}RgS8A*USl&w9yXYmLF+3jA;S^iFK_P?!oioqYRgth)j{2*8>hqC?`*zcCTVWxO< z%wuk30SxrA;Yx23ypm#i?*=j@!cWk?@Gi8#MIoSKfDQp3A^r%CLP;C|>d#ny(J*+R z0@4-UxeaZ~zcpuk%rwDiBx*x?5V#aCb6g4n5I;s&!FW|T3peUAR4sn++Af0|_88{D z`VY0>Im(Bwd2I^;B-1!Mw@-rKU)j5Pn?!8ZKD{;H@c5$-Kls4A&)s?E^vq2M_HBJ( z`h^Ya31FayCge`#ry64UKvNiCJ#4Y|0ZH+)OR^avQE5fYQ7Ip!UN!J5H&=<{xVghq zXSVG^rVbAVK|?G6_hcqlNR#U-{4+4t+qAon>#DETum|h_pT`~07b=^dEIBnul){J- zg<4I&+oMOCBYsmnNGPA#>>SD`dv}d$0t0>2^^(`-tl3*?7{oH&Zhe97!Hv5K;S-+b zJcQ4nwgCxDiq})r5Qe2k`SD`JPYIJkF+dWHzSF`HxFeq~o2L#VNwT>!iwG&%v_y}6 z7>nojsBZF+QQQOtMb0t##^4jDYLq|$kpHd7!? znQ&re|6UqZG(I*oKv1wK`JZOf)Qb}(s;F40Ha?0|f_*IpEMf5Q5^b_pYAn@KAB*q+cIXb(1Vu2Y{k+ zL>%>v{w@A1@j=!<6u&8~2Q<$!tgUQpFBK(S8DyxL#5<+_;3>2agEEl76EOe=aNzLF zW~kB^V9%ymiFBZK{TR#*yk;bQY^*syBK<0aq^iPghTVbChlAR)dEt_X45QE)cFeL% z*ITf>ap78S0rLVprzzUJf=Ft+|Go{AOnCJ2eb3zg%$>I%Jv@2uhI_|H`uo~i z3JpLQ1{f+D&H&tNRQS_($edJSUSYRm6p)Y8HwX(CAss|++-Qq+ zV1Fv}Md?H;9VgL)G?Ws7i^OeZuf)4891@5y&$K)U+lD>r#-Uj z9zENXYi(MyW3SI_?TN;kqn44~(cjRVoqek^B|9=Q$bKV$YzWc>X#2<M5;40m-F zx9)2$>aa*9T}GjXyNpT(Xf{H=0Xg#vyb(A#` zW&k=5r^=>Q(&ZZ$EeOZmqXYcuDhn@Ojv%Wh7cFN9CNSyGkT*Yn+1k5YxEPu_7Cxu5 z4xS1pLN1(MyyAjYND;S(MQG}S=H0tj8O-O2LpEn zB^YpZDZx_gAGFQXV8#2dICHkfbObDjw}#rqhUM6W_{E+Ey9~cvBBBoU5K+Gz-M+8T z-U|#L!=t7mspf`&f^sHwPh|$vtrMoSFU0CHTaRMz-+8^ww+*r=ZYU{#QEt zhr}sb*XZ!zOUUo?&FpPmH{6`SPJ;H;+=Y==eZ8zQ$ETw#5b(`Jn9ui7 zROS)Uhn3JgqTg3tUlY`TrXtX=;_EEGI`P1s>gu{+SV)8;61M0nb)R9mwaWm>cQ(aY z7SD|hKzj1@vKLrpQR0x%pZmhY5B2pj;TOL8g*SfgjZb~z1Mh$6^ACUiUFU8)bNnVk zDB7@o&G^t@?}L30wlx0v#wx*QW(Mk}nCPk4{L6Fj?~isj@SmwjY8O~Scr zb|u_pW{Qd8SZBak%wJOC?P{VbUq+VJJu6~KWGBGR&2^aaooX#^T*+~Vr{84%SdI`w z%YI_$5HU1b1?Cv~W_X}MH4wZk1T8g)5RcnpR)xRO^g5rvLm~eRysM@7I~Eo#>ote9 zqe^5RYad_gO0_(=vMVlm9b)pEmbwm@)4!1Co$J+ot|hKgK5~@{EW!N?FI9he&iD^; zwtwi&hu-{+U;Fyk{?k{!_;a6p?WGS~o$=%Ue=$C{KPx6B|G*V18I{+PulaYC0^;w% zD167GU2Amp4U`G~mCSWnCPh@863Z2SS^O0gJU=3QihZXXoq{Dbc(}3hX zySVCKJ^aYXBdAbqBABXxAF3Zfj?qODfDBylVZ~TRG{Q}xB^c3e@(2+(_FfO|ZyVZk zj_F{KqR38pEZoi-*8Xr{V*6BLWKEp%Uuq%}?(1tc5{m2_T{mR1@4yNUq+)R&+0pM* z(~I6(5U57;)y`ll1ZIlLT1b6}=7`krZ*1euqsdZ+8{3gUX?6QeRCUIh;ZP1A-hFs@ zC8qY$dc9^~lZeJA06Rb%CkNBBchDpf#}xl#IGbdOzbSlAdZC=*iaSV(JEHvw3#-pF zD^#(_6VGIk-=AG#=n&`?8)yv9%uEL7x?NN@($`cjG<1p4xH9Cms| zna7l9Rhd%?=f+-@25gY9sJ$vpkG`>2t@o_t+27c!)_YbGi??6xy~1n?R~)1jzTe7Q zt#?fllxMGYO_)%CPUddY!fV&3sHLx1zIBBcn{Q4ndD$w-E_yf!QpT&*YEwx8$bW0Pk-{g&prCcLvKF(=GAShcA)dMg%o#k&8oXx8V71v$e7L23sd4{0SzVsh{ z_OqY)^v6H?(u>c$@t!vxx%j~Sciw*L#NmV7+?*^wz4qyWzRtPGETGcryPGw}=Df%( zg>CVhorr)LdR@#;WHW5vlLv*V%GXYfkUU%>lUgJAJ{;S5uzo<-*FV~eWTvTp9_DDY zy+OM!*66D|3HyMO%wgJroVaS*wMN9nj-BhN69|TxdOGR|K3^H_FIRWFnf`K+O!@Mk*Iy#B~3=BYgJF5p& zN;|7Zs0s)kd%aGW7%AIDSv|`q>iTP_DypPNh`o1TW%1fv+|n0WuylFnRaUK+>07w^ z{52`vF^Lr4s8TEvZc4SQBUpO1go61$@EF z=v~wW&^C$@+`JePq^+ve0=a6Q8l`f=j1LHywG_R6>D55YXmO&;sPG+WxSoe4M396gLWhx0qmPfm;vVvK!rW4@Y{-p021S3s{z#~|i3 z0;IK9x>^)rDQW~P%~C;ywNtCPApbU~vM`aR{2FszJt|O_=EOj*evH78!RP<_JSCp5 z;_BPw55EWFZ@utA;j`i|l!FkPCd8&+{xtJRhnViAd>eW9GeLZzNj@qV0}iP7A}TW_ zFNx8`#Szrt1zPj_%^3vD5Q?iKMnQB`jfq}@X{#zq$)Uet7katoLgd5WunW~b5w~S; z)YjEL5ow`gE4&aG*jK4GS>|0;-q74-%12jtg&NJY^pzH^Z(D&qAN~+kp}h9Whd%q^ z&p!Lig@^9CWBlUZyhx*wv$-3}gODcBoaB-9b3#P`G4zYrmK#dw5MQk5Ars=n za}3gkqKTy544(G4;B(d*Y{Zj$YL<5E=w7={YZDvpTG`sTIou`K<80k0Sa{du;O$u1 z%7O)Ts=4*s>odo_5eS|m7k|H#OR4S}Y7(jW2#i;XEOz9SPt^I16R$*kIdd5y4*-Fjou zRDchn=F)^vDvH@vYa84c*%ypkU7g;D)iNQ6ha{KFYVM5%qMnitpb=9U+tjzMuX?wIl*Qtw8b{WS1%0_(|C%+4 zVEULhW1%BmlGFscV|Q-pQURw8jba4-05kA-0$OS3WGk?xeF3!4X4ASq=}UALLPn}H zA4#<(y{$=K&Kt@lqmkLaO7`TVEsZ`&31aR?mLQ}g34oW^vTi1n4fq;NC4rVlG1!rf z6vFJx{96_{gNol0PXPpHJ6a!~7d}SKaTfrqa?2^vgMfyhqA5y+B`%8|phhD4Dv2Hp z|1ty2U?#F6$XmNmpXqndt*Ne<@U_rQ>BBu!g{R}}z3~1MH}BjrI>Lkx{q*}k_QJ;= zx%A+>-*xvLx83~wiRTX;*fFznX2ayj_R;M{OsWEE^l%X5&PyPvMY29Y)+g(gP#zYh z(n>G_wIooB0&xdV7~^Yvhf8u;mAUF+o2Sm#C#&MBI)r&u3i?c;Z4l5#o`{ufG@k;{ z2VnTE=0IvBEyg>;4eO@bfn_UIvbJoeFO-Y<1G(9^mLreBzWQ{w0(zKzAnna##DK>; z*v5W|dahimFBn1%L?I!oK6f>9D-~kCSX0s;DIkXn887||nicwl&B9~COTxqD2b!3M z@wq^{LOkCE51z?e(EyInK6UZ~=TE-qWvT#<_8_f>0knYMpsoeLoH>7zH6_fL3L!P1 zI{1mlr?&L3V#52Ld;Fy*UOIQznbTVyn|iFgX4U5Y&B?fhCQSiwT|Q6@L|CO}mbbkk z-LJSyye%Pv`E_`$kaZ*qDCgu=U6fE)*)2ZGl@q*Ra;nB6MIQUm3e3S&P$J=e@KhE_~KS-25( zLaQKSC(ZeV&nOwW3r>ilqYr;OZ zZ*CkRNCp6KL`MqZi!|yIk^xvi)Mh~C9;7NO<=M+NXEUNbEQAwFl@e`G;e-`oV#`oO zR$XbJXlTA<&|ilC53tR2!7}me{I99sWX#AgDIjxAI4+txxt z&uOz#_^ z!fxOT=*dVj$9!JX%67DyX2LR{ZZ$=*y#AQ(bL+vv(Apc+-up-KU^J?GJiZc4op`Lx zm+mWueL>8^@ZtuvWW>tNH;=_OHPI^ZQ@%gNkoi>MB0P4-Bw(d^P7n2g_Zb`sBfbh5XNb z?vr2s)Rzx_;@~G<`RIEA`SQTKr#4Tn8y^LXP$_?)aG=48qGdJ$*q0!8m&mH90c=>< zGkfiXNLFeEDu#pdat%Z_jQtN6#Lh+V!8T|dXxa)ct?dHRBpheHSt*|<#RW3|5pS%W z+FV6?STi)%bd%j#`&ZXMq32zCSPjSAzk=pdjNS@+OjYrZHM>>O8;f`h(L&81272`l zN86{4_Noz0)!h^BXj}^gbYCv1#=Dpn9qBJLH$veZ0qmA5$R4O^yCp=3uS>sVR{CzQ zfpTa6CotYH{0VfG#3T@r@T6RdN0U4$4fUX1t(rQbq1RGu7%p_5IXYsXawPc8a2W7~ z9t`ZEC_-=Fjzi5u%}kvAQ6Q_ECa?(q9G$t%>^0#o;b3{+NrpL)aFKx7ta8@~Rtg$$ z0XGczFai;S^#KDIHZ89bCV*}rT=Py`j(Q=n+y3&%JKjn_L&1#NGGhg*AOdfoLGx z*F)Os)F6(m=t{jokpq` zq9@q2ZZsY$WRr$B(zyajG}l4f3LKTYgcIfC{i!6}6}$p~-U1(tDzzoR{Ynx~KXNMp zSUxZtT!(4&@WB=( zr3X2xicoJ1?dyRzwbIu!@BQ!(Z>v+ICU(30yZY+&Edf~i&0XJQ|7s-rJB4Gy@$%7L2tm9- z7l7?ubGl5Xz6tHuklijRQcfHlr-!q)OfVPYzto*GiUxfd2OP^yGPm z_4h=3ua5{vVVk=Inivi~p{9RquN(g^l8|zC7v>S0(J{`2y@DEX+GP8Kz0K<;#zzPH zyN+}pnZMEGz%qh_gNVA?M%yBcHWIc$ZA8pr7P!1rSw@}o*RaX6zg1guuams zt*a?ASbk)+tt-BZR3FKt_p&F;K1d~1ewOJ*8HOt%)Q}H41&j^@AZZmP;2&kv{dr#rIx%@A~4s>A_uq^%; zj63tTG#d(L46$T;Z|5AQ#?r4KltQvbOnVam1jIZqOrVfms@n~mY4=b5GoohxY&+oT z0aVo9mdAJ=>MV3b`6=On@_mOOTDaP@1v(NZNS}~XtlCa7s^%bR_&{3;HFI+kzUl>= z^)%^$eY69Ax^O#c*k(b00|A5pMo^)6(m(rB@+2eRS-3vgBGEDGHNaMefaafMR}|J1n=d#8;pNsACT!YJUX9n**|M{BXEsfvMbNX@%$i9%^X%53qj2Y2 zJ{-%nUbXl<@DA#0oY!TzDbzK(`S5Vn%!$|*(a3^AZZ7@eW7}@q=r|gyHubkBxZN~Y zea*bwTd3GL+zfiNrr4U8=-8K^-)FlM+n@g2A?{7o;A=Dk8}4D`6o0)O*te=LnQ-ay z2FzKT#Eg>4yBM$5^l94109Hl*o8uc)@s4T%gb0iqqZhnzq6svnJX$#)C*f?2K&FHe zl=TYEMt$yk*lwd1#=!Gnt_L9@6U}Y~M;s3b35l&r_`b{@5Lx7yU4b*WXpenqXhP9-d^KH~+iLJO5jv76&}y zQ|}Cwh?{eA044WCQ!fjDShk3u09Fiw(rXE7qhNSVuU&fYtu4J*)dlobt-N>2)*aIF zS4eAeiIr?h(}>b&&AAHxy6b?*wt~dAzP$D255Dxi=bnD@(#3o3zU5>+BCA`U^tOm> z9+f#JJa>{{!e0ZD^g;!^h_LL)#MLS8DFN3JWDz__Df9u@wi9N{{K z>C#@NVd4;mM?=*RlmMw3z*(snY)n;!hN>GE1w&H}I2j7ivJ~Vz>u4TKz(EC}txUYY z)^Y?LkgS$nX^}dryAF)?-MdIF-FMH?BfB2m{peEaiH!B@q@JAc*m6nK8YjM{QE79i zb7<3{8fDfw+22|UkuQW8l*4-~{F)E*YC$y9GyoSiO!W&=m%wYQyV@e^ zx$0VwYc?g_a_aa^hYswzwENOhv_#7DI?+-CSD-72Q(RX%Vt=;cK*l>Jq!ouaY#cKR zapbv9{GymF$5)R>!m=rSf%*J1=%~Q(43s#-lXJoydqVg@^V^*je!H{6Pn{K*e63P( zj$wR^hnPg2&bvnDeiGS)_xf#;KH>j0CGLneyz^h z#9`NC?Zx+9-gT9&#{MF%grW9Giel4iI#?$jJs~{D&Xq&JoYXE|+$Tvs z7tq3?2aF0yOk&mzI-T7R_!!P-K=5PEy@T88^Lc0B)PO>eGlx5_f>3zO`?YD43ujB8 z!)z@;fUaA#m=`TBULO&Ov*=2eqB@ebOD%<)pfwQ4saX|yk;V5!y{RY)tbI1;b};wd zBgqG`6tY+nuRN_hbDf1KvfXy-BoiKc-7-*xuP$>&Zzcj&-w1mf0=cXgDS8Vkud zkLH|UCl z5k|TyAJRKht!w+*N}=JE8{0LO&%O(=l>V0 znFyuv@NW^+J}he|YOsI`d4zsNOR&9FQu;d+WvuF7>mFB3jzr=8uLSquFRQ0F^V1uz zdU`H1ht`imx+>&8#*U&!RPXVG{VRfWs5uoafmb_sL6egxSfIea#{{bTg-3-q%l^xV zZ_aEOlvMEy6L_YP3Y|9qU;&fSA!?b3IZH_M(u_}(C1aE^uNIQ1T1deZY)V23k_Np_ z81EDf{rI%*p-2Fq$Fczx(-?zx&8sa~=wP{l2^Sy6T%tpJ_w3kKUftJ2Gr+?kQ%9Qr zes(`47ElI1i1d3k`R-sX@no<jAc|=)0+EI#f_^xE{y&(+|p%_s2T&Cwq9itfL$f+Gc8Rt zlM&fvxK`~L?-V43mc?*{A0_<0!&h|J?deK0lCcJF>;6DJamK{o`OL z*T4E|69SyF>69*qTj*#Ol==dA=S+eC;9x12n%fBW4#?yirwK-Qwfsij(?Km}Lxh5)P>Z@~#j1u?#H zUMYV~6sjijIS=xG8OQ~~aU|@VH)ABe!#F0~X0ORt~+EL?K_Lgh6}tx?nGzhJF-D}bO1)YE_FG-gWNzv2FRef)Jx z#}<&&O8WS($@N%@rdHCO&)!(6yHRmS=aJM3I_|H{)vz5i8$Myi_xAVg*3@%LwHf4`*34-HH^xet^1P zyowyJ`1s-yXu1wk&UFCPU4hiMdGidUey{M5@J05?a^lEgM1^JJ&Z6kjE-{}~fzz!Z zUhlw+L!WB-Q0Q5MpSy6-1)%)ujJH6TvkI6SR08uja@(SHf!}IX@LQK#f2mc86Spo} z6$q`egV4HQ_1b%`zh-&MQp?T9U|q0q-NlIW`Yt@Ys*ee;zWm|~4}bB(7w#8be1|)sj7e8IHSe!fVatS*HDaAWxgHpkAx)x$|q)(P%{LS;iVtIg#m+%ylu|0ssn zbqV;RC@;lK9k3UA6ZrHPkH@LKn=`N|<}k4Ed>l?EqKprn_?4wl!L;CP)XBJ2%!-@4 zFi!S`G*ea*_b(UGZyazF5$*;1z1-~iz zO{5W*zi+IIn1{Wtg}6rDn+Cac9X-N?Cmy5l*O}8NW{$jY^o6~(;KJ z5plU}1hYg5CxSq^<^{lbAZwrxGSlhkTr%h--I%sLwrgP|Ytq|NQkNMudF#T#%hZln zzV>#!+8~%6$r6#}SvYQTKAtIi>iYECA*S)QD?edhXKw;ZeZ)q+y78*1)(&h{rL|_Z0%M|V+ zvZ7`P1GT_qUTAdPm>39W$$8NL0E#=13tO3N$c4hjpq51>6@vip)x0h%B)WCY<1!*jI+w7*;eS5q zMIy&7DkwhETUVt#5(YB@e?y69nPFzoaST8KNsM%6X8$=@bjcnJi51Zc>hXx~P;AhJ ziMoNb=n1N{r%+P#>wi$&54K~9w=uY}NxyQ1UavSL{()GOepf(PU2kQN0?OO-C6T?p z=JozI=ZLN1E7c&gxJXKv|T=;!^4OU%a_AfZ8@@Em;dVz%n!FhrK@!QoiF)iF)TdaM?DeQ_S?eyg;&Lo*i@~*%zW}Q_lUYGI?PbUSDu=$3{dZaqo_fp@)bIR9LA}B z#n+m*3~0H+Mq33D1KmZG_G18^3jt=u)J%nH(N$AJ*cl)!Zc}zcm!Po7XP&0stz&3b z-9n0mPqv$y_8OEUnd81)3)l3>KDX!YMN13It?UJS!_>4vWtR5J^x)U~ZfWN>Exg-n z*#Tk3Yv_Kta*rfhuJ1j<@n7(Q-uY(o*IzC%;R7!`|Lmm;?>cuET#rL=`L}P|v|)5) zps%aF)RYJc?`Q9~<^&rg78~G|9d<8Xqz`d@yIPcF7!T6J{V(K^1X7?>Nyg!4Tf9{d z00bF{G^Cm^S)I#4dkGwX-~oQ&B9g-WwuIz!c<5*d$8Nd^&Tg`QqjUo;gu$u7KyEV6 zIuvHLc+7wiZ);C}CZ0#8#G@lk<3dPT)86fObz-*Lt=_oiLYfak4G>i>Q8Zj`m*w%a zwW6U*!p*0r8@n2OE*BDk39oFpo3^YQiG(w`cr0i&<@Jcm?Z3-qDkFI@=(mD~SxRKb z+3Oh~fQ^tcs@Y@_Suc z#Lz;TW`rd#3OXT?^>g7YvP0pV#vH%&+qTz(!HV8yh6iz+7PE z4-rMv??a};^|WjV(v`os@~`YI$d*1~LfFAPQ?G-4z9OP;p6gZ6Jw6EZ!TFNp0clR8 zMBReoaw}(TCWqXod_UM-mZ#9a>2e7($XHbfo|tlpQ?@Q~3h`WF?kY5a8g?lJioH0} zT#higriDS%<%ad^`T_nlwRzo+^*hE#S55R!^mKK$Ct^{HV4n<5%MNJ)$_wng~Gi@(!co{5FHf)@->0VUZM z&vqmce_^hM&SdjI#*`%~o$PB&wPIXC=%Li<#Ca>lT zs=+2r4|Hxl($%`5HBq#5ycVTUN;9kr{(}{Z+1j)rja>Erp<{yF$<;Hfm>~R!3Gt7h zp6w$#*kP`oafEF?2<6$o;+tAIA|-t1%1;FKON{-(m7j16!`^pprPzz4h2O4onTYto z>SdbQexVF21(zvf4Oju-RB?p;hR`OA@wZ1!yeK^&j=*$IKtaF=vpJ%poe2Z0+Q&M^ zT8mAER3a7$2ZT1(R%3nILbF2I_G_|9+ioziDVoo%<`fO%G@=*=r{ZmTuz^!?B5e8N zG5`8|HufLAuqmF;fqWbPr0>vVsbi`m71#Huas%WeNupf--wGLmasko8Y;4>*w(jgy ziHa)Ht(y*Z_DweC3$y<#lTvMw#2?gzhr31Cj7+zn!66mctuQ6f&V$z{ZQ&>ks5b+m znTeqhqr$E=#+%gO@7i9yYL`12wD*8R%lHY5}dAIIA znH|8{Znx-3Xw2(snp`uS2xPP5-aybslFZ8HT_T7X)&W$KD94*(ilnKkl@5BepVGYX zfXmQaMou>)Uf|V8eqcV!-Unk=OGGksSE$E=qyz6t5`S5EIa~()g(HI^^MwO{eSgN? zAUZ&$-``>Ybuvh3nNgBC0RT*Uy02e^^3hDEUSNKEjB-y`@9_Qy*T_jFG zTs+xVXcizl=fqQ;r)UwrQRgZCh&xgCHO9{_xJS59AX11x{7x%*fepKBKO@&Rz%?~D=oH>5%rX#z!)!N_J*#@iC5>ByG4#^_z zx>z3elIE(~oHj)|BnzvR6S*x(DkNDY*&^wGs7CIj+bJrD&PM2eTXI@vJeLl)>}jzQ z7945|x*WKeqWK6MFtR+Syh+dww>(kIBUda>qggZjuAG)>@M!@fn2f~y5Vw%8hB8mQ z!T`ihlz<1T_yZ-)^Kn^~7-kle{h06q{FB>{fInv5)A^hmh=&Tw$RLSfAFM@aF$(+O zh_JW3Yco^adtp7ItsBU*GGGxAO0bPS5)a(etF;*jVS?KXn>I|Yn^-eC($m#k%%;OZ zbf_L-NA#-g!1om!G{^W$+71-_fN-8CpZNqNd)H~BQG^Ic+2*3F+bLvD`B3hJD^y)Pq(cxD%J5>L7z+3@Xrn5(9qfK?cF!9^YRuq6sv+l znE94Pu(aXWQ0u1l#>g5g3UdN4&Q@+-H?AJ>`O-eGC86P0HcS~H&$x^V(3wWqUghwu2c<6yU&m1{?aR1)jYuBtE8y)H>CF5ko z_?A^M#H|ilxKT?+QH6?1rwoIa&m!;IwNA2+k1e?b(MGH z_uPBu&di){(kgWI&0?1jOfpDF{TQ8{#SAA29lHg zkhws9#hCNguQTyt+m*5De--E0YN($m=VT{;s0w?U=l-(tfu961VsMEQIJ)5_0^47H$(v$Cr``j_F z)9rJv8)XOTOkKku@!7h?#ooD9b+IshD*cet1R_Yg1j1BP)dBK*@`AXZJ%?!W=Pu_^ zI-Oz%;7Kc?T{hyvW%U@u78p3mjzBEiW%|F!%$K2u5F%au5CS!)^#F3s;!f7=7uoF^ zHsY2!$|OH~8ZO%1JGZYI9T^(zYs@D(@8==p+D*K&-X7u#BBVkREh&%$p^7#Qbf-yj4<+J3H9uHH{c$@QGJw6QsTfV98dJHBmFy)VGH(?* zliR7d;;vw0W5DiWx+w+jN-%xN;tnSJlUA2&epgYG=q0gn&zxdW?EYMXKbu9v3V_*S zp{oHQlJKD*gIaPS5(XBXp1u(mX+r2Nbph-Wie+CgNGc3#u(cqfWZFU|fC*uuG=w&G zx?Eu0SMz%6@Jf2~;7?UPx4oC$hvOr&JH8Z$tqLJwhp?tJ;Ya)e#HJa%f&~V5 zanRRjOxmM8@#c~v@#bChj)Z`Y@c7ZrZh%&>y~23PUfvfa41bTvXI4kU;x1~ z@RPh4rZ!gRG)&>V06qlXXeU)VRZZfKyt*LQu< zZjZtE&c)JRs3)9?Eum7NU^;0e;k8h$H*>-ljPQOHgeF`!s-}gNjku1pbSs@=vLwzC zRzu_f`ao`ia=_~i*XXDdTs!#P<=if5#h|~=nA83K8Shb-D8;}*( zz|vK}>fZ5a1W^WPV*|p5O5+<}wb3uDGq0U-xJ1xIhbY$-R-IpESUB+3l3{5bJT(v$ zZS&7;QXL$FUJ#!J1|1Z>%rWTlFeCx4=1_CtRfzoMtT-aYUs!xvBF?K4YR$?Hq9GN5yD(?mlxfDIA;vVcu+Wa)83hl zL;Za{-RL`!OvEFm$sa)1Qmc$=&cqABCc}|{W{6pVSL&=%JgU z@u=4OWfx9co^^wNdV+RazR?kG1=O4tOJ`m4)~!u;j}m|v(+QA6yjK?g${KRJzFzSx zfK!4STI+JZ3MK6D2g!b~hb56;?D$3#JfKKBfqPW}6Z|%uDbI4E@6d=oJG6}GYfr%M zBWq8zv8~k-B<%r4N{GXs;546DBax)d{PR<6orWKt1LLqngTPz;qL<*pGvrqXmtSH0RM4SgY8Iu#buEZ6u@h07uxr;oZzI-D zo>jXYNQ@=iCo2;M6KY=j_q_D4AmmLkVLuGCdv?xFuU)gcgm}=b%VD($r`Rbn(IRUQ zbd7M8qbeeztXIH7PPUe!y0-EfF`bL+|Iyl%bNT!>)#V6wwK!ek+bm8(%c&)335r*Z z@M++CHc$BedJW%4RKMmWTZ-=x@bl>s1pH7Iof&MIkzz{+8zl_=Y88gopu7dm95}{* zo-qDPD`0#@AM?C{1-h5C^^|2sWWfGLx|8o!u6{bFw67t@Rh<4+_> zWtFuj;)qNojc4f-F|HA5Po#u*ulNLF!t^~x(5H;lN;4*`<~^E(Usms-AL8v|RA_@V zOadI_Hi&P?$$eN5Ei#G=K!&sE=W6Bcr*x-!M>`XS2HGb&CQ@j|hO=#BZ6rZ!J))`{ z>n5ot+y^lxHq5n>E1!G3DG+H*2H@h+n{_=OkI`(zJFEj{)!t1s2R9PbgL82)38B`Ua!c=%0aTfJNxPJjODGi#G#ZW}D zm>#lF`#dDM61J1r!}^mJ%SsP{{3HtbV1Nmo?fJpNU@8%42sQvJe&)9u#0L>gIt++& z!;yT|OR(7*^s;wa+*X^@VOv~Kysy9Ntw=hoE-(9#1c&_oDB*?&_pKm8C zEjeH9l79o2{Iu|DHc$$j$4T7RELx;jF`NAZ`K9ny-$4teJy5Tki z_amfFbE#1~S{F6Lp5dKo*@6~@gQNg;!Rrvort1M@oC`kYbj~`7XOMKf_8PWj3ow_H z;o-`g{nlR(@GhP`BT(zN2kyD+%&X77dL@VUnYN%G;x?}2K!2DR%5o!*CP4p|{n=2~ z48)39`$?|Ss47`A5F-3@(!A>I$=v@x?(RArYwLRh1zVsH(TR92J8DbUts{LK)`#>G zXE@9Szkx5@p|c0KYiFXtZ;+eT#Corv+b3RN-(mkxSSJjZ2GAsxIss`UR#%cC+}R<8 z!zRUqwUZO2RnU%eS%klYf_|!OVamc#j(Aix6eL4BFgThXdqA=>s4rQ5$Y#Nbu9C}| z&fKMOFfmB0C>_x`-8y-&-x_x+jq6&QJG}viyrb4zyDS<8=r2k2gAILCc?;Y!Os*en zY#&zKuEj4IstXR4oU^bQyudyW!_5|A z*4fe22s4^r*uu6DQ3Imsn&OILKdF}1#+A>64y9K5uQ8C-r-H#m9Smgog3T7SB=g?F zy0)>sJ=VCxnxANnHpfE^%J5Pp@QSuCYker=hWL~0D|D~d&neZLkGI6#fe#zUL>eCa zRzE7o#cuW)Fze02d}#)uQK(2nwJ{lW3qhF-)G4QyekfB;Win8UT!!LgwQ9VVgjH-6VGm-4fHQ;@x_(T}`?OY~#$j=r7Vrgs=++Y3AbX;O zLKZ+MtkuHe*t5-BoAXlzZz1EbdcF2g|HwedA-g8`bZ)(6v~zQ3eq#H<~#*uP4Nbj+!VTg54 zQsqVix%eIA_5+JI6)|JkaNR5eUHOhQe4Da8WbKJI)=^{5JM(P1)>5 zvk%ECLdR1S&RFFISPv1_sn^TEXJqbzbS0n^mmyJU+M%%$ZCY?msP*oW9adQ92B&{{ z-$-Q`JI!~!_HU#v-!JbQn_t#9mU>V_%!UYYDB1eK8ZT?J8E3ovWT4cNUK?Y=#`RSF zySuZsxh_fdzX7OiL`oo8==Z@OCK|B-esjt}vOl%s;+LR`m>7Bhzcic{nHfRK+hRqx z+mAMQAfy(H%@;(ada#>xXCmL9XpT39o7cBRvQD>Gwjjy{S^;w*_y{p=Qmi?i?aH=y zH1uqSw+AVu=u=>|%5@zHs1dG2Ypf@qXh{e2Ey==AJxX7x6hG^bSgaUVU0!RfE!Ccj zwdAs;bn9>m`T=3(J2=KSXc#a27sq%rWQ{-Z9LIR=i8kczEOqStYVmu7*}!-_fiktp z+bPtA<2%>wXdS#=(@VTv!WQHdjk7O-Nj`CT2=R;L?IJ0+9(M)yb;|__IL{Luf!dVw zMb=??nwvUEY)#@h_)q2P=g2{(J@ew*0P23c?iOLora5rl(ec8l%@8CB!X!vi7#T4I zz)-Wv>81^XVdzmTz>h|-3@aiXbs+?N8Ee2q6y<Sdri2XOHsRSZ*oRr|k>FIpTq@4PKpZQD2ouD9dq8^{eb>bx0*7I43p*G8{kIN7GphItra$Fn0~42xUnYJ@ zoA@%mlRJRW-}?g34bHE0&(@nAgitw`b#}A?scYHq`8>^abba) z!0>3nk->q!-mXFeiRnJKu$HaW)oxxYjHsj`r1Rh{GD^ct2ct9>u$GDpM#v^E3Z78D z(>k5?4cH`Kn0sZzK94_wn2w+?8c}Usp72P1Wa{`!yj1!q9vg}Pp-_o@@w_(d0(}l{EMS+Vp5q$2t12{MS>pA&rEbWOA;q4l9jHun3_h>>~aMd06hfUG=G z8XrcKJ;4eApXjar@G^ku!UA-w)#Q-sseo)V1J}^(R}kTr$Z#(PGOk9iWaoOx;Pb@- zfqGY7GkiJyu4sGxO9UhI3)2Xe_r_XMR|aT{0Z`N4rGcF6T^caPg!e4FD${6tOILzF z!NZ$B#e+AsmB8fBTZnLeV&Jjm(D;!iwwyPJiBaqS`^N`aywM1RDw_&1gy zDn|KXIS_W2zbjot=FE9v`}pexe2iTD^IVaN&VpwC~wK6}t^v$WcCa6g6YsbUhDhTv&oCdDMDbDxcI-@F$14zSq}iNn7oyFrBd;^kCY%wz>U&$H^3uF({aUZVs0;>cb1+;1OTFPTcfM6O5>P zeI4!tk(5`9>LSAzE(k1Jo2)8!Y$(^P0%>c_GmwIA$NL3|!5!E>P-7RmMQ;it8wz zhCJ5G*T7Kl62AtLK74<8&)GZkgSpL3;VIQ#r<*-_emYmdz{L3NF}1LsZlwKiQyw7# zTs;&hLmEKE0cTo)6>FqUWwTZ(?iw5mCW;7lM~bOrfj%svx=tkAzNy`XtOXTWVa~-5 zIjzBm8oKj5VO(+t?36LSt~3}4r85@0q6DKV+l*Xr0J9iS11_5@*XUPJHV4r*s#@n< ze81D1XbLE@qSy<~ZiVb~k_f{P2MGuJgbwz)r9kCR{FqDe+7oRkL9s-N*Y`mFh^#$P z1V^mOAHlcil~|Bah*BNen3wKQq`x)CRH#FdK5LGtEQca}&Ky$_4n_LBG3F&V6zL1b zSfm0Qiu8BdSSzQ2@fXc`Dx;xDe{YVdXoezvNgwkP85n<=kM*>6jK4x-At$_*b&9B) zD?i7_O&D+Ef7ix(uAU_0XpSTNeSV~kwag~W|5w#Kz0ZHsnBpZV8wF#e11uT;q%!9F{nQvUM1|vd z#D8ng*NiDLUXgxg&Qlz`BK_PPQ{1~E{lXkmoVz0Z(i~INx+48bAM*%&jGs5>DQaDj ze$B^vlsd+X<~+rxD^i({^=Ne9C#V+Q*9huH-*f$W9>k4#Q5$PPycmNY^5197->Z*# zd@1I!q5k_R$Q4mR=9ofSK~J=?9>0prL35tsR$=-y#}wbH$aX%~!!9va^)U~k!x+(0 z_&y`PNcG+)UW-|H}wG8Z)yRwM!1zCyR-#ba1}Om>l^T(DvUi<8{zXSjN|4!`Rk!mnqzq9F;3E$JNMw-#5iS+;q1e>j*oS>7RG6P zp8IPsuCI*w`(%tU_b4cGRvYX714Yi!*zg-*eS)H(%`w?$6}iCI8`fAwZZzlL zOcz8h8e?fA{163ht+mPx>|Ms^+={EnZ{=g%K8tlQ7~wrCaUBSWpD4*BGV~octWBz{QRb%?S ztE$HIdrLGnBsh#GDr3HW(j1eppvbGu@eh!|qsVJOnIwae!eTlLPvKM3?+rtB>Jbn> z0{bweK;2bhv3!g|2tP7Qb>tDiqe6~(ZWcSReK7vAKSwY&gu3Oc$S^Fh1F*}luv&x) zUOzuaWgg~kn7?8D+QEVD&SD{zaL;;Brw~ORoIYOUfs7TJyq0U!6eb98B~d z11L=N5f}7Gje?LzeoI{y$84c5rzm~ge@hFo3SO30*%GwEdF zncy}A)#;r&&E|8|hwkx*WD%*!48=a(NGn#OIdu83JDSnN z#+3{^e1MED(%>W#h)FxDK_-i{lqi(yV^yJ4Iv@}Vs{sNO1^?C#zV=}{_joEv=U!+? zwx!y_L3hHF;3sas!igL5GQtCwxV^h%Ibiz>iyTwOn%WD~eNAoospe22>9YsDp~iZ@ zGxAo{#qdJ;^4#3f-LSE{tUHn*?Bu^*_3*?|!Z#$2l9n#Di`iV3ygR@!Gls-aGN_|~mBRSkvKCWK zct=@Ez`n4S4RZ&6xt*=I*rT=^b9orVGu`byXhh-oQpfgz*4E5aT6S1uxMLdn*A>Us zvchP+e{B6ko5kv|c-rFefmk9D_F23tqJq611#QBe4E1uX4pi}TFaC(iRfuB9{=UZR z_jj}wn_Db)zg2DP%B|^ZnO~dqb`SOC;O3!+kkk|iDoEz_SYkocq4L6PR{pp0kA)wJ zpFokfKnYX4C@B7qBF`eKX3~!iXqO7MKR4nPz99LK18;@k?)AA*0`RSNx6Nkx^$weZ zGH>>$``1Bw?^$HoGOW3Uyx=jeEM2K1l5}Zc(-hFuf&1h;W z%Ws9}j)LFuF{1Vln~&*pu-fIaK8OU_u3VQd#w&R8HVt&7*%46ae)EzrOFxj7 z{GjW|dlOLq(}H>mEa6!E`O@*Hm;GLLoKV?D1wx$m(^daoe17>!2o3nnL*hmFVqZg4 zR~Td-c3%7ldW;|c_0J$E2`DA>Gb#hbgb@~Hm&H#CyM@Wpstl7A1OZV}29v0eldyo3 z`RFXrUBAeP1h<0V$RC&IFtc0OooR2~+>+0S+a12Np7u-#sP*TI=y~pq+{tLQa>aMK zp^5BG9A~SEs)o=Sri0FI5K&+PT5wn%_jUI7g@Oqu%CN-jXlE-2-E{-ONJq1`Q13=r zD?6N(z#mu0Wk(~n}kDYTu5ZpUButZDSw z(MH`FaVR!d$JlJl)7^TD%L&V)MONSn)t+>^4yV$n2@wh$Q;|J@s#i#=2LAm3)dqec zz8a@|viwUrW$}aMUvhC2bzpsLR`g@)j>TW-0QiMAbpoZ9TM$d6NcSw8D*sA&jNLD~ zA=RJfV5D8b;)n6*>1B^1qR7qsqKc_I%P;6(@PhUQ1r}gu_|(12rpi#}gm<(1nN>Pb z{=>!ZYwx`HeZH>z9Zdcl*k+aPFecdt^+_QJ%S|gnK&{eUD^31_^$5>n^6uKnVMc}3 zpTe7-Sp2zuNf@M|Kh@Z|BEkM7zuKf7+t*l~iAx-K5`TJgx?Do0sHK)D?fP*ml@@3<$N%>={AOoE;U7+M^!a5x*%vgmUmnjF>r>U867YXkd0p|EkPZPzGOrLikb zYqu0VyPCLl|nF8@^aiNC`qMeIY;i%eEr=Nmu@5UhzViFV7;!9+$V9_5K zNn6y&i^4hKI?size_*vGbwhS4obALC=qI7J;~6XRuB7843`MgnTj*Q&h|1WxwQeINV-dlXQK= z3H}@KCOeAWsk_dMIsHyKO&z{;KH_u)ed)ov#aH^8GFCSd&LlM)Ru|vzO2z{2RC8$X{`*ff zIMIb|aUz;<$udHD5QPS>l3lii)BY`Qe9ep}>UO)l4rj3a-be23$kww`eWN=XwTKQ# zGgP|9rKR~TUdU$HnzsI=49^nJ?Sps9B`Mkb;;K+jL#){1AAR6~(Z$=mg&fsNczgK- z8w9pl*_~h?J9XZ&Q)3?=DIbSp{g;?LXG}^TT+}CjSw7583X7P$t9*~P5{yTm{8;%G zc1d^vlXn{{MRW2)*mj*z#^gQ5WMw6vWKUy~_}L0C)GquAljn`e%F5@1J zq@VJS5C*L5!itl^Kk&)>YbOtuL&E3yLGI53MwLP@Ljt z`*7{#$IA!VSNZWhQakwqe&^%-cRp%NR?e2bvyX54m@!#7p%)gv#@@(RUNj~v@cc;m z0G!DL?8lAC%C_`EB0u<7)Bsyh%BR>LGZibJFjku13Dxu{dp|#fOSO|p{1ol@URgVt zDBmQW7Ji0ppRD;#;O%ktdj7Vrs##fn9+M~ecRp1+`5~a@F%k;d)3uX-UA`G%DmQZ> ztp@wPSUxKJlqE2E$ata334OVILijvidAN4lzr$T=VKJ;cVoX+6ehDi-%vT<*o&0x9 zevZYl@>uz4?K)IIb{PlX#<#uMcp>xP%dcMirtmYq?JdS+W#tFUr+^1ZY`GN9D_EzCG zY_C@|XZ#5<>Z~MgJx6$9=3|8J&JNfsE|AL~8w_x)2+DUrb z&p?(X-9g8M%G-Vn-}x%xFeXi^S(*Gtfb1Q@n=xrp&C2BW%QwS3a2Aty)o%NJ+!d>U z+H=r4YQFP7fkW@)lPgfoXYscG#b3yznw9T7xA;%OB44=z)qFSJ_BnnCD^SfZlo#1e z?6tTncN%IC&Q{m1z6X=jZR~MOo--zaVA>>X7C&RZ%U+4eTI~vEj$g44u~%Ty)UGPq zeiz%GVNYW69%Ebl6#YB-q?pCzy~bo^CB4vY_5>!+8zRWm7MG5IF`oln(FmcI+sd@Xwl+df@8`7>A_ zzD{fzD!h(E<{`km@e7t=e}u_H#>&d1SY8x<#aA9SCe1@AFXFE3V1I~}M~um(E5FBA z9@2)?w~0 z*t7XMX3U*teyVsaA*U`ItTUvv;^TwRH z?vL1e#Wwyf_tnf{o%l+rgmo8Inq!yv-2F9kF?Iuckk36}{08&;PGiqa(ggN=ux5_l z^UwLZhidjb$=)q$=lO8Wy0e&jlAqZlHS6Ak-#5;G-=oI5CFk<*97d0=ur4Rg@pTuC zbte2y;ST?juY25BXYPr2VISaU{R(59`P)ANlg$BX3x4|(#yWHE{p@|>G5*^x)vWsh ze#2&dX0NPS_j&d%sUWSwo=?`S+l{lHaceG~i_b~U6v>)q^!Cc7ikqM(??1SuI_?|Z#?_z%623BD2;(Oj=%$e(M!MZ<@ zZo;0&jX87O3C#6NLzp{J^Db%D$XfZ_$(lLZ^JDy6PSxy5a~t`4o?c<@1LAh^WB9%^ zE6jb6eN_A?=FZm4y#g?Ll>fe4jXCo?OVGnUEPfd4ZmXGl3{3A&#XrN`?KN}so)^Rq zVeSrN&ODbh_`bE`doX9xL38dBV6aRJ4lC>R;3 zf@E(MkBF}kRtwir0s0hpFV%U`d#6~?H^E|~dgxu`HsC$4T2V;JYDE(jGFi6?b8FWy zVRm}Wb!)Gi97SIabZbq-qds9ZmDJ^FGb@^B$t0-R^I$3Dx#MI-gi%{JV`I*+)(&WH zcABROMqzHf9d$hJh@e({z-b%U(pDU7&IfHlD{=r~t&N56a)uP-m#e-^pmlTa^gYwD zLSw8r`lI4Rdu;u1GKXS6L944rH|;jC=Nk0<3#8#AGQmDvlwE!cobvY2pS%4i`_MGq zvte&LJa2W0uF1msb>U#$`ZbC6Jo(vhf)nDCI8nrI!2nF-bK>iSlF(IZr<6b>2EqZO zH4JM-dbt8aHqMO+R06cEr6G&PJSA4LUg@+daR%5PxADgoHZQN@H(=&cV~9+T1?Z zVmPN4)JLY9{=?5nTf~CpB7V44{T4$IkbVHqiq8w<+5s@}VTyXzaR*J6jGsS-`1Y2j zVjii(K4F}V+pcy1hWVJgHMkj{@ZrUO{u}$pvkv%xkUMHm*ilfEh2pli;Q(G!eE_{H z96-1!VR5-E@sTtFU*P#z^7C3>LPgj z5xA&C9x9G|gEj;3+U|n`s15b=N_F}p{Bs^?ez@{91*W7n0ZVpXH@AP&{tau#M|-*p ziAdOC7iQTk-7Q2UAUXqvbQsoQ4VSrV&NP{8jv%^Yl&!?QMPxxYaR~VXg{LCi{IrUWzdv>cYtonM!#s&f|=ihi#*W~7mL(bQ`SKoNzbWbiLGhXqo%Biy0 z6^+bk98g{k=$zeH{+F+}Qnh9h(cfsL$d*;l7;|e+T!E$0BND zprwKc3yKNj^HM#=hy((9eyIFI>954M2=5mD;_@WoKq$7R4FDTQ(?APKl3x%|ywkS} ztxyCPv$)7z2hbsMU6hg5Da&26UXSQ@w;}iou^J0bzeWZVr8O#I))C_lcPm05>_`__ zVIz>zt8TNa)WU?{f7=^g_gb{2d+334cbq=8|HeJLw{M%9nHXqoZpfw*u`tRtzni@~ zprL>UaPqa{Pd5ky(FWWNjZ$b%L6ia}2rosDW!Z~_FWgh3JIai0uv1VgC9Jt%uy4DF z?0tP6xDu)Mt#SH9@4}l55bn7}o1+e$Vj3rgQ;pmD5i}O_OUxd&dTbuA#}>^8lDVKP zds~{^HmP@IpIjfZy+${Ur4rqJ>0rIbZw)$ZUd2`Kt6w{4mHo+>Gd|ocIbwNVx-}hf zIAWQYJK{h|&61kb=o}C?*HO?Mf2(CxX?CXudJ}b}4Su@^ErOa>7yFJkNJ@M|ceDvt z+2QfTy}9*+-K#Tp_1!CZ{{C3Cwaj&QtV*XN0Us&`i1q2=**s$8T!R}6o5s;~$YZbT z9?#_0bXh@sZJ(>6p1Mo%t8N6m4No;TO|^p^Cs4P}AwG@1$Ini`Hx7&(A?}OR^b5$? zN0yd|07P(RMLLRHf2yB*4F3C8iu+O*1XabqC_)A$5{bJc2%l9e>bqQc(Op*DfY&XY z+JK%@C=}C%rZSmyA{O++|A$m0r$(xQ0$|-5$2Qub;RB9+I{E=;fF6Wf%O(h42`BOY zew{9b^`3K=nE~v0fJd);ZEOpOU>O<>2t! zEIwJS^9756>v#9fWN}gRUGc81huksv{~hk(7S-wV<=3|K>>OOP8V+0}2f9(73!Htj z&@nbNX7>XYjh!L1NrW?;O;0pW6cyONt*yi9q3uH{jju^tLGaHBr#Z#=z{08|;wn%- zmH!JthBGLcN~9!+R6J1n)>(unp`3)GLnMJfL^yth3suu7Ho<36r;Q1BpgK791=&20 zz97AcV8ADwW9P0WM$s8oNIbb!uX4$kb4v|GfB=zx^5E*RP}q=jSnviMQ$s!tSxeE< z!IDvbFqYz;@@zFMj2trNFV?QJ8oZnt9lX* z7#9acxNDu6IwN5$m`s~I___+5SIoz3=>A>PB!VGu<9w;@^ z^$>*7P|r?ST+-s35Ju)oH)!d3G^@!j(pKqu$SzNF+2wh5D`yrE-taleG}`CiMDsCC zOm3m)ky7@o@O;Vj%v(gK?3D9=?{R389MoX>AjQun47#1mU6OUqeDg8-EmN2F^wmj(8ct6*x~d71V^VIxB-ak`5Tme72(d$#6(GT`-5TRgw18^VZ*wj?^nzoe>Gk2TWY;qv9LY4tHdv1xYNS?lx3@fo4Ln?{5%prapN? z=nDr;&yI39b{lvE_?2=Vtq4V?az+FEMZB2R3dPT2X`KcB0%0KY=(@|Hn?R;E%}lMC z9Bk(Wu|g;+c{972IDJw+j%S*P z3vPUpOTPl>{2J_Kn{e)OBcg#xE+tBlN0mo(0!mBvZ^B7K6_BBr`c8c)|Q80Xo`HHu8N#JHT9RA2TSf!;00bMoG>>F`eU|14tHx zPS90^tgGUBNZW*R?MM^yCk5?ZnFGDXos8R2e4u3W?lBw&h z!!u7-9et(aUT!IVQ~EpVjxSc7uvu_EM`s+%Ep}E;pJ!|{=w-KvufkzoM~5xY;eJYd z1IAiT+wGYDzW7Fr_tRku_2q8?doKx_gu|%v0oD)vCn*?BT2OYF$IKCWpSR#1=&~*t zp@#c)%buY?c`&|%{8U+%8SUz5h&!m@;U>1pw6^GQfgoCFM1n&#tVp;bQUfp< zb>yqb7RZ!2Z$(hrp>!j15z_66zD-d?aL?PLX}{YYak{gGkT0E3sX=$tXPd;yAs^%Y z5q}J9${EUqQ+-~{`Qm+%#a}e-+>`08vw57Z&IT(QYaVJUA_fzPk5&V`uz&;cn@x*f zMDbmPMRV<1Z2@%GKzUo)lFuxj9pBQ3)8?ni1)OJax>oghh72);0ne0wDgHuy8)~U+ zMIXe6N*+>nu1C=KAY#z%l78k{Xd8kJbwZA*PH3{wbM0UTbneuWRzGxf&=V!tc50tA zA3`AE^fU^%Y@6OXy>)hGBU&d8^mld?>jHjz^(P~m!Lac;()L=NYJB&t1FLR%Y=ao#r39nT*sD&$BxW4Prtf!Y^G^y9vv8Ddcz>rauXr1-Y)X?cYJ(hqo;0y(g@&%Ur*`K!09~qh0!g{Ye)IGKtote2A_M7~2 z+{uyumADK)0P^1?p!(@-5yCN5KSi1f$9pP(e;)OvM3DeM)lWI)IdJ2?8)hc^dK&W$ zDW6BUiQPn$2XdO(@)No@N%B|G3BaJ~cn4mJ-oQHOU^^YFVJuB_cO{zF);kl9Xr3F0 z>Jou~S%%6Qx2MJnxi+uE(zh}%t|n2uKM;?#{RanvAsuq-RLhQBRxh7X#b$TZ4`iWP zdH-l79$ZbNC?NM|m&2`IjD*nFDG48iz>uQ+-5;O-sUw{6|DcC?!}ulbt88qq+4Gv+#Q zvt_yTd<8@Yhb3mg3#TlpL!{paV7|^k@Bu}EV`iigZ~-~X3(TQ?$9m1 zK>uj2Ax2HxI~`A`zHF*H>Ca^Rg`)bzvS&0nKW_Ead);VvnMyll@88;8){HOInee$N z%9}F=a0^}gf&m?|(bN;0I0E~k7KKLXHUAPWbopCVYKkq)tE_s$*LHm)0`A}T$_d^{Qn z1%1Lj?8Fk1Q%%q5SgW;Zvb)!uJE!>iv9I_5wx|F`Cr{0|g*qQsJj9xpLL=9i2QZ?I zaqA^O<6@yvy;KDU%xYku$;SYs>PZ5m4y1~%?cehITXw#87eLSJ)_`$W!-uCj$i7sx z7CyQLes##@6Plh4x=)v@mjmuG;Zn)n$z0<7U{at~j5rBJyf+GHSR=YD7u;Mib|O@r z#3wYUf^`ImOkAWQwHR{lk|!|c#aA8-Fx=b$>X;i-MeS={M^j+2BfP% zS#2tWRir3ArYWmn9r}eckG@(&U2^As%TVVSz^|jU%8OiAB@*BC<{P%ZbNkAdu>yX& zjE@5R)z{DjKTSS<uKNC?hfkcxlj?|_VF6eKH0QE7|E;SBKrd2VpCb^% z6n6ZkZJRgE%}%WvXlq6{(_BEM;!|V_vt+A4i&WI5mWU;A)vvQAWt*~h&7EH9%JM{! z0_ibWt*{1^f3l#|O=c>yG7y(i)Z}0?Igq>xu=J8TGZPjbFHrh9qo0i;1;qcC0?NpkTT!ZeB+iOMmq)Yxztg$4AB=R9wC zhzXOWp^d{E2fE;+DxR5@=a#}f^T2c74;O>3d)vNR+ys$uyQ(#Z2uL+kc-!e^U_wT%~6 zZHfBZjuzVr&=xKQ(1(fqbwFPr zE^30??ZN`A^txcsZ>&NYafrym6<04^2(fr>mI>Rp&F-DsyKc?ui9XoZQ;CotRv3ur zY=(Fg!`w=~&0A!o>Edziz`i)1fXqfUE_} zA3~?azDqbJ{9uWRWC(5%yB(1w4B8Ppqkwfdn8k4v{t@{`NOG;S zsPwK{;l8t4b+d^fMQB`VxM~BW|6O<~JCp{mv>0E?u?e-t%@-jb&3^sMVSCN(+0BFl z3%if)Ikshf?P`jkK?&;^OOnfFMsV3B*DjDXNw7O5`(YUf0nyQe?k(_*LHKZM{+7GWG2wv= z=PurL@%FQ4P8~b|X>s%P#trL6yNh}5c)63^={3$C7i}e`VV*e(BwSU+s-=eJt%jF0 zldUn6D$C)sf*&Rj(|`g$%$Vq8jZS%3i~3kjOMBD+NNMw?zL|S;QmR92)Z$tEvPBwG zQ`K%5@#e--du(Pro3O!!S{)>_l5P6`+MS;;Vn(V7@E@n8?AqRm9j%nD&J!pbKIw6M zJl$4t!(_ruL)qb}K%{L3WEo2FkIVlpy14mm4_$b}VkFcF$604d1${*@rs^Qwjf!DR z!Dx+|0=CV%rYY=Xj@Cg@NFVW`kjBt8!y?jwCT#*IaQbQ#oyEE1ht|)J%~HNYl2`j)R25iF1ox!79x_bIrTa1Af7>*q67=Q z-snvGTw^7g4hh`U0tK`NJv?*(>oo4dnUB6P8oIo}*Axo3h1{J!)mfi)2b;q2j(|52 zRV`@uQD{BVv~#9o;>@czLmCPsRk%VGCnP?}k&IXv{)He5)X*5nwd~$Jkv+uJ*v}bMPUV-C6J3Oek-?n@9^$7-a27N zt6|dKowBF9KVo(H?2(ReI8oeq)44TcTe`y;*bE%t0v-L0DE&@71nfYQ0IZU)gimCz z@ZORdgPjp=R2X5{G6%e7S|`Ul%K9KCM1boLj`(T^JP_-}9Pn4zMR&k2-GDpbw{P1t zw{FdFqa z=yC)>c%Z*dpKSatnc*%+Qa_lNT?;~C^Xn%p0TI$1z)f^ z>T3-}3tmww%#8GG8jD&yrbph<6i+(s%l$XR6&tCMpIqeZXR~} z9Ezf%aEj`*xl>WM({4pA6<5qPd|)izSFE_@(U$?LLVnE+gEOzYhm854|Ll|8c+YEL z@$nCNoDZ*MRo+k@WN+Z}s67QpAK)goHwu@8FKXS``amOKr?sHX67bN9b~%Xcfft|Y z;aX@4V_g90XrFaCQE0@iyYV&krf2zLD~N>^BFC~#mMkrGEng+!`@pvjL(HixuU=G%w=(wS&MPO7=m+0Pe4Rj?@ zk$WHvoY9`kkx~V`pmmTTw8?NSU(&WCQ~`;ghk-|U9>`TO!zy=E5oY)q9z~gk#Ed`X zQ2j30Q1PTYWS49RN3- zn{ya3JgHD9UC(Pg=ksd8GdhuMiP&7?s;UPf4S6sev^%!u8`w8oD0pwTg~P=8ZMLTF zkQHxYL2DC>RaGo5i&Ec~a7V-h!i9n#blK2qylYF(sfIksQ7wxo1BH8=!4LKQ9uXugOrLQj8hhT*I{lt2eDuaP$RmaM%ZiuI*y~i zoFyzx99&}VIE-$ZtIbFm$!lIE)Cphu&ew`QC-AL3?u-N9eV&CgM@%UwI> z7UmabNXCIptS#rC4WK85;A1}0HZl+ut6N{1R^;UtGO&S)+!L`j)(S6>T_lajX#L&9 ziJ1eP-TN=?p55Qsy>RK*N628+1$$&bj~Ow|@l<`GUv?gJ9#Z8A(=SCu7{pZXuJzrC z^s4Ueo$Gs(b)|J@SFeBS-1NFLYt}t|Zdw;HmU*p=8V&Dru_AMP(Xc~;M-;lQyXE$w z_N{&0+TXoUFHpEa{5s^xIrv3Zl}1sTL4a~>A>l#y`{_P#>g@ot@TPgv;O4L2bp86Z z!-E6l{fodKIH&tjjq6D95?T{2&Ot$;bxulGXGJF}kFlWWIb2}GHE_`qSB;9ag+)Zt zskZj@4au?T4n)!w^P{Kd1DPCmXw*9Wc*I-47lX~NWD6J9jSs{VLzCU zG_G=^LV*J1f3m${Zf#VuFmzb>Rh%GBo-Q?aJ1&T&2KFAqH+%WXcWQ;{^mHZ zeI@*73=~5?ymSX+83oaxPNs0TaQCfejzKnSc&L~k$xO6#xUFf!_&+Y|jJK9vR)}h# zzhBewm-1$!uNCu^jz0$B2BIya+hE}m8?**sr=OpnEC%3u@3xJq2|W-pg_h)bjfi%s z55UoKJXuVr)SplGaMhmzdEK_|16>=Q+F)R1<`gkjS}ZN z6KOkuRc;zM^X4{o=H6NioiT9pc>G_ zf+8vCO^ZYy5h0IOJG0u!RSd@g`0Fup@3@?H*HK*&bQ>0&(n^bw;GmvI_@qm0m7_WRdc!FtwiK^)NxMsWV`zOE(8-37~CF3 zbbvD>TBUv1E_rHI$$XQ;BRgM{PP--WG!?bL!?;Ljq?Ib1SEV>w*mHwj-`u?$O@m!W zY;~={?v?h&us36|iHK3E&-q{*vdA`DXMS1GAKVt5c0{{c6!Z|Zs1r>#1?bV~JniyY z8rJts?rMYhRv&2|ZWx)1_?izCnsZ>s6y5zjQ1R=8TT%Dm#?lQi16Z8)Gq5o`EvE!D zib5*}=V3H_RS_ynQM0`5UmL3Kz!1G4>xi*^I}`4{bNj8^Z-vmcZ)R#@)%eKpU~6+G zjXslz7Z$E#*AYk&f=`5=h&qYcJ>7L8zpEq;LA<`^KxuxNLF^m3NYCL5y$b<1zzSj% zWL0gfDB z_Swe909DHh1mYvT{$It=cT0>cp7nc`CnTpCGTpzv*{|kjS6^$mGbF&?H5Bg54t_q| zVzcmu01&uAB0zQ1dG{y7U+{!Phu{7=_+OcDJ%p<|K=XufU1`fEXl4!Qc8LZ)B13Sa zf@_XoNGq~y=#KBgO~pu3NCv0STh;KBA3t{V@Sfe~8b)*vT1Nwy%?1Uax3(vPE z&6*+YTo$H-r(iR)i3NuVkzu-f21p<&gTEtSK`W4HSZ58HSi77gC%+BtE9ClohocWR z(%$~CECqvJpQ6UHp5}s66qRHawNxh^{!E=kM6I(l$wcWGZk68`&4#UOWYJpR*Aa>J zjOI}hRSh>aMG}+ShY()cL&7hL0@5moN?nGz<&R-7v9-<(^|Y&YS3qrBU&u|i%gpZh z8tgc5+nSLJu*XKe;jl8Pb6rDWO>3Q3an|?NHLPv*s{g0K463ytctnqn;w4xo$mkY9 z$XOHxmL#&xNPr7q#tko!k&xy@vXgFeK`lT>cB4oH&DyA;)(9XV>ZV!h$)2*|9=IS1f)^~=(?RBm5Ugqu`{Nmh!&Yqi| z+B#oWHBaEandm3pWoI}hQkrcu^9u`1d9tcHoGF6HfqL8Fd zxcs&hA{kvp3daZzr2P%`h)fQ-QyB#T8?x+lv8KVzMORc7VT@4%QFkDda4x>tLj|nT z?f>ToTkCV+1z;wyf}@d*D8~znhkS0om)*C1(&bc=ZW%rI)PQ?&b)ZlmM6eM*03Oo# zQHViS_51jBWU+^C#8ctCS_dxkKm_8-RL>OWL0vQ`s>Kdz3IWM}R5RU#uD;`=eLcmj zZ?k_huV|_wiUQHUbP2U$v~;y#;;PLpBnGJ+R)sg>Bss%fE^Z%1)jKg@XRG0wWVV1~ z@kWg|zSQ(N)~pqw1q)G~i(fE|*QRIc#gggZM*TrK&yVVWaGPeGXckCrvRE(R7Bkx; zuvzNCpLD{SS;CM%6I2&?$-`C%x>j62bCL1rt`Z8s3kQS)*YDmuzhT`-U#6?2L$$^Y z`@xl^R4$|vVpc1JS37Lej6mY(7nez+Bh}e=qoxNz%jmpv)?)uvrOs*%?^{cAEz_%nO2t_Bwy%y?DF$EA6za)Wn3h|NdLv{D#*(_2ff$ zojiW{Aeueyn%;;&?1A>ymSST*77;$qKJEt{g%Z!X8xK69j;kh*BT;b)?J&Vxm9~Y? zOyPzo(*IU+8L!TWx4|DGaEN01i5*pDQBBuk@x|Q!7y|2~^|>LV&HgH&ev}{@ho^red>_BNN1Irc} zRiCj!TKP*6Y1W3&UT!8|*muMAXwp5mX1KZ7*pSPhh`WmT_fg|1vc2co;aY5gZ_cZ?s*;#pN!V(lle{mg!L(WJpuKt$u6oU1>0dGeH-mqmT z7!Pz#7k?XB3*OPDM;g;6E^&7LWAvbZgK!*;0uPlA46m3$0;P(PFAh?n3J)6U3?NXs zHjzYkfivOEsUwGw@&@62-Rhx^bSjBHa}FCke#f;S2u`#(_kMW*BLG$;^konu-xgQZ z@(?E=Ucml>4|+g{#BEx3Nqt+c&F7R>Oe4L51rzBdtqt?DnPvGUZ3C2Fk}jC}C5vBX z=zFh7$3#0dje}8|XPgwLI_&D_s*IHyE4zYi6B#EngEbi^kppJN$p?7N{T*uzUDErU@XOTU2?8yEbuitgumi1#@9nD2EHRvL{Nc!?MrUn7tT-F2d zuIgA1Ljd8LwsxVf4c21UizW`8keT}sT!C`bu}5++lz*);Rm1J>L%P|W4p+do-)WP> zS4k?W0{YdHif(ZuP{sk>tgjAHmet|qvL_PgvndXX)8=r)?m9huHK2n~k8`EuZMdp` zTT*A3#ny+8cjVYCfJAQ)oEB{5fa@Hs698$&Zc*w`~Bh7$x|Koe}^){;mAN!_*& zB;QN~gJ)ffjotuxADDA(`(14-?&vyq$B{!f9oTonj_al;#zuO&S}GWHo}JesJ2i@M zbqcPVQCAL?f{*lCNxDfO#QRKvI;c^H-K38N_>%wyb^I*WeHAru6m13LytbanxckQBu%FuhtO&@rkq?+_#hoSE>L=z%xYzD#(zC~l*z=6N2J zapgrMRJ_D*B13-lo7o)#>SpjawAa3&O%DnpLq5E%k39Imh1<>^J$&%M!oF>rXQ#)< zhPoTIs31MOn0s4EsJN=EP!knI0;4}Q9>^s6*P}d zN;Z#1ywa)Advfgocfd*MRjP=17>H&_t4D>B`pz5U3F}iv40$5T^R*F`j(qKLI6)Wx zpe9bpurndHe3|7|M!GiQf&B=4k-eZC4if>Ofl1*tHm`+3t5^;2&BSC9Kj&KkW{LO zr|KKrA&0}SI%59zk>*0I*fACBZUD`YDh}2u>~%bGOaid&rLJ`5yaMDpC%2 zwDYu)mC^}U6oK>z=}QqmY&SzEw@lu)w?3{FYG{%uZSxl4iOT_4mkos`4yz<-Fp|Xk zU$oA`^MM2_-PcG|CaHabnoT^Gmy{LbVF^k~rjlX{WLvrsEG#^qz7&D0eIt@ix{+=O zOCl7JTi7jnVisM0{NaiS-Tf*AFtQY`8373TOA$ar9ilCOe5av*DE@dLjFJreE?+J6 za|PHgPbhuNp$6hk$=XrTdIKpn?nk{8?e?-S)aHU-4S0)_`M7Lx*#b90T?KG9mVYAt z1jVzq2zP7Dq7}w`iCTPdWs}EGw4*hW#Ud`iq}s;+DIl;{mqwbg2Q+W)1JIXU>ET@j zsf`Gw85!z=TOi;=FvJ$NMS~RDX>hAP?vccsYw#GVFs`+ByoEk)pXEM!g@goxYXSEc zXOEjtqcDMiePeh!FM0y=H;;4;c|5*}8*X1ad33ce629@l*UmO}wx->1q`}DQM~|Rj zV5DjI%z=&mfZVoac8&A$ODh|8sbw~1z@T52zn*2Ur$L2!=V`umD_wVl8bYt7bmSe|UNo48!t+^IT z$6frMo{o!_kvO&6%T1Jyi)7rdm()q<1h_eNk{6dm$HTEI!Lf>1cbNRo>p2|c$)}`q z%RY#St+VjnS6!)IGemyLQanVLjJCifTe<^XwSkqFaZis(tLXm0=}c{I4)gVd4ph*B zvPbsp+KSo)6RU;?3Jq!P67FaFwd|29lNiBk$t5HLY{-n-RV5oc;7h6R_+TZkD?pBm zhvziRUp9IA7I)>dUWH#apa4b0eT_%RodXJp#ux_o zGs5BN_eMYv(*T1Y$Y%uIWPgNbR9DRPiBdg1fo?Y!uJi~}Bgv?L`uHu!Hg6mq?r8L# z@t=7SqduKASNs~eKa_h|=~`*pIu4q8$7|BmGDnI21h^k(fHhVgX&@#Fahy?$NB!_dq7YO*>`BlwLIba2>{@f#KwJ7NZ zZ+zWkFxry(ooq{`ybVO6PvN>Effx}H_i9%Z&UoD7M<{BI+@FTQUym${(ip7+4YsB~ zM(yP?xQeh;F$sD;+1jiY#6&}W;z81ejSZyo_|3--&QEPz-`U<)^z*7PwM?y`WKFTA z5wOGYSBW#YUHUAXrhssxW{zGNy7WK+TP&XiSULQ;qaFXkAC!L4ZEZ?@E?P*!-IY{x zetWB=Do=ZDE-!h)T%ED>LK|tqX88IxVJ*7guhgpZD zm9AL}$gPNW^(d7?{z!yl?}PuM%{d1=p>$1T(jce*D!W{H1CZ<&SqozzsunoW>ZixeFy~5Sd>xVTN0Gc4Xlo7lJKA}kb*06W zmW-|E@GeQTwwtNkGxPKF(^aY5VtfUfPrYetf@MJRC$uc=Xv#-zgeWtH=nhY_Uy_Es zLRvTQ;FaZGUYOvN@J-Dk;MvoUBBDoOuY^G#KL12%$tR*jwgHkEn$h!;xDb?XN&`C& z4uXDdXnDoSltyHhiV7_&uOLwYgo{=R4{6ki=vL>-PeVdLNeX%x5`sa?4ACIQ1SIHh zLc(27cS}0ufpr4a%}-It=F+rMjsrRq(jbry&+)uqe>l^b(?Ac`{BK-K z;iB5OLJqJI8~Yp8R2Z*L`W1l{FGxjbSclL)W z7K(G^FwXyuBX=C!zp!s^jaj(j5IdxcW-q;Pg()c*oI=0Yy2oa@Hr;3#`GaKShoKG? ztIS#!k+|Irkk%+(Q#Fe@E2?>mDl|-+4J9Z%)sRqKO8fTF z5!5l_L?1YgzqOWfL!E02Xr+guFE3u-;u-YQ)ouHW??Y8)R{kM`x;cR6ps@dP3U(e+ zekqJL!Lxip@wwvEj<7cvf9!fr1A5F-v05`1xN45qi@FJwM&@VHl9dO+CH=xdcCb<} zitfqP3}InB0Nj7M=>&?NPH^AK0prErMxwwcsHAV#3`i(^mr#Z;|V^iS5NfIwK&a!sy|LMKec3pefd@=v8{ z@y)`hutRv}atC4>>6VfKss{z6Au?JK+Gr82C?SlZ>xi1;Nh7G4AxaA%j6=c00@^v{XwsxzbAHp^uMI7Q@E%V>`xo4E49QA{;Ls3cyll7e?8rk%x}V5XvD7 zN5V=jGm!5l3l^*$T7HLS=)?`@G#BQQEFdM3qaA-xpPI8hlGAyK*d8nU^!AgzxwZSx z&uln6$i$}h#X*(boys?^?daP(J&>y3FxtFvw9~72&?{cFxcwognsC=me!6!!>+^e9 zq!9J_!|q@_GuHI~5%(r=lAUF}@L8(PR&`FD+V_3$s@}V&_wMSR?&+CcX6soqdzQ&e z60%GJA&`VYNLT`dPXQ64tQs%EHRu-*6*1sdcKqS>qQH$Je&7`W69tt(&-Z`cbE>*} znaL!KUYK8I&RSLP`@GNlEdS^KlvMZJy^GuKzV%Rl&qBF-I?eYErK&AvlN10lx#~`Y>>XK~F%`MS~GVi@+3cj)t>=@e{ov;yfDamxmaD=vs;ni8!#WJKuU+b6JfAmmAAfQ;6{y%T)+&dvo#ea#&&2`H1$xBJxHBh- ze09h5(CJpSI{E5Ah$7DClzuvHWG=3FxwWxFZ{zMi?8VP z1cKQ@T-SLqU+D)aQX3s;?W(Co-z3L7V8;nUet?*Izig56_SIabP0A}5(`_uFS3xs6 z7z)aO$tfKp+d;R>(v!oKMMuTS-p2AAkE-^iR$fviau7tQvG}m@-(+=arp%K?Jiv1| z-EjRe0M{nQ0bRqEnhE-KU^1}%++%OPRsf8RBeS!&P6e|8r&+m@A&zJXi>fwPob4+C z0Y$czXdsI(@rOI>E?tS3?vxqG<^3nN&i-z}p1gsOqCNF&(}GihVnlr~QcNd|#Pny2 zW)N5})fb&@@YRiJUn@j$8Ajyw*=4&@F_&CDyXVwU#*+kPF7#v{o0Qjbzky{&b7DbX zGMEUmyfHDT)V+CaLN=rVbCwltr2+}9_Sy}PkR@G)^0jLE+4OFHD^L)2RsysQ(6Bci zJ-iGO%>Lf)daY_3(y!$aSY%+`tydM!ZkheR7E^9@Mz`1ApRKJu}Un$opPK4{EouYE=6%XBD{vDjKrdi zu4k4sc}#`oop5Hs=FklMSr1qh+qkz;1z8M_I%gn8h#3Dtx&p7M8C8U#ZlydV3P)q_ zd+lrPzU%heP8^=wK0U^g_;2Cga+$pk3c9s$W%zQ;Fs0muJyW4|vxlqn0OZ8KZ9T^= z3?6^T+E(#GDy?X`PGko`H$z?9+obRbd#R>TvF!OW{Zh?s zb@Af8uC9aSfTkNBPl#&7!d^e%06uTBqa6M-y;uzaGVUF31a%!us3;?weCbQaTy90t zOG>Vwx`WCR1C>9!thr9|%lQd}jMTYB{av+&whKlDzw+i*Sb+yfyY zeC)|%-F*SDcw%s{z5r}gMQ6CT&c8NViaJFZ)C_{CCu6JEg(Q8)8{W7h7}rr^1j+`N z=x}EXT^H`Vr^laZ?YS_Q(Z@{G$UKHJx6I=w8KpP%H~SC90s>|Q-1ijjyH9vKSf<_V z*y;vE&ka=@t;MG!aOBN+j2 zPggD*k0QJegc0%M*&VDf^(a%4ojLM&;T?+%an1t2`J6SuA*LlTHN82p09NA zpVd|$N)`|97&^T?oDlf@t}*z*-Cp>?;LMP`Azdm2Q!^t+?ic_M$_)>CS{^SNwCp{5 z&*;Rdp(Gq$+3i*J-fko8Dw6kN;P6bSs7(v@F*_tQ~ss>ur(2%IH-Wm7z<`mJo{;!10Q8e2G?I&k}iui%rXK+0*iA{4Ed{ zk+8&i0`B7$8uP8OLm>@h8gm1>0$!5gCLn_XH=%8)r>A*tdf)WkojV5m>mBJR^9~w( zgEk|%84ke?!)%UrY4%;MtbJA zcXXXTG+Tk-e+k?1KLDm;a*uH5t+~R!i-0zj|5B2H8P-UAS;0{xJkS9VspX68CWUUY zjBl(6R0(UgJJm=Kr09(g-Enr$^3r@Sd@1iEzDF3Si1^kw2{yI_+vvi+`}4z2)@*U6 zuSkP!DIagLm&N0DeeutJ{~F*=0+k{)D$x6eLx~RWWuY#FR3HEWatEkM{>0A-LP?~& z8sgLd7m2JWd@Gy_HkJfTgE3f9$GBf+ll^3lys4!){zhc7*&eMECOg{7%FufVN*zUa zP$2n4Ff9S2WMwQ6h31g4X^%|l($?j&?pakfG3??S%+twB9**~Ay zTkgDW8sM#TVe-DC>1rMgX?cgN@NRTBBz%xo$xQ9ZqoykA_4+|{r)x2XBkOYe6mXzz z+gsxUef92@q8X5|AQYcVO1R=XjM_rI@6e{dA-c#SD>a*}U?IbII)_aQ^wg4e-eQziT2$0^3w;GZ zp)6eh0tWX(63!uh!PubiP7S|qf*aGh2bt(}c*L@c^L?rJZ%b342`VJZFX zM7G2}gmSybsNC)~RBqQK2!DRQpjRrlz^VaebIwztN`|YWQ=d9DICk>Z(`l`KXkj>$o9$DO(EUX{RJI!J#C(Nb{8pN z7(zaxbx4tavfcrD5{xBQLVf?}_~C5RHWK$_fLtfw=wsXnnwo z=yposco^H_Gz-Unz*<9E0W`Cxc&rsFVzUnHA~srL6@ZmscVj9*8?HD}zh(#PsZj;l zCmNAEbSm(Ax4C$p#!rs)2JHCC*qb3Z%6pA zXv5ocLhB3R19Zl_asa;#Ys>bj7PcL8ozH?Fj48=>D<4YoH>v0g0NE&ddtPk_ztz}t z%R;f9NGY{Rf7YMBN^C8Tzpj~QTVdF{*5dnLgQrVd*%|H|4UO_>O_&YgW_oFVqWw%o z(9c5KJbzA&WC3M^R+_B&Bs^fsmQlsQ`ZuiG4~I8CW=9z}KLtCtJ(Y)L3Um$9>FZK$ z@Q=^%XReH{d9k@R%a(z<=0D%&F8dQ8He(e+FEY*cdY7`L6TPl7$nL~<6&vVGyI1{_ zOV9GZ%YO)Q+t1RL$t7|8GvSkn!A)@km}}TQ55cVy&cJ{KhzbEl?hIj!5u@wwB8sK1 zDfAd9m>#Z^@3b4gu?SH!T2C94wKlMY;Uvb0+%cP6%Er08G63XL=Ri0+z1-hf16^5f zK0eWyh=tPFZDmjANV?h+?V4IlMtVE*L2r!xF$h%nk&z)k@Q4* z?`eN2k*c894n5Elxj=p}?~A4S)2VVGQxBKJe=3y+!oeKcE(e?vv^7oc5Pszl*9Y|q z_yX{|P_Mj5fj{h>4oB+;@*L&NLIH4P4e>+h1h;0*8qsobmx+RcpZ5iK=qyF$xK&QXZc7WR|zE>0nmJlj(FFY;V*>KrG#0HY)b`V z8Lx<-w9`|F^^{WMfiC=3?0+5s{)`IFHiUra_uLJ8uY_;}MdseY{Sp4=FZ~qfU%@}a zmAPGuPh_ELV2^Wqc!K{mD4%aJ`<)$=J-b6GCLDi< z&GYvz{iE=Q{D0@($PZc8M_?Dg0uL^a0Cj(XC5utB20LW)X_tc>WHJtCP_zN%;J~n| zk^|*-P8B&F0rWY|;bvx~s!FJQlq9SY@|@jNcZW_VO*51Bvl&n%$`3v7>#q1Futi+q zC6E9Vu@Ke>Ml}+rS9%q8yDZPW{AITRXheiP^K({f`E)XZ6cmQ+jnwXhQBPC(m#vd6 zQGgtT$?I+^DYnq4Zl#JO&npvm^Ol zAi1KWqum~VEEo(F-HI;t?LJtDMf^U|?RDpK;hyBcft15hm@A^yg6eWAs-xon1Re{F zCP$_sK{HxW9Dzv3u2X}E5ooFl?L7j?&Tw_U2RCKNPp;BkWr?HkZP`xu8^5Eov zI9as@Dk>cSo)UL6^586~is+loIR{B=mD}=MUk`co(5XHHB~9E6KeM)`N&m7Lvo*85 zqFcL+rK#5xHKvg6rzsf=)e;^zSbddxyn8qk_eVhlYZ_I5F_!nmJ3!BiSW0<3T^}kB z1`*w@S5w;-3|GkOjY*oBn(56IU7}NUNj@c%4M)NyQh`@wgAW^IhDd+$$RQ z-j6yg9~=#E>1b{Zj3_QQls7gJ((bgIz`Fy7G&LFkv5d@vTN+yaVa^43p2MY{hn4Ao z+63n+RnOjiA(iB~H@xmOuYSeLFFbnpqc>i^Z_lpz$#K-JR7-{AU8%e9$%z)Lur28% z|I`^3V+(r*#ST=p0w!@f!-U+*iqT~v3t+1SH;|6Cidbn0;Rur;THpmt7Xvbgh^f*W z*u_m7>Z2f!mIu)xA{H_9Y((sEB~4#F{s^rP#C(-E(4`#Rtcq8QAE6SKzS;RPZ_va@P`C5#{Cm*t8D`(EAVMts66GT8XbH41=Rk)9 z3nhoK+so~(r8?r#k|Lw$LsJ$lv4`;xpn~8bOZT%-E|iJ&<85iSe|d>&e(>+IIFQ2% z;bp%msl$VMuwp8P;dM)V8gZS6lf4yKKEMEYq{3yRl)E~;vd=A^!aDxE z>;W#Dk2!>3xduM{5JDKyRL?Jrc%!BoH-84B?GLLxK~xXRG2e3mz&`_|RFzad9WVka zA96|R>Ni}bA@gWIeBj>20`x&QBD8U*mnxDIFHRw))nkMeBI^q`5a(wPo+XR^CAiw z9gbg8-LOF&QQzvnm;JF22#gWp@@Er%7hvXZ$76!?qlyb_&Wp8m3tNLAG{ABG(m(Ux zX2&`mUwUZu@A!}KKfxN!u)n z+ZdvdN7@(&)*xQ`U&vHGAUwq_qHn})+`Wx^hIq~4OH{IW;W2Ifzeo0@{zKxHfkKkWz%)XOS6 z2)bf>RS=M&SUn!mU4EAq^TfK%gfS2f)YF;Cqr*l_E$PFvQ~pp6o3`$8no(~(;ZK_> zy*G$^@{{{}LNO(w^^6XV7?rYnP)V4P?pnt0`%a{@lJrKxv2lIOkzRco2&F&*OdP($ zbNBc{@SQtvJw0id_jl|ZOle*z5KtXPkQa;5J-x>akA2;ApD*ql&hdT0zS{4nO1ACJ z{;HOHyT9hGU^;&Y@%VF^Uhx2?jpwpB{wOf@D+JnIMDiUfhZY)k2$4Kc1lob+!h+)v zafez4B9JN?F+1ejFdLia7IsWejg9nlRm;&ZI&iP>D{b*rYv;74VQm|R_JO{(78+Z3 zH0Eq0CSIt`%kEi^SCO=MT!nd-J6;T=HMIkAPiG=Y3jrn)?WZ2qHR|?j!Tui874tfR zVcB%cuQ2`YYz~SG3r`fxbT*eaVx}|b2@h`zz{xB0gz~<_rtS&5Vct31v@eFjuMDL^ zrHI+r0nto&R=>Sr(LsWPmkMMtfd%|d?r`G(**w_Bu4L&TnFLG6HgG@;Nd^uvfZuRt z@9v#DCdT@DJ1WI|;?CrqoXr3Z4Ns%g9GW$wM!2R%&DX$!=g18C6qFkI!n&jC3yWH= z@d~NI#jByyd>ZAO7(MNj@uAjYU zKxSp68en!JO~E~gggR{&ZT$Fm-EsZtJKu2Dlg*8bBMkwR? zzBl3ypvejBJ{X6c5#1|qe>IH5>df-exJP%oB}c$p-nXy3b_z9R0q^R+tT!0LovEUp zo*5>CarEF&9It+x{ZA~L@TCHqn>hDQYuPaC&sH~B8w!3d70DwjYg6sQ5F>4)p^;^4 z$-McI2k*c2{FzgS4=(I%Ob!lU*}OCPPFgl=nxwpN^oi9!a5 z@7PwI*nP;hW07ql!x?ItZ`Z;Z4AJ}s%Q^5&MVaPu9VWapNFBXYQ`>XE*ptOq&*@OQIigIr`^S9i&! zd!4&L)RCOZWOLQol~{aR7mVJ>U^tfd8wh^%okc#?Ku-+j(?$vrcf$QXAg|-;&O%}5 zXd##%ZX|;7LM%NW@+P2wQuv|w^N%Ckv%(~jQvd@ApN{q#D=ICt%7L>6>Q03!XGiy<+!1t zkqzQNp-Lfv5?IM!tp(SO^0p9-vNz>REbZGFQBZU(1j2?7Og@U?O`3^aA&(oqgmqnt z_V#uKVVn74#+KtQl7I;_5U?_wx*NECjopZ?LEpo+Tt9#?F3JCOvEc@jkjRY811r@E z8sS{Ga>IcemKJ6j!`mwRtNWv2kIt3R^cQkx$4e(gOT;LWg8F0Q1n>eylYd9V zk51tE0(^cX2m-3}7aXFSxpPoPj(D}Jy!wwXLVSaUH{i=J?cG<>J!poo`gO%4nZX2F zl88dMk_owAgnYA*LKx#bj!uje(8TVE(jG)oV9SfLwU8mzX!69M7|RI6O3edqHx1k%O*XLMXAG1gc$a4r@14IgB=JmpzuRxK?XDhV!;K}XQ(I?<_L~qM;BbI zX{DrDF@}A6siWlH)B8^E+Bq?XUM(dQmQbW&55LFWg_s4u7HO~%`CG&q)@es;7$M80 zyd7xRIEtePdh`54004O^F{hU5?(w-yN!pIU4Fw)1903YED9S|p$kvMj0$yll3!VP| zfMQ|6;pRKr$JK+bRuqHCx_n+gi$SD=X4v&GU?^=th&Qy2b!j}Km=F_$DOe05v`*o| z<@|dn+$f7El$gsILd4+!1av2Nu5nWop`ckr3D#Ur=mgjUh!Qu^ktmY^q=jNVGCHPG z-L{=uLz0EN9-R>=!_9Nsrzgj$Ot)Mt?XwJ~Q zaHCv?fiVWnLZQpAscNV)>Phvd#xEQj^y?;&CN8scp$5ha{8rfq%u_r<)h(jnt((45 zEE&>Wj#MFr5aGXF`XL2qxCI)n2~aVZ2%BTLP;7(fEIf4N$YjSwxHpKTQV!B$e!^Df z5W!Hz+Nhv=Hp`B+$TDcS#z%(+sj4}fjz#Tq+Xa4M&33|oVC!MwaVs>!#tg%P@xxYx zL9wqx;UYd#E@87Luio;DXu#$YeF07JDr(4^8?6K3q&sy}kv%Tiz)pl1U_9?qaoNuX zODreC{Q+yN3aRc`VfKtS?4u~6X7=yz28tIV2*y(fG`k!N!(0S*%$qZ@G4N4yrpdj*yQx75KLXxULcaq7a%M8UEla^C)nm%#W5_U8q(cym%n$guNn#Z{X^rUU3xU?M(a#jdb3lDy0NTXN-`TqUP}~S4@;$f;y@}} z%#JQ~peVEArM?~Cv)Xq2Mck(t0I5iz^u7Jo&TzDIe&0g0r$=#1o>YkcwzsMwT8Ct^ zL&mP?0{=FOgI7Cb$Mj93^NX1Oyf9Vdiy{3Sm=E49{#QRPrqDQ$=qHlys zB|{0}(KA*qhD;>K8O0_mSlGpJ`}giTx^NU**v?Y5qt>Cx@n$xrDUfXKV(Zv8L|H}J z+bzAg-U))xvbYZ^PZl-WxXUj(6{oHpcWQ1=mX$HKx54l0neXp3xFs zdq;zUfJ2E3RuEx|>W&dOApZ+lWmpAmMnO5iW;~md!u(`qp+gTE02+biPDm+k!4Wlc z@xNL9$QpLS)jK^Mb0-&OL!t7Y6U3r(e1>ojpUY*kv82aH#arNri{gh+?y&kDG>!aJ zbssp)LoQr8+=hVo zG0(pQF;59nZfA<{uK-u#wl(@ODbOYq#cr8c1U!awVA)t96rZ7cLMc>2xoNW}>95SYsMb%P_>jXBJZ7s@Mh z#6Zq|9_olo(g0S1ti7K@-7)EP{A@BnbZ(9V<=`5>G^%Nkjky_<RmIXvzzQc18SzbH(geGmqOwL3y~UkG9_#5Ft$8_rpeeGyitb!~Jpl%A zFAyl~+p}YPV{)Jys7RFiAW?akKTN)~wOeA_W!4FaCX5iKbD(yxD==Ndn4f72A>pJg znsgOiCby6bL{d>qaG{_=`J(Pu-G(O?$?lp@g$&&r8R#vk@bYxDlht(hu@?BTHoLte z2{;0P1%9W)t)b4!>sOcKM0ss+8r)DxvZHl;kIMx16oc546h12>Mr3j7{|{)7fhaF6r*EIeTF zEL!xu`<6pcXOH@@Rx)r~2oSi%d3OsDxRZn70?z@?AZjQ;?2HOA4QMTN6$Vn%AzU;p zFcGmx!sn4uJjWn{fMJ{gKm(w24|aW|-Ry$dogCtR4_)O;ulPQMv##(eEMCx1P)9LA zbPEsK-||W?g!GgN$^7-+>oyN`VNj zNKmm7kbnAL3q3?=}7;j3-fbuqG}{G zYd$_nj4d=nmiA#n1F2z-C$3q3D5QvPgyfJd3n^pq`~VbHnf6P|SYidFEMCCwBwK)P zV0Vz-!k@p`AP`m64`en=HD5%3dWX}Sj>9z9$k=r|Ve59}d=W*i!R(E1pB?pO!@y-D z)?_Nd-kuUTg@t(5aCkI58VC6bcHB&7-ED@nlIk%e7%6^u7n`O$B89y_)a$tcGipj(qOI2 zkkhuua;1rexnR$A@apH9NeoRkOb)UyXy3xo5o>-^aTm>RI@UhFWhGK^t9*23Zrqm* zUEK^TK>&JvGMnOCG}EyxXp-b}E(n@u-K2Wb?UQ|bZhYJB|*&=+zQ$vqk}{T8Zn^`RtCjB4~A^=`4#z5uix+e{tI8eJd%U7d>^+K zFByxYgnR;N42(rI{e;D#Xf&}{%ZODGAB=#w73p1=8@3PPMt>r;Q-%9Fe7T23P6H+o z1^gRc(tH#JlMs#z+=W}t-+2AOmHD~G)c9ymR~_7l>7?HzjDsZ{_TnvJ_N^EeM1t&l zYu~pNHfdx^7XCbX`@PoU&89T?^@$M6B`U}sw&xN}KxiGp$+F^tr?+Lc z(Jg=ch0m=3Olg5(O5@z^-08-NIb^sG`2^Ixw4vQpba*Ds%A;bEHdjKXJJ9&qp|X}g zz`VKEa9iilbNt{wBy*=nhx>agrNr&Y+c&@u+O}7=oGhEnUe(RLwUr!y!Qj&$Y}`&; zz^xBoJ6P)G{j&wx`qIyhSj7kf>npq-iMSiNA3nLn18;0Qc;kQ^f~$#)edI^(#LAO3 zV#`1&Kk!=!ThJOh$AAe`g?fsuCcr~jpPe%R1k4xth8@Dbxj8xWN3uw@8A9`NCN zU^m^$z3)l#@<|9t{|+^sbPevk2KOEvc;VGC2M>8n`=6MEruR+xK=SpWe49a{7x*Zf zwi~ZMa%gE`Y64ZWoh{$}RIKM{?BUD$?$$<(Bm>m49oEI1QN@8}OcNVCZR48) z!?rU|&f1UGy!pbOJ(-ZV_oV1D%|w zK(VYjJpDNr9Q7FlimL~Ar-ErkkCA_0AI@h}yph;_`nEL(|IoW`n%xn}_V)YW;P-SR zNCgkyH*=t~n&tUY)qnKDi0SbJ6+Th7Dzkt%|%E8(>&1jBkI-5w@2MOj3~jGWUcTRBWbfANePj)v14sOod1z ztc7CcWrkQaj(Y;g3B@VBfSgWjY$}8LVP|qIhPiU3N+EZpZ!n@7SJ0|oRCQCrI6DKV z>LPz+{Xi#sGhZ+GqPT_(s+8_a>H*jGhqlu^dGm2&Z252pToGa+dWN9h+zxK3u?v81 zP*#%r2t1bpJXb5k3$6^F%jeQVOXdmqT683&-Er8GxGw{gAZvGn-9cMs*0fcSOsOtn3`SdOVc`KEnK8GlMO4nf9q*6x7nG*@ytThW7ryV#s~Y`bT$OuClAe9{amQzr}J9U^!+j1?Im0sbN!Kk^D%_XBd(!zw1& z=G3+Ec6>YNLvk0_Jw+uJcmSpZXly3OiTe=5DdC_WSzo)%0=p3;0FE|`v|uel@ll+{ zGW+e2F(e=u1{e-9*zypYi4H-gQb}6Aa2{~u2a?%HOmytR$~1VCWw`~xCk1qu$L9_B zB~uW*n#&8giOc0p=YzgdwKLk51qpYLlzLRJa}w>ZReILD`fX>>{oTl7?tl7`DOa$h zfaewv-+(fW0@f~l!(H1^&Q1?z)^a1YV>`XQX3qO(x<^LqVZgEwMSj+vKAk(myBe;Y zz#$x15zsOOwgLrOs%XoK49W$L)38=K{v4y1$0Vq#Vs#c02|V1>B2Dg~2Y@HIcvVl( zG!H_1B1#4Sul-4pKFdNcv_1+7wg(_a>*HXIY@)F!b zeAZ??TERAqt}{TGf%RyGNBeblV7KRMfKUp|Nf*#2680rph6ti2JO~po-wDleb0s}AhMU8p12qdH-gbSq4RD2G`WA>d8AGE&{qDao? z`$`a*Jmn5v{<1r7M>omihY#)BGe0*qF){>Jl!sCeQ3#kA1`tA^ZK7>o0znxRfaRoG zCNAlO{t&bV%vr|n$o47PbDAY};gB8VLsuj^4-I79gEzJM(=vmrX)NFl`V>ieV#A(P z@cHdv@UMDeo)98AJkmP=iv`jdm^(rV`>mV;y8xmRU;+qPlN;uBt)6W7T9)x`n!&bOvTIS{ zN41e(!Mq$oXad;F-9QJosv}WKh)qC6??9|m05V~yW7#4QiP{xOL6U~T{lE&NGSRM< zghfd})gy;_?$n9HHy*ih8P&;?<9+BH6^r;x?ht>-1_Z86gzceV!my-h#cY^}wV8lD zE^SdZi3DI<2%a}Rz*E^(l)>rk(NNy)NdhFisf@DUEd{mU*bvoGiiT-QTNhHE)4Yy( zio5%rbG){$tTI{(M!VAE8|y01$I`l0SSceFxJ6~FV9{ZzFwTfnh}r75CvLy_rjuY^ z*|U3gX4?R*4jbQ2L*J$ko2vuE$d(6S+*d}z;Q@Q{2$n51E?`r3x9C}=U7C$`(ra$x{&D^kwfPfAJRv~`8~r-baLNPyU^Mj~FE-|ilcWFj84 zomPxsK2#6Z64jlj2J>a$T00OhmW_C<&<6$#O$hXjxLkvyRYMQ<){}po?v7;oJ(?$= zAd=>bo2!}LaNk`wOeJIKt}J?!qYQK)oG%r8E)8BrwlmE0I*7`2f4;ZNCE@q?T)JCG z2sdGrBU}Tu3CA&Ze@V=K4s8^%Q8IO@>DBDoj)0xyPM{i`{KM#`t04OZ zOc_*E6j?!X!ggD*ik#P*Fljo8z8)3_XmmxbZG(Bf*KPTxqm7=EC-&`)ffC@R8%~@* zdH%?uy~p<*U)VV_Ju)=Vm(NBUu|_29*3hwlI^+3awT96dPrNqsW${|u)6Ps2w)kKT zzqzl{C%xF&SOtJqR8c@AXamys4r#_lO5G*=5w)!o^oK;baBnvA?YRSAe97AG$ z4vG1;gs|HOev{?!ORupFg&@N;=H&0SHvOj7+k)Qae&Qt>81zKaXx^Me%j$v|8tv2**~0xl z7x9h7HWW^Wiv^#jT9oSMaB1*NTGch@7hgOl&d-4Q`)lNbmZ?Z^4%-TajG?ogu&{to zg>b{tf@Lg==WNB)0jip}f0xL_#ty3%* zcX?JALtM<)P${K?9w+3Dm%In<>DX-}jUUXiQyb|xkPF4~Lb=Q1w49#;S6+HrSXVL^QH8qj(n^+K$$ z-zB4lQ5X|>)U(Xkq4WPi#d!P|+3|m%_>QNNQT{JjaUQXaet~11{yq(=`p)XV4p}Rl2`nUXl z<39{T?AO_66Eou9qivBS47ZN|g}$o*ygm#!Dx>&gb{xiMZY-ZhxKoG{^auI6`v{=zjUSQingy`l5VhuY?uat zicWu-4NcWL>!GuZ3k*Y1A}%ltZ%%EV{S_Jj@dz7My6eNjo9w$}?U%XFuz{j*%2$Q! zF%6(}kM=p6v*C@>D>I1)6ojcJ=v3DxVMgt!RS2{NcqZr^et zd5mBy=tbz(z8<7UR+1~^(A!iLr2eeUih$8gPDn-rLWTetQZRK}K}}}R+U{eUmuT5m zhS1lh0*NRotToZA^%qbNvB^mn{YAaWf%JlCmMu~RHcti2hz!ww6n~4C{tRNgO)06u8tF9y~U3oqbV;1)OL5_p7I zTA$pWM%ehlNFT)UMb2^O$Vpt>H9a)~>=JdX0b@0$S!{w($wwrF3$r$0J=221gxN02 zRb&jvC&Y8iPqbbWqKpAWX(Xp1I^d<88Q0*_*&%yhD=VNoW!?GwS%EYvV%l>8DE3A* z%gC|wt4~vt4cWJH+hBIkU&QCJAiW*-H&oeqrKo?#t;7PYs6VQPp;@A1cO2=560-^R zkequNU$8`CmU-#%C&6<7U&a;*L~!7QDi>gPIEca$q}IF(G##AI11rv-LjVWeHUaV{ zUTdmfaf9N9x+Z8^^WUvJ=A88|3V!}PFKaAiBhgmUjXJH@vN84LMmBttTGjdDVu%G378Og@4VC{lp7kcSE&`S-n za?ulnsyb17fS@3hzZI!~M=i;a8N2G9Kf|I#uzp!tVUKfnp;!+ViXAycPSyA}J{K%m zrkq<#o#w9@jbP!2^_qa+vyLv;cbS;O2i5xUNVr|o=MDZ~JBQ1bF$D)H@HQ_RHVuy$ z*_W6Jmt&SkAI!~~Dr97DwEPaE)v9hPO zYP<@-KBB}dx5hN#MxLxc>dVX8tT+hY`+x%acHMLmsXDt;@>Z5Vt-jA+Q6$6@&Cr&AmuPy-;}$2SI0? zPRL}u+32MC0HTCQl5YK={S2yLjvg_L>rWjyfAqX@*f@M(?@VK4sH?N2LH{^`x}r|S zkmhheTJz?R>nX9VjbxoBk^RAKlmTr?yq(i#_!+i!(T0}8bG(&MDCcrSM1@Oy%@Gu; zXkg&<@HJueMyD&N1|#xQPC?Nk`Jke!k~v-hd9e`*p>iB8FdceO>l+Ez7f zGjcep1$-_~Cay-ic`ZCTn6DI6pX)f0=J;>neXbu!s!RQ`Q~4OoJPfnp7vcu`%R5w* zOQ7aR1pO?KH{BhYItmJYLCB8ed(NL2bz{~0KNAe1umilxP!|rquYd1#mEj66tUl{Y zyL27v#)ozDec>stkDKRu8(m4BUjTmx{}8K#St}KPAGdp;pXVBr{qqC!`7GDR_eq{+ z#e!uPbfNSR|6(=Rc2b6NHE1=6qh`k$W*0CD-n&4bn;cr|0comUOc?QUBtAVoXb6td z%t}3xPu0-4M-SH~m$R(8+)%KOtu>yhp1y9z4U!XIy(g?^(h)TFkWqspIubcQAg7w4 z*Zab`fzD{*!2a!3tM^4Pt4p#?p$m0NY%%`_G078@2=2r1Y-h=swfuY&R<44rXwAxU z0v7Jn*04dgO>JY8dF~*vf-{pNLsYGvL4`20rcdxENRx;g4XQN`DF)$UiTD@9RxKLh zE85j-#{0>io3{EvSGBKyok`6<{o?4WSHBP+=}ECrd!aql4!F*X4Yl)Igxaq%)oUwj zKv-K#eJyZF%7Q}gTZG#Gbc2Vu27UPWWwyPm)!lO6_VZVKRpYY4D#@|32=cONC`kAm>_#l^p3Yc4bqKr&r1Q#442cjvS zA7z&6Dd_Jp*rvDyH|L?&br`YsrK2A&P2XFnI2DUEWr(Nf1}Rw5u1J8vE9d~QI5!l6 z0m%Lj51s5y=m;oN1nfSe`_S<`?lxRV`8e~F3EpE2pFA;=8$H~;u+$ac>tiA^2m0z` zvhD+bK@b9-gwN1TmpkyT)i1tV^$o$A76k2w-*>x=)dnEis)!%_w-|ssgtuV;(4W^H zfcFb;#xc@r*0H$6j_decqSg2uonEO2*9!N!#V5iTk}iPF&>4?M0T=kPQMh{!1~UUz zk1kU_ZerPuR2%@r_(hYfd2TW&-^ZTkEYxLn|ssrVD7q9f_y3ZnL*mQ&1fi3Q8 ztW2+1O~K&XC8A*{A1Ad2)0I#Sp-aLfH{&7{y=2ov;GearV!1u&DeRCeKGn2Wh%Oy7 z##DER{}ya)-ebPbOeiu)ywQ%=@AINj6gaeaxAur9rK0B{*k8?f2+ehW|B4Oie;fda z-s4jIh`b~dDbpqSHIJ^k+^7!ds6`ad>QA4yTRllR{}h|VZZ@euy!4zHWl}%Rj%ih# zV5{Qq*zuRqt28S7B7|Uu9sfJ-zn>j%Cn31>H<$ihcvAQPs8f$}5A$zZe8Pk2Y@ksm z7@jos0?a@M5J8R$o`%sghW1yBPXzFu z>8;-b;w*B{uJT2+P`5W5CI$uc|LYsz4odH?t9t!o3B50-NVNoKDdAP5|CA6wWIZ;6M=!6 zsl+Hl0{LZjIMXp9_?wo(K^J2ye$fMw1&hy6t|jcyMVq7@*4^5|;By0XfTt*Wk;juw z8!-&rPxBLO2zHRLG{_gC%>x!1@<3{uFBgXcju4^^LOi32s%+FcR{tW`{SkO(PSb0M zl8P2x1i1bKHKHgguz(IV96(1oWW#~E@qHu|Hqd0@DG>Ae0;}JPrX!{tCibde#^*G^ zmWK*x(NscwoEXaXm?G zf~aZrL8FFK4nSqmyNS%*{-(r0`k4$tZsQireZ{bJNE3N`E;f#)rFyaD>(anM{~r=)fx%i3sJH`)Gdk3%gQgQ}6x%8HGEDP72=Br)Ur*D_y$YH$ ziS2R+cj{xQ05(aQXPP*mdok;0C;>ORj7-1Cfrc6;L>j(d^EB>m{KpBwCm z*e1b`N^U+ZIaXKRSIrKj1Nc{y7{$1#{Gwx)ic4XzK@{}qFKmYYP~s_jURB9jTo z*BK3Tp&-v3TgFTwvDrLy5*+9(clNRRnQE}sQLMNW#tQ+phT$S37$OR3#xS+-@ff6V zn2Jd(A#aH;S#6f0Wz4kz|G;9ypu$)tvBsd{PlB~(7u+g1G$Y0E0ofr}yLa64`kBe| zjoQM=0Z~@33zu?ep-gJdNQO{-?Fz;M-igV84z-sy>$@k4ys$hwdE5T3OaeZP7K`~! zS1sl*KnLl06r}jvKEDJIMC|m?4ez*Vpy%|$&~2x8$Iyj_2f7i^4JBO5yHO&9k>$dR9!Zvk%|g ze)c)>gE(839^qbx$y&SnIdM1Ltv+^L>nt;EejsMB;H=~%TW~lo;c4WDv~PkxlJxD5 z@eS@0-oc&ZhZmplVF99k$%dLE4nwS3px-CR4RI7$G>D_Eli@SEBvXs(5g)?Ljnm*V;a9{ev*6#;8qztwQ=YJqMFq^} z-~JRcEKosl;@Hu{i}O3?ra`~Z+f^!}X{QfkcG7KW7&|b8a35PA3YV}Ptn;)eNcF5OlM>Dtte1Gf^#*r@TEM$q+tcrvodX08ssU^?5_m9p z&FM4V>i0N#Ul3V&i~OexDXRm# zh>ka?G4T!toNkZegEFF~UV}SleTr8+Dr-JxG6;2{hJFVT_j zI7MGte1c}xeRdAp*S%iq<&HX=)*&$!BjG`}lpt2%FGPw1bx%cmYe$0i^T~JnoFT;uE z^_nQBlIe-rDyql(&mWFu#-?&;4hUsu@A-m6DhS87KqW$<;rQ+BxT&Hf>7DGDOvld% zzXBCz(s3(B(Nw|ngDFb|r$711d}Rb5Ah?VBt&bj;8d`8^l@rj=yAgEdKBHchEaB_8lK(cPxE%{T=j< zAs7+#DW7F`EdS;DJ4W$6KPP;GzUOuLp4xL|cD?mG#&P`%!iVVkak~D~u4Ort4u*{hKxc+hBm+1PfY#hF@{yIJXQ{mnCh7WR2SmW?{c8Bo9+8Z3E zeaD|zE_ ze+RUS!!7(XyW@}99eXz1QNZ_jt?=9QTR{HXtbZk)?J5* zRbnAPJa5aIrN@SG9%Bp{{6qUZs{5et_TxOp7Uw@{orhsU=jncoDbD|qeSWTaKaC{L zf66|8v~@qm59j~bK0nyHAESozkWg9^C>x~r-+rk?V}KKqW}V|OfWmJ!rP zTJLxpyJKmyj3978GIEjoEq2H9W*HIgWHNG*`)zi|7BV8dl*!0N?*C~jTkLlY!8e3+TKg0CxkUiGV3O|OcR+1i`rjeRw z>k)26Yc)M9daUcT-tDnoyFLt8;Wjo-58Ern8f)xoZEtv+eaGLh-)N2X+8y+c$N*>!ySG$P7jmJ*yFVJJtwi3{{tJRhug+!?K)Px z@MR`bufKlncS1k6e#LX*Z(|(D`T0fm4K_+0=?sPaibuHbwf#=MZ6ux(pJTt`5$@@> zU$J%v=?n*xhex>YvO6})!);6_kj{97^y4OZn8fva+3$RW>E{jdVA(*Bho&3$Z6r=< zjas&kqjml}{7Q2zid{7S>SLocE|z?(jmt7VuiLs#3{_jLMe!aQ74>hsiK3czxg-(%Aa2t~P7aImSQ$@2 zW}cCCiZb`i6WRvy*s>K5qJX%S`5E;_^;F+vBbkn)ZaQ2Gp#`++Q9VqF6dm)l^T2AbpEYaYIM&PMrLPXW)Mls&w@7O(?Bf@a>oemGZ_N< zg`lwTMxEkCLkH_)&deTIG%}( zFZ5J;Ly=O&tQV6*%iW=R9w{Y<UR&si?f}%RCHoI za*`L5gR9@h3}p5{{s(tlckg(vKbBcuLVx1ra(aHUjOIJCE1=%*4!g4bCX(5*&*1lk zYoodRAcAOdBj`fQ^5p(Q`B*K!w7B|JgfjI)0s4xEe*D@IfM|YK_#`)s)X1wE zMi!xR9o4&&)b8 zZ1)}hdMesIT~T~K#D;j$4C%3MPdK7w=f;Y%Q*?>ho5m&0G%BOnJft}>+?jAnx!KWt z)=2k6ipLLZQ%&Ts)%<90ur`@Q8xo^$_rW{@Tt-hL0cV9XNkvaJXZ~p}OSG zjm{Udamb8{aoo-S8aK>DR;FDvmM2R}%K}s#K6%H{(BS+Q~ zfQ@0_6(7R@6ImTnNNo?X7}C@P3J%cnx{yzSk}2ThX8Bo)AzAv9Y0cJPlJ1l+n6%8H z3;LV#igQw)4J46zSzX4?Me6ZX#e<3;JyMuj>Gp;-Qvv67X=j&9)9amv$Bbs&M#2}W zCo{?Hwn{`$V?F3Rkqt(>i$F^|l(d-yCeov+KDUtRPr7_s*y~kXi2$#}(}ofCg?)yr zRH0FHT^i#5kMMbJFJD`HLfd-;*gUMpB`jM+h3Nn(nz()PC?a{drBMO2K|n2rlS80L zyahqFamrrfKj?fyN_31GAxtxPGR2k)b}{VM_X8Zjk1-w{QXwzo-IR*1Q44v12dLn7 z(|6kVb&&Vl`fkKD!K*^CZu|)L)ma1>oLf6lY}eJ9%c4fwi|o=~ey_bpGSzMOg{P@y z>u9Kj*|LLtG}p9~()>dW(cEL3w6<15oHV_vH_{j{gE64D*Avfqi*si{^qZXMMgrK8 z>fmGP%(iOG;f(|a`f>*j?5GuEN~NlJlKxEJ=(f+rOw%Jc5=Hce0e%u{x_a)uS5N0d z;oiJ}uqUtdM9g@)o-iU&UpB7zm(H9&Q;I}HAz3yOBmI>yBp`_G@grDA2e_9sw0>~z z&QNaD&dX(hUO^5}xM-z~hzkkpr)_VHH&V@8a1nPQF-^8dYx86ox`mx1L%rQy^=vv4 z;tuc!NcULPB14l-{9!vF0-|hJWC|W5OKXG1v$a@QM3vRiFex=a(L zFdI&=+MRFRy6y&)WdJ;nd?&buhdYK-iC{TYMytsHA851N98B5_2f>DElPqJGWE#d# zwfQYuLkhh*kPk-dW3vl|u1dUTYJQgz-8R_c1EbC7p*YomC*Aj1bOSfkOgS*Ty)5uX z*L-o{z6b6;HhA<<_ucp1d30c3ec@O)NSZWfboT$J?oHqEXt1Q1^Y6y-$)gTa7_ zzR?(wAO!k;|L0WIot`B@zu))%exJ~j?mFkxsk1!iInVy=$mJ_+Igpy043^8Si_TDB zRw5L7|1LZQv&pisw)O}e*Nl7J9|K;+4=81UZhc8wBsqSZ=vuPG7Lni#cBO8`;blMC zm4$M(1DmlFFf5Pt$&V4g+qs~fjur0v6$M!am7}shWX9n_63=E6s%jZV-Vb|Ngr3he z+DLnwve}t1goqgaiLEPh;fSC7MC?GNoB-vH82*%h0UmxTzRLt1sR6$xeo5FPOe~LX z!N5SKNRYCSJ{q77l)=etg~)8mL^(S>G*BtUqrx7xM?HQcIFt#X+oAV7+NF;UNLT7& z2RaA{z{IJYxBxDB6TqugruekgIwQe$5 z#ZiRI4|Mgd@u`WJ8VbXvLkXI>{pX%jwS4|i)jscR1G(ZA&FWT`uUIIZclm2trA#WN z$n}W~Yj;!Ab2Dl55SiY(vXs&gkEi!7Ad9DgEL7h^d}%0o(fhE$)54jLh8b=P7jLAo zY%pSzkD-;Lv|oU_MwS;Ts~6b?@=9E-SYL#PajOn5!(jw{O%HZ!<+jSVn#VK5qVcH7T6?J3y3AxoUtNndj9Ks>H!nbA_IRDa6>3iB77-MyNNW@OdZ&g6Ei?wpNAA{cwD zH_HB1{5#yBS{|;|KFx>t3xGTwc0DeQfaY}NgY$@7ee}xLoOx*fzOBn6!^keK>^zsy8ARA?sbMz%JYR)UI=MBJywzGc{H+2hlh`H6BS9~~PCgo5FeIdabG zL_U*NTaj>GMY59G;_ClWO15rG;c6)juND#iQ&LsCvASiJCeSUi4Jw4JFg9T?0vqS40Gj&@;Xp(e6ovavFiX9cS~o}pZ()u{|O@!vDF zYdse)c2`#O@g@e*hM01h{UPK7A9|Fsbr2S#LjvnFKsdv(L^5460VW=ma1}RXURXyw zCTA*+u^Oz;PHYb34Dt!4(ez%wF|5>}0LKk?`o>;6vOHq~xit?B4s>9mOFYJT>^$$T zpPHZxe%$rIJdPRZ4sk%rl|uktxr(`8;g<9J$noIh20Yimbbz&2Mom#o&+Sqe5RuV1 zYkTv+dMR2C7(tjOMT*V1FKvpN6v!gLuj)_EWI-RQrLnPaJf_O20;0)j%1+qTB!)X7 zJsiLV6P>;BqO6SkbjtVuY=4dNmX3r}ZE8f<14USY$y)y4zH~TR%);iz9vsMbQufNB zJuwg#D!eR)uDhxpfn=fAfDgtm0Jdg@zxsH!!i6|%kEGmf0^x^zI?(g;wFZgB-NZQ~ zB3z;Y;v887QDU@Byg8gD5kmOrrq=+5n;H|U0xJ$QMb-+h-kMl(x1j`dCP4t_y|AfM z!Y?4;Mu%ICBGRyOcaK>%OXRTBXB`~dgQ*BH4o=)8Y;L_Vl?Q{!2{?WgYVhXx`OV%O z!~VT?dusPkq?!%QpEn#V<&Ymem=0wZrz&>J9@sh*KBARI<~BKNEOc0A_R>A=RBIr5 z;O4EFcC_TnM2iz!O3_Aol`9?l^ynjP&_ek zz~(Gl*}Kx2@DB%q`DkurE@#IhMsl>33L5eGIGDG>^x9d2fubU3*@~DQ+dVXb-1Syv z>sUSyMi1V0;L?m_J5xII?9~B;0)cRnyHx#%eM0EqZboK2?ok176S)!8!nz95SU?aj z7h}c&WaOJjK|eQD0H_AKOh9z#xq-QI#?plj>mV|bC(GsHoRiSPASAb3CTWqomBSZs zRC;x!m8&f7AG9YHW+HkJUSlG%&xVmSy4op8$P^fiwPtoU3fpF?q1e#g={&1g)rlnG zSD*r)jDT{ok}V>#9kcX`p53!=dwb9Do|d&l?jDcwgT2Zt#a7dZASsQkC$F&P(R z71_*`#_W=VR?GXhN0#RN(TbnYsvax1<7z$+k&i!@gCyMVPmVZvb$HBbr$Rdqts$Tw z6U!d{#O)1H6YyuH9A{>1ZtGku9LRJ0+3iry)CLy#K`1(=ga;n&U=`^`BivU4Uq$e9 z473}VQ7kcCO(5BXOVs`n6W#-oJfR^D9NL}I7*`~g9en>W(DAs&VW16i8xl+2d{ehr zU|i}$h?|p)Ly%%pURDo6or{RbDl8&+R635{LUPD-+%x&Le|xqQmDN-}jpXLZAgtfX zShhZqipCU0E7c3KuUKlX%~jxA;*-pHusFTzkX0QBMqtHi7wSO}J9ejtsD6_c1oZuqPt8>#}p?MP->+%Y1_<}6XPfiRDl!}mZH&}xf#Eq9hYtpy5MXm~0 zt3aH*iko4|HLdNRTpD4z5$%}ic=`<{AJDVC=$c+>Vs%8blf^?~u+)MfjJ zrq7zVWba_9n4cVO<`A0Q1pgfG;&viD|^+2StP(q?K+0 zfE5s_Ct?A*f`!}Y@&Q5X!TL{YDqQR~<;2gHrIDd#qmV-qgU}{fAn9~C#C!4)2O01M zhwzk3%^e>!jvLULBMOoOI7%K)7j-lvO~c*M-XzNR1K!XES;{^+OrkJ z*G?rZ=>O7#D}%X-iA;WesT>QLYIA<1n;bq;3;CmdN#A%TWQ0cMi-&xJQ^lRzQi-?^ zc}o0w+^Yc(J|M(FeO(~@!^fKqq|or_gGq$EP?6dc9Ium` z6jXvF-yqQSCt-a-g&-mn0V(Kv;SzWrc?>Y&jH%PU4PxV`y$<94(|uPwhHnWv0@s3t zc1N)Jvmh!;NifNW&pvcueQjoHbfnt`qnt~uBv)Y25NC1nWraeHFnP@rv%vMrlAJ<< zc$eLRl-MEvrw~06*oM1sp;`lakvyElZ-M?vQMD~vGFfJU@dqjEf*yn8cO zwwShIj*#q@n&EUR8;_61K~5v+b9QlY?r18BBm=1cV#8|H@no^p7_%}#tDgGQ;;doA z=f!$atJE@I?guxy`cP0+huh_|N4wh-*%U*d2vw>bc-@v9J2J5gqHfp_K z?Z;jZfOA?Ce+bXiDeU%{%Llh7;u2CQqJgj(sU$!ML!3>~2tOt472boKbI#RA4A?mInhYi@$3QVa z14A?|u43qu5sFKNM+~K)!%5%*+7lGXr+*C@w^Yiw<-JZ+F$JmxZs&^RohwM`JvP`S z(l`jc6I2L$T}3jXYx=1>%;<4l7yyxL3%Kx`YVibQ?qKghNW|UC(UN|qk_M51xX6t8 zW04~Ar>EwC~XBeeb$q z8vrT`jP#G7Fh+$PaE~r6=l2yv(02rU>`u`kA()U(Qj`$MrGNRHA>5;BI9`1G>|)ZM z9|iVrPfJagCJk$vMhM{|eFxDn6#caI@@ihX3Raqhtx%~(EX24p4Mt0cxUZ;IAK5NdUo zc9wGWn50gu)v|M4Rn$X`=q;(y1SJ@@Kq$PAy?~Sx=PsY^gM7+BI;jhYv)u!O28hkT zQUEG(zfvwYQt^3LM=0%?ZaEYHUuK6gASrznO`bxoq{f@ zGSdX+78FD@%9I9d2q9o<7Hd_3Pb)>3 z{A4Efj*nk;&P1Q8;5Xrm?oBu(>=thJ=w1mb35nl;ARNf!n1OTYUwJ-7$KA{6vO46r zo13B)@Mzyw#A^t>?Z_}?@0yw%-aWFLqJHPI&h_LT^HZ-U!1E?8;ienMz06L!qb%vP zH__s$7tHUUausRmO6zpj&bv;%QSLeU?#T`y!YUKukj&lzl44GH!^e{e5DXp@QAhFz z2wfCV08sQuxM9ef5XT?%gQE2L0y1Rs8amE-bQL)-Y-+}--O2IcL8LK)-xE~db8L>N z-9FFEMF;&`=(xm`WD7tS9Ay$lbuX(Ak8CYMc`$p{V!D%_I%|{6bZ)GeOpwSlQh|A5 z2nKl}UofnVZhWi0cW&giz3XpTtxshRya6hCE;G%KFPCxy5SdP2cSUPx7P&ZWgdU7! zKpJv8P4RYztOLQg^A;i)ozl0urJA{$tY7=(Khtl$y6TmFMm%1+w! zdt@ZOx4!0;eoy?Te!qKXywZOb|E^!UZ`>>WV{W+$LKIG;FAE>qG&WG-M4+Pl$7FHs zj`=C^tbQ+Np5v8%SG=fSn!d^_{W^t^<$WN8?3qq!lWbX?QjoseSsJoY?r1AIbh*?+ z3mTIKi~3D1B=*P&Er>@Ld({@$39bFAEwC#ZY;|AdE7%FGdqNBOgmLh_(m;J}>f^)~ zeBZReS82ibP#b!c7JNUo;a6$F_f~@)@hgsl@0$i^;Y}@$uPN~x=M(IbLq5SSXLhLc zR*_c8DcyYr?ID%kLeS`zu3BE{9h*wm46pRjO{IG(Ug^CacSDd%L5CeXKfd$)YsSkQ zj_7L_agLBm2^N2k!y>n4;v)tFL?gbD`k>O^=Od<4I&H8)ry^ALLBh8eKpa!P405eS%05PSxl^Wn7M-#O&$w%Y>U7$>x# z6LiL_wjg*|dzBW>O2Z3j(>PB2inHeHC$#889UrN){(E1gg|ip?UZsVzFZ*Amg|kNo zUZsVzUk6{Mg|ip%p*r1cxd@^p-h~x&Bo{kj1;%$pJ}$Ue65rmh-<>?QenI^Ce*NlS z@_O-+P4Dm8RKNC>Q|oWpRKMrhQ|m9-Bw1Pit5fT575}CG{k>0|T7LsVAb9iJ_sLW0 zg{Q>#d-cZ4gS?(?9)A@7K4v`azCcoF3MbUg;iwj(Mr^^6S0QqkJE! zl<*-u?0^?YX?~x0JLVB|MtrMR`U~P)`=!o^xzdQw4&pJI-Obc9l|IU6N2P>2e}Us6 zD*qTCv(tKYm)F{viBr0^-79@zQ`6K&-zqRA$9gc@!S2*4leS}q?1I2gk&l5kY?@_{+JKm5h2pG z>y+;nzP_oPE?%d6)g>jJ_Q%WDkl&i7OXX91Go1E&gx~0wXZdzGy&b5EkVAY)ZST3 ztl>%J&RYKRDdo;;zWbDNXMNs#LOBo|8P%fN+7EZ2CAdwRMDe8F?L6 z)8si*h3F2N6f&)Xgb7i@$OHsNI0}p<1UL)BNTkB6@uC*lk!FMbtzi^FYE}(Ph6qN6j;sUHawG4u0pV@+gjizS+x;q z$izsYBaLK(@vtVIjfjD=KWf_g5r`5L*+OCk1d$>qt9aIoK=-Xm*T5Eqsdt8hdNg>q zY{J?XdO=aomh58AZX|9-iX^y?n1170QIR5zgk3YpdH{0Ps#O}FOZ|)%N8CU_%^&x^ ziAbGq5LNaO4n?O6g!p+lyQ=~cr*O3Tuatcg?f-*6H(8uLE~DdVy%f0~SjhknXiJTAT&ko}T^w?&9niyg3ezxqpeyzSOoE;|3vfo)s2Ot6n*&YR3zp%lpt8eC7y5{ShzMIwIiBq5ecyjAu`id(Kl?X zl4K_=cvBQREmP6MCi4HufdnEILGouxmLJ+p)yz($hZ1R6&Y7_YJRAY-JtusM9pulq^ZI49FNhDJ{oDKP@8`weg}X4IhGVh#NWsJ&gFb33yCxQd$^b||MxS$_KE^)lFe3?sFTIsFzJ@oRV@dW--uZRzb3&|%Idpyle>Oo}A`vWvpdtQz zE(UiNfB#1Q9K@jwYGuXrE>=6Ih75ruLt9*fG&fw*bna*JFALT1?HGdvP`<-GG zopZ=IInNWW%&T&4raSs1j?-RZ25YRV+%IkV>KDmwm8cmpbLIPIG-LcbA}uRrz8cS2mC!pT6B-r!Y=k9h-n5_jP}!p*3BWAFA21Q@2J z*|^df?cerZ3z6OZsJz8{6P3ncz2pbA@8>Cy)TV1qzzTvW?pnuKZxT z@z@rfpzS1`hV;K5=?Yh!BSIw{hExTFC>`upC+yXQWjalq(=r5sqrzOAWdgRsm^Yyq@YDnpzf8TX#;3V4pw3ttz_JQJ_fA_ zWno`MjQ9I|{8oteInetC`!;`u^$woHsDBVo8)6OZ9J zoTm2q-qYf`crBhIae5xa`n<&ZLx4(Ph?jfc20nZP>SJ7@mG3pBUlKnj)b+o>GBxxP z8^>==|EhQa{~p!<#isglzyAJy{U2|tuk`C341o9L@lEwruO2E&XS_}6iB0u2uU>Tc zGW!1Wo9gTR`aksEMN580x2y{7>8?_-D&rI&d5y$s}&TmDUk7+HGRE$25$@2kB<_C;P^ zam&x)?Z4Yw6PFN|qOMon@-Or9FQNUH*n=pqx#fskiSt&3*~E&=_UnJp zfBz-EE>3-|U(YEHy#Jz95@~&$`g*_q_uTh)NUMCEoccz;{%`u@ALHxg)HnO}Pq_6% zlD%ntTK#&?iu3g&mmX*TY5j;+r}g^=emn6D{vG%-BGk#{Ck6_?@A7jmyk%g^2K}i3 zsWzzi)42Sg94uEX3UAR|v>vNNGa6wLFJTDzToJWRRJG&MI_VmcSYrI)p^1<6>2S7~IMJP9rx!}}$P{Dv-#DKqp zWnUF8eRP>Du)zV-+84m$l4U!r1Vs5_u(kI(s#c~tbIL5|`Yn(R3h`ISphdXYtLN=*iPQzrIdq_Ag?hfNbwy>N`n3{A%tj*Kd~mtX-2hRKHY z0fOP7S7;6&F-4W({Eky`*n343AW(qI52fs_S7AFt(MET(-Flz40(66b!h-cR{@kW)VZ`CvqLFU(}VMuOxMR1@ac#sZisq*V5(4P6kD1v>I=5& zsYEB29vP@xFzHsZBem8UYnc><4)92=Bf_q#y9jSeq^wGfU7M@9xNKdaSfA2EV?&!P{f&oPbSKnZYT zIE-VXSQe%_ytQ{giJu>fj}laJX4_%viGJP8=M(w*X2}=OCfiyT1~v65rw;h7qw7BjZzf zBM^)GBI6TXQ%$Gg#Xfh@%<`4D)C;y53?njabYS;neY}%2LonMGgUwFM4hG?#S+3=4zH9k|rMr@<8}@~{M~f1AN?v{}sK zAPlo%#hK~Uq6~z$+2DGz;bxa5d`PQ+^ZUWQ+eB&MinssbF3R&T|EAZSJvus6U8+m9 zyj=;y8Z$I79BGfU(S3)lmGPbLc*~V*5uhY+Q1SgoU;p~C@%gbm^?J<&=)og1I$s|@ z83kpz!L&MAdn3XozW}2%XsaP>?>7sJcr!!&WrTI z9XQfVIvXB9_>2uh{Vv) zmmG*_z}RFSZz4g0{gZF&5lj;-9>O!;1WDh#ur6HKzZl`52_t*pbuMYV7v4IA*cD8V z6DPPB-4?D9(h2oI4+3Sf(KlTp4}@)&xETT-yImi z0v13xke8Sk%Zm{l28Wh`T@o5S)>$g&&o}_#Shx@=OzmoSXLHe+N#x9d$#8S5v~*5u z@gS=g;cGAZCZ@tHT77S2Fv)6_{A8tERD4!>wo>1+P()m_bhDFB&yJOfqnYHuc$F?$ zOlUS1f^#;wlG&$042SD>3thC`5Rz0{DkA7 zQvoahr_&XQ-G_$`oJVj;5+&&PcRs*#a1a8jo!k`X%%ww4Y)t-W|D}H6i}Ffe2jzn3 zsLmJ!$nF7^;ASxHsd~58tZBiFOSnNpAv^bJUoy|-w%7_1%l0?TLSzVpL~mbk!C6}y zt$Jy`Ud`r8QJ7oW3B6PgHRp!c&uv#H^Mm^@fBlUGBt6jv)-S&5%7O7cgDaKFSO`Jc zAnJ};N;ojvY#iLt?(FQ2U4Q*$`v!nA_cD!LB3^;)S|tGq^l)Z9|98TseOehrL&zqh zSi2M|`7|NOfbfg1i$ql38d6T4gW27ZsO)C--Qp_|b}u9G+P z00e*9#92d)_0iG&gRKLT@!_4N)Z}1xU`ru0Gg81c$W*)#Ehs|~&;S;^D|9=pMlG2jH1JVX*p9I}moHt>4J@#C72`m-moEOo z($l58LT6ahq7C1;nn-K@+PneaLiUHCK7&|C5J*Fm9Lt0O;Vh;Dg)=cw_?>77LC4{W z5`^8QWmJ=Yl=Cax(wX0q$Yd2`%OGwSgbo1^c`^ZBVJ##b1{M=81Xh!TeVQ=TE#_ev zyPz%5*ds1?QO1Zd2coffEQTXB$l1K|S# z$EqemwiQCUN-0?kF_z2ax=6xONn}Q9am;0bv`9EVU13Ie_|cIZB3a>nR>2QJ>OL`ir|!i)Ha@BWRc|3tiR)wBYapp6FKW9}I_c1Yt^wB!CqsO3B@%!BfQ6Iaoc8m5|NyR2PHn zoYnC+5k(Wx0NJc4r^ALE5#Bjh=_V9)GA!Z7a{!5-A2-`p8R5!6>Nz*#PEGbhWvMEDIoi#`%pMWP z?2v+}P0>m3?SI2qX*At;i6B; zOZoQkO9JeJg8&>;;?4MhDB8(MP&sre-rsHxAGmB%k`ZTbZK0NrMq8Nx;sh8t8+t&A z4@DxW)Zjd`+nv_I-ID>hs3T?X_{!c^B2}C$Sur^FD4J?w9aub(nHweid>*r)F1Z|X zmZ9bDs}g5S$Yns7`Gh*FBhM6V3*le<;|fZScpdT^Sd4`C*bMbr1L2}k!~S*D5Dqt7CeQUF%YhA$ckh;Sj60uj5%$*;Z8_@0ZU zu3)j3h3VyqC5^O=#*Z!OV{A@Q-CrDPjE5nN4x}2hxoSC;FhVAh4n@1-tZsnBfFjx`gh zTo_~#u#?EH0$S#r1KNo4U3A~z3>^hB7CD58@Dpd^0i2v+VYt?+4XSF|JvAP>1(N8~ zD3~y2#wiqzE&yB7Hc`gGpBN9%a=jI7Z$3*0FtS=@p|q*QFuo| zdEi4*jaDI{qo6#vKET{z@f`^rfjuO2j?{v?mE4R-mPowWnAy>+j--o==L{u>J7u_H zC5F1?XwoW<=W1si+TNd5RwkhzP>gIuvEy1g zmyATS1qm@Q;Bf`%6Z0jJh{`}VIRXJdAGGF5B)Rc}NEmUNbqUfLfE%Ce%Ww+5AE}kM zEH9F7o*x*{*)lj5IA%+?VM+u(;{6neLAj8EG2X`$cuctAC zSOL~8iZM76G_g3iv#|=KRhZ+eu)4exWQ~T;9E0B-WFH8>bb@#e5iS9|mw95k`(>Cf zEzVDj4Ro6ISj2DWs<4yoM7(I%-HAvXY_%hT;QXmaq8=A#@{{KJ&e3|%EAG-5>7=IX za=4f(Pq*S$F>O>L@Z8j6M!1?WDu^>!Y9}bDbgVg5s*f-2grKd_4L6s{)x{@~w^k1X zto+zgIn*i`u#1rcwqnF1T6rWFX=U=1K&Mzq%~U#jDom-5M9RCirqb|&=s};t?t%Vb z76MDelB8phgJ_1qf{EPqCHV?4&3JU;Zr)Fccfo?;YI7Q)5>bx8xcA%g=#vVATr#mR z$Ar1v3%kdL;3<^?ZArn1_<|AHPO-Hd)I)a#UlkW@$X|@#ga8=&iQ(Kpj6*N+7V7<$ zyo6kL*O{0f;h# z-N78f1+g9}oYtUNSrpD$dt{WzKO7>;Y<`SmW5~pC*^9#EI865wCdqB8#%%}Bug&!k zM1m@4A#SlBfVIdLUHpe@|2XaJ+(jO_LsD@Ec*>x6JhsOrdi;$P+~t*^X2y&y%bl+2 z59_g*>PzcU#5G5%EF%=Kn^iw#+wd8bt#qIiEzF9%}A9?~1EOfDoGR3P?4CLf46e?J=J4fbP3DIW9i54n>hn9crNS+We*@(qdl*WwN#Shg$fP`a3401* z78oubj^uud5?DB)jx3p&bQr(-qAuF{fldn{J#C*b$tI6)J!D<=N?YRC1P6hLUuX9* z<%A>e@_+y`>4;B54Dy{o`;oc%5ua5E%28N6A?s=~Mn1-3BNSc9w%ZUl$nZAXcvy}8 z5i-CgBkXgs8Vf5?Lz4Vj5K(Tp)JuY}Sjps!jfBs{`A+q|#~y>CuZmgkF=1(;Hd&uUIJqjT_UFRYHK3&2Tf)V9F0{hZ%^|e7>d-d3v5lvd}lknvJ&euo(87E@uEqYMn#cJ7wZv2eB(8^|M6i4vG-CI^Qm z%b*~$Gqv) z`-_0%Ye^B$xRpB)o*`+`KzZ-#Y(O$}M6@UlB#JY82UG3z#F5v(<#UzcoIjMX2Rpgc zS0xzH$-a>-TQi91$HdB5V&uqbr#4$!_?g?UT4Jfm17{Qxt=hKpXX14z!gqiS`xVSW z)r;J?eHzrydqMrEdg(k;l-o!;^JZL)s$L!=#q&$RZx`|BN{ycX6&J+=xF}S;>ZA4& z>Td`BQ}r4*q2JwmQOpAasCvCc^)Z~0&)|%xdLvBFbAX?30De@xS*HH}7OVPxKAsl6 z-}^!D1+aI)k_*LOgc(#5!sdshnoB76>&*;6b3rgu58%coJ9 zJGJtQy-Q%QPjBWuLomrR%EExo6`tjzEu8x1OT8ZnFSCPqGvzJ(@wI)n_acmehO9#m#deef5K?(3{+-MsTAbiORS6d`ZN`HvyXrC2Y^(GznS+c zF%|cl&-VTqqDC5R!5h%=H(%&IBm4&lJetY}Hooebt$o#jp%;5k3qN67QJL?3aO3M# ziEh8nD}^PNU|I1xrs@eCZyn}tp5v!0=tHdkBpEaaYk<=I;%m?{wedse3%wsYoh*QZ zUKFoDRR-9BcOp48he1ZXO@tO)&uzTyzVxzFb&UNcdk=+n(BoieAEejBM;>(Qu49j~ zb;&|q!mDFm-G!*TLGqyv!3~`E`gLz*zt8TF;M%XJPN{nx`!IV8|6baw>woWB_B-sg zAYrhfFje4V+0^GF>;njsg8lT~>({*#x8WZ^ZG!DQ&3nJiexARV_v$2X4zFV$VDIDO zES%VT z0U=PAf(c5#$u+nTNZ_vA=&3$gyub(<(3t<^19~K9DB}A})vx^IQiIYXcY4o=pT+0v zSbDPSIn3t3Yh$rlW#b#zL4?iO_y*sl-gnUS&AjQV(^U8m{MPhcWV(i~DyV;)*RQ!< zjk)!3>qGq@>i^_~Pc8CKrJ26*0(}Z6?ga-Rwxa1bc+-^I)j_vu;^d~7fYdmlS7!n_ z_UjwZx)XTT=~aYg?_S>2od65-0q$lKe1JvNKgR3#xL+N1>yPky1@-sy`gONH=GJ4v zn4pUK2YCHnw;rL`u|T__C?kPCY_8Zl*`J;)Az0lcAy^moo+2Ue{WJ-|U76v$D8@UB z>jRC+Ty^`!W9f;ZT0E9ZjStu38LKi=Y+ZQXTDQKXIda3L%cbt>;luSpqq+UeBb`EeK+N!4*B)GM~7Xxf-_0ZY`by=2s|B{my9|<{t@l($Q3|Mxda9%M#z<5%wqZMNDZEE{<;Lae2|BpbfMS#F}oi-xPzn%qda;ms9sP?3PSWz7+fdl9(W-> zX#vs&L0A*^`Y3M2c(Y#2BSgy%-wqAaRk)vm%NxQN$W^R4GXojrP`t+_43m60_!_`- zWm2tnD@ta5stUP>|IF|V;?tIkrIjM6S!i<9*7TNqXMUm*8XIrGG)TKF*Qmr~KePj4 zxD-dWCzz8Ek0ZlaWyxxePS5AEg+@V^O-PTMsj24h&SJ3D%%eU~fLTC5Oiec7GXbtZ z=zWDp>k%Hc*>{3*eK5+el?{2Vg~kPmr>QBn$Jiqr=rQESQ2| zlPNZ6f8R-d?@_~G0SFRE^5W9R&Z?Y9RF63>L8yXM8*#XO>Y!CysAd|8rUd5-G2;uD zQ+6SqOcVxF5)$jkxuKbCYofByf(*Yt6kob(OLSn=)B-`p>dq7+c??Po%f1jY4z+__BSL~6E0acVOWfSJWDu~uJUcxE{`A*gg1DH10@3Bt{LNLl!!pj;L$mhW~Z8<5#DcGLh* z1Zc4mF+`tH%m~buY*Q4iAT-^6Ur3eBlvFAnem$b+3_{5ETauU$+(h7om4I>0xG!qy za(88UN0&@(G%%PPq}VzBxb>tW-2-y{9xg<9vG-jdn7>2vuuDGP34yO58>bxB2#Kq( z9As93wOc3KY+9tXM+&rlUL6$^v$==vzM#iXi+57_O~57rCN%2#tblZ4vI9??fg~9! z=fqr4;^uY0Ao$^;VV5Zj8qt)|*f~|`j{AbiqG_h}(AY#1!ci#M3c*ab9Pnk3b7AM` zp-VGB1wMvY@T0Bra!L*x`p~!)ptbV>XP7zo_o$Fhf+O`w)q_JrD}$soDfFIWf6tzV z$Y8JIUxz$i+`n$KDGUdW%;pN*c#bv&M+w>#ZYeU*;kGj4Y+P|q4)I$YH*)kCd z3Kf2gJWC2h(Oucj*wi%-Uggu_9iT6t-z_e+S)w+sx$!7ZPp+MJ&|G=EWzBun})2*d~$#P^uLYp}M+m=Mr$G01%ha_JOdO zG?U1A2e^dG<8KBlAti=TVV_YDIi0sgLs{QS_#TzJ)QAw+{%?NK~QDyW?vJUxTbap09KOp^bKi)-y{BF|Gn#-_k@RFiQY!6168=5+R?Lo4R42M{{HWH z<;vIl<>+5TIn~Rc+MM^aj_RqM;&?b={PM0%<9MSx{?8&~=C}Ab-pI#`XL**l z!!sWTch92C>dLS8%V``ar+Vob{vP@l+kCwi__$8a-2UU<58*ccF3cCyB-ZmQm~Tq_ zWjt@??K7Y%w;^Y+%D5%GfM@Zjh#;QyjF^-^V0Et@@{D@r4X2#y5#fQ>gWmgCzh0B} zy6+94|GU`-;PC~j7VYpXK1J>5nfHIMR}K-US5Ez-ocI43uU={P>oxrt`?daeU)uED zGo0`CUch(%g52UH$AbXRhz&sfa4r$m*pknNlK<3c}o#{UD30%KSH-ECE zYXHSz;l08G5IMk&Lg*rB1s6s9I?xb0zesqNox`4kkyrsL3tT_$WlHo0nI<>}VdRrA z1@$W-WGp0CG<-fcm~L)u!o0h=_1VIBuDP{Q7|Y|o_#%Kt_)|F1Ht@x>AfQq8d(pMy zQAydB!AyOn_g3L8!W)IOkmQaUPJG6jpdbzlX)(RY3xX53*dJ#@N%LFOOv}u*VlflZ zHKUnEVPx`c&`+ue8QF}6Y()(QLy1bIwskm*!N`E%SzI}F42F33dxh`N$-t2Q6u(8G ziW4v+{+y72n09!1fXE1tOt3yA19CvA2s;fCUb=fzNpc%WR#Fwj%}lTaNwcvkeSMYd zeBgkg18=_wWuh;U2+LY56|jOJuXD|INDFR@W!w2!w)5psymQ&btHF3V5-Uf8s~2D1 zwiDkhMstl~G~2}BX>dQr;OhE4e9-p@pQU4n|B-X;zv6behfTAmKf_lS&b3d|>Wc6% z`7QR8ID+T}hlJ~v;cqCzPz!?mI|UPPWCo7eED*Q@=v5DDI+DZ*(2)hNgj`>QbN>|r zGYAfRf`P!DR|uBi7c4(YnQ$Q;`F(+K!d2TV`hxiAW++57lF#V1YE> zOCtUQwq$H-s{aQE9h|n91`6F_Rim0lv05V!YB?cnA;@6q(=N`{i zs)QQ^+$S8WV8aWL$1_$p4GIWLbuo^R08?L>N~=PE1qh-Y`*fN+X*@2NL_O@;DS zArj7q@=-hjAdg_ruM_VP2BC%};~R9&74rbri-9nKHDy@>P)gE6(%#{r$?>7t;n`|+ zKnRu8taou%Ks_fWO}>MML4KnfhF}9)R}?^7RH5*`q(RF{`=`S2!HM`xqxMdjHtlEBuJP2uQvUBK>Fjko*j%lZ0PppF~WdU&m|j z=dZnAxE;S4FHfO7C8X9KX(D|nN+IUUd3zbI4T0u=G283Zf*)N;rtAUJX}!>b>-Hi|j_x;P+KVGe8wb-q0r z>!v#<%?arjPJB}&i-ykw6g<9c$bX%%p{Ad_mHlCLD!}4&auSW#oXM|8FFC*$5SVjeM*xxoKL2fz=0x? zw4s>4d} zkKaZ7br*hj1q;c`K{yC`;nVn?6^3C3!9Z=qp)y2%N2F9;!EYO8ZcEVii9q%t;oB%l z;V%PuKtF=N1NgU=`EP$B^WXghj5SEPf>0fLP50G~wO9=<)b-mctgIH*a`Bju?-uI$ z8-&7ew=jI0kj}>8x_NAZ#iHS8EPO1&!ge%l-zM0hs2#d(U|bBz(GcXlaw;mPZiDe| zL#{(7eAr<65c8Y5|7evJ1=A{;M@vigXMKrS9gsl}sHYeI($H&-+aQ|M8z;fpX*NfQXR`6kZU0qxBXd~L z@-#2$zXNtcCXvnbq0Rv}m<$5i0DQ?x_C2;|Pc!tG_SQf(wF~nGpZLlA+?<2v{zp($qo@3u-PeXR}P4>57 z?!UtRlzpCkjy;L6#h+q-$UXs`?QcR?`VhO0y_Q`KYm{@r!ySUn!#ta1lj0=U#Yxs= zb(Uv2M7^27SSE=717E|0p0FYO5GuVN;omF8ijrOAlyeo1m8MN{zgeqTEjOSCes<2C;9f8!77?wQONuoGr>=#qEcbMe^@Lz z21?GfEBFXrppQE>e9o{l$LDztKuigBhz5@TYBa;qG0xwj9R2V`76 znht(2XSWd^k&TK!dTU1w@Hf8W^z8i?zmb~*lcjfKQK*A{PP2kY=qG~rGN4W(Lthn+ z0e(dRS5|1m!nM2}i1~cBVTVaZ14%N#Sv8a@vX>y9n1&!?GBi`LVbkSMA&?jnm{b3>jP0zoZ3CW*EBz8Ys!jXmy9u0md1V=-e zTnN1x7-7&CG1X+j7fcKW!r7VyQ%dlakTB3(;fW<7_7E&S^Dkh^O4x!v5``>-i%!%H zRW)=w5lcrgWd-I5kQ({Y0r2mdrRDNbWMqRmI<$;-DrK8~GZ2B9s_c)!%NxuN(nN)Q ze%o)QlBQkA2N3Z<3&Od_iXr`!r5Z5tRDBW6N3P5;=M7~8**G{O!;A--Ef^YWq3O7V zSMy=YfrkabD*NPk5e`DSTByTS%ny$mpD(1xCPMxcQX;^eL(>$9B?C|`gAPQTw`LMd z7k(h%vf{Rh)V|m-mQsz{kZl!!4$yQLX3!nPPpI6u|`8SC)+UWL^%xm)NsLy z)DkES6@uxpJd!wJyCpao(KjSbf_l!*29cVEVp-tBP&!4UK3fkV{S!LG|AEJYcu9p} zDBAJ$-$1oKvf@@PT&2q1zRBUT>2Y-s9XDu@7n5kJNJzzWfsQL%bhd~^)&bz~Qk z0X8^^^c~s+24@|DLMZWRCo=&b+`*6;9(**jVS{OhYl%=S833yf1{PioSbm65==9KV z&($;}h1D%H93Xk*eW0S>1uA-{{!vBka}Yawe=R*JcAyx0QTg(g3Y!PXn-lyDnoJPK zA@+;-9fc7o>DECs3s2*B4FMg)_&orx)xU&>8QNwD@yLBi#66{xMvBPU?+RwxN}JX( z!AhpBqr$Aq$7vdg7oLaACWT_;qdb~Sn%D9u>(Izg`!<$FvB)&^?9fn!2= zpu)m82$jY_1=LEXDK|UvF@2O5ZMr?4y`a1a1UZ3ALb5J1h)@>jUSG42pH3(X2PFYOy99 z`Ea8{+}@IlL7kF&HbN0S!fo( zm0WfFC}YwYSSNyaxEfUdcYwPD_B{J%_8rJXzl(o=%l;Z1z?aw;zymx14&ZUl0eqbO z0jxSd0t?L#vEN|723zhs*xT8S>;`r%td1^cm%?K9AX|qjZzo$}Tj1$3%0}1#>u|oH z$||e?-XH}#S3evmi7R*+yvlP(`|y{-UkG0kz6h)2#}LQ(!@_R}9~9m%+%LRGcsG(b z+zp||9l|Z(4K4>~a3<6Xdm*A&gS*fWuyBjx-x6l<3>flfgi((lXw=D0p>JuzmHM1~ zJRwgGmwh=(JZg;C6`Zz2;6EcZA0&X+F0KA^^Cv z+1!;kLzEpKAnzE%kE7ICP;^E#HWfI{_$T`V#0!mje|TuZCyr`bZa&=;Uo3lR$`dDc ziB+VCBhKseLDZuQ*8+o+@$tC$4Z{zL)5w8h3#LF96DgpTVrGs$24Wt*M#vK%iN*{a zq>c^}7ZfLvYM=)FL`%V9#t7#URyt$`Wh4p&^#M<7zbWa-3dk;mI4Qzc8+0ltaj7_x z*>TNctUjDcl|j&0l4NS(R3RR(5=l~?E>nKtR3#5HrGV}WMgsxxZJHg{EIa5!up}bN z(0z8P3%6VNy2GMNi&<7Up@Ry>mjg!JhW`_0r23IM+loR-5HU4N(euH4*6_t*T09)W zLlCrb5I)qZY5B~2syv5qS3Vo#$LuiEuo2B!8sZZB5vW{`Rl>f2Pc;)d1q%{cCuUfn zcw>lAgE4_-hq4%r<4Fs2B=pJ98iT09R>2Gtan3VUf1ue&OQvBeA=8Y-i$*RH$fdK0 zpM{pX1lkpuO$`jU2nq#s9n@&LoUedr2KB9KzFfSSvT}Z(MZ62KJ}hEraNw0n&3ph7 zR3x1vQcv@T{KX;&MiAJV8UUplB{CLi;*?Y=wCk4L)wRV&I^jnKDv*4j_p_mRfm(F7 zl?DYIcr}9l)S^}}VfZlkh_2Z_@D!?|g&}?SYr1WKn=`CT z+_GSR3F;Jlk-t3^0a1=2N^sDVl@dZgNO(CD48#Ko%Zx~-glNx-si_8{w*|tb6x?Is zp$70HA9z4YBp1rJ<8b7ab1@r%zOkdU)rCAh>DL1V8?mBkF%${o38+RStV1DU8H#FF zV{t@v!%l%IH3=F3nYNm$RRAz>sYPfgKG9hHNBK@HH$0S%4ivHqvoX z#>`^@S*crUObm&!ELH^Utjt0kSaXFmxVUObLytvdHSG^kgsBIG?+O2bFzJC4_3VAE zB+M6}!){0p{y_k{XR*rT;E()lT>lvFJ5bXhL{_<6W5TFHK19MNGRH=BF+@9px|h6$jT{0gtU#neq1wn+eVZH7UQ_NApg_4(&~avT^O)en6nw%lKh_OK z$O6ubbcJAw%sd++VOZWm%-Z`5$9^=lTW>^v5W+k=ruhW`s=;!5rR0Axs$#!{~9Uge%IZwD8OCtBpxn7&hY` zmk^9z9Lr&vmYHeg5yalej!P+IF=XR2Q&Re}+2%CM$kOY8xRew-6F4w=6h{5xmGaf9 ztczE{r7^|CGbqYjl8M)-K$=%cuT`b@NoT@%0LQ{c)bNAYhSQt*AV`misAld&J$Ss_ z0`R3QE1;lLI~u^@gQ6d>MuG3g#NU7%c-TD!_=pVac2IsIIY9!=QkDyDr65ZO>NVs_ z9W4-JgO zlM#Qg7{WiO=0zimC~dY?NrkZpxc4kQ7^{rLwyDri$>ORYlb}1qGOLLX1CJr~ z1AGua4V=uVRQMZ|Mg`*&grwUXNyCN!CzfbO*Qwwx^sK@;9|>GRJ}JIP1mOzAvLV}< zd>E3dxDhR9O~t@>^1z0KFB=Y~#A~0}5FCx7i!U?6_h2&c)6nxKi-AcsCbLB)4C&7Q z!`yqoOIDZn|L1$o%$YN1dY`$|?!8lP?`_N7-FvsNoh`8CE@fGkwg^Z^inxd@A|i;v z0*as}n%Jl+|BNT_KgdCkf(+)JKWGZ3!B4gKssZiu(0d3lZ*`K}Iiv+^2HdC1B|IH&T!4Tb zKwcH$!aBy+_p*)>(ETvZ;_uJ@m-aU(3O?(ZRxTmgPED-(n>l&DbMhZg$R%VzyBodG zjZdQ*NQ@T;?qKND^^EP1Hk3`va?5mf4SJf30oQL!M5l&4)_T{j%})Bh1^>>My7D3q z76xjT6y@K3s+;}Gl|0XtlYb9 z^~NCr`6gff){FEAEiglS>Ee+7X{>OcQTx=7pKb;^s2{uRtb-)Wzt{gtTcd&NHHaW3 z_>2y{zfefoA;$NuIw3wQmII7eByVty3r#pEE5;37#<=f%mz-Z#H!E9&f5*q*6Hp@O zE3&(sd8%XeKs*p2%_iL00T47+(86fV9}Y$XBeNSj*zW|a3~Y(nLE9hMy~5)e=#Ti* znLu=~-wFdg^I)WXtWsG{kpA)rQk!7R3>1fUj913mF-cmU!Ku#W6UC7YAppTn8!JvM z@0=V0gU(`>|G06nx=Q~71MxX^zdqU;2z}HUh{k+lnfjXkDXeO>na<`A9Bxu`cL+Mm z$%t)fy{e~)&Nx0rJjPhY*}%NA^VZlPjj3oeI171UOcWbev#H!02%8{*UTH^T{=YEnpqhR* znb$)^So#S8YpiH2!!dmicFe!j?rgGaNo_{V@O<5xLf=*yeHFO-jt8zGke~0VI*vu)`}y$hXKhjykGCy z__7r*`}XH{Vk8e(t6uZK!@HKBvva2?)qTBIf0p!HE+Id}C z0>IHf)6*}>MBDKE>Jo#&B9ROco!~jpkd)ThUd#)qh6nnCjOb*42t<#|l3ejj2odAd z+^Vu$Ax7?2br;7E3*&iw02t2`QE_S{+cRF&1^>vJq8&5yqqY>aF)KY$!(-FABM0ZHQ0dWEet%Pg0Q(QHcat2w)du z07j9Z89UTT-Wk%|`njDY@Q`8K*8(_fr0f;Gfc{$4tPMUO(Sqi~{($;ld{4xd27L3= zDaOO3qm6lbGOB-)j($^JZk)By(X-r+zC?Qqpn^}aXyH=1lhg#_Yh~d&eM3PKJ;{+t zoR!O5$ijUG9xk6gb@rs-jpA!rapoY>6O`>O)n%))8}GWV2UrI*2i1Sgo!drsBRDwS zdW-hY`cri48MV{cztAn=W{lUc_M~x!_8)|1JrDCFX3I$*mLX$_G@0iL38DiyPXAxb z8&)FxB!P5EfPllGnn;`K+rN36>gXxj^lOh3v;AMcZa))FKclw#Aif!YBJw!>%q0EZ zXo-I2vGx5NB_K|iIpY3k-;~)D(NIkpcw`;3?(t=J_JKDKY~kZ)X^}Ub-th)Qj`sNJWqKV z?>Ja$R$-;O6;UP$%R|=;$S1?SQcLLPsh2}9f9%l9A8TKBhJBplbL!V<`b`Nz1MbXQ~b>X+(jZj8TBc7`*)AsyBpoWp(V>)P@Bx*54QMP^{00_ViY4 zHaJ1v+2t!T9y8`EPLD_NWyXicvp$J{3{tV-T<5)hjNQBWUc}(ad$GgGD^Pvp6*ytK zu#Y!rA8>}_9^#09q(9DZ{2RbEqn!RnPW!BX(>|=P5{^xh`zrV3Ycaa7 z)IZ9-Z%}@HtVK2SG57Q+#`2eTT%T5c ze<(o|Q*am1fx697@dSg<{lq5$_suL8G!+XXjT_BO zLRT6W77rt7iQ}+%VR+4d!sF9pEqUB!@;@HhRtuQ%xX(&s18G!%~J}dddyx@BB!y?u%aO=GM>6RGza(6sKjoZ|H z>fbPa)n_V8M4f#i>KqhNXNS_r(YCa*Dm4>+;q$IYF7GV=!D2<&c)H_`3+(s-jpNKAh z)n179rjKh6l)nfTIj^;lFcemP+=!Ya3&B55?vpsKe|LSNDJP%lw|YlsxWw%`Q+lCv zCjSekGdcTc$`wvYV-f?PDD-YNlYEM{FWFFB$lsVm*=(C3JBe7G!1~!)=UdD^ZIel& z5|mS^jn{1TI^XrpBt0R~CW6anS3BR5ft6cZRWA&w^!jLa1xr_OGs#XwUf|v%)Hz7e$BkzWZKe=8;BSEzghwMT(A*HpwHuy z+cxPCNylJ;+$}$*L%DQ#WaV@g4~?>{uC-&4xIX~ktM1L*UcCIS)B5&oTM_jewkKeg z4qQ00@~VUF_>6)cw*40xH)vlW&^1D4;g8g13sj<6Xt9|_1(lFwJzd+}_$mpezi@J) zmd{Mq3G;FZ{R&= zQ!jJ!?Tx>uN~6nhZ+1>P6jrh@P3sZHQZ*z!sjU71$}qU~u?`XN=)UFvByDpAJeGlL zqFVq7dN;c(%d65_3_r=B*QrG7>`8bxveeSEx?{i=6CygZO7e!8f{RFck4?NaL z&@9C@t#6!s=M(eKYX1sazt8&S$#>p7{}b(ll3rTeDdFSUFe@K|kMoxa5 zlgHl)JlPZA7Jh`2Pc%N-2uid16OEwT?0n;A_ymq|^2ydSY1Vxvbm1a$_uj(EAGFZ* z=xq~S?-z)Y)9PMMexmW7`G0Yno&Ohi_>zs=01A9JC!aa_&UbV2b$vmj*2%>wdq?Bj5r+e<5?z#7=v(=v)7jo|Fm==zQ)?3NBz0SFBoOJGTwOT!DoWp(J zJn7sp=Pq#0{liJ;Zc~qGKi6N&eIIL`TY&l7g&X6`B%rXeK%{xp?dPLzKOa}uU?;nR zb5Ag3e=g_r$6N#x?U;H@jTx&r_vA@!z8Z#=!`8~OYQg+1zyrQYeL{WK*u=R{aPIAH zn{RiY_g0eGZ#T~6+%v6n>apgzA;ust>6Pjng>y zC-l=fr$5$wzmH+Z-e>IO+$TBr4!1AwXuiAtr^*k$2kVJ8kDsF*>OAdd&Uil6I=3*M z+tlmTr;H8U_cZ4ocE|H!x6NJx@(yDEXEC+LY++oU$1sjQb+T&;{wSAYCr48Hnxkci z9sT+2I8}0|GxKhM+By!fsmHQ7u5l zi-3)zH-fKCCs4rWBbygXx8(Jbm@Wkj!>}X)3ebp74uu}tuGzNdP%uhOu}2*RMWS}M zY19Sro7Pc+wEY(R?^iVZtJ;+8IG%p$Hbb_@4tb7}af`5~DS{B5r}xKobY|D{w->ZS z!57h9FxY(iD1juryl5M}#X=a%&qWuUckceZyLOzme$~pck$ynT3YQiy4d=rY^Fcrh z)?!Znx)WwlbM5k8SDkJCGMr#MaZ`xcx)8zVIu<4Bz`;!dRUJo9iK`Y(=nnQ7mJqS? zBg<3D%U1v3rD#AX^xRJuetE*7-|N}GZD{uDH|#1*6%qv--y1?61+xQ%j92juJ`9d*&W+_l(xX$hq){cr3g{Am zbBYcg*R7e&FWe3Vxa{X?$F`gAh&m&$C`+*t2`g>?-rYO5Y+5(FY;tHoeAu~6`0U8p zJ_oWQ>_S#7i9VS69j&^*V@TD0Z-P`Neg5}7@hg8|6 znEDvLn{mo|?VUNJ6MMUdQn>&@q3JT4-~c)6!fTn{TZvopvA!%z9YQ}>&_3c54nZFu z_2G$~nj9JK@9nCAAD4_pNP`EO&TfwGR5LcYX+@Cuzt$G*GTb_%qNh5h1`zHO6iUE% zdmW27Gd|U`<&rf?1Go)CPi6*+9u-gfd^ROx;&Fjda) zw0sk>Eh9sR_e_jh{(w26V)=+KN@QcA%{%`Q6)CXO2mACfpLK`Y+P(IS-p)w^+)9nN zu-|^jeiH^U1A|!HaVt;QY%qXRtmP9no8*NpZnjmY-W{iIX>p$|HX{3M=G2X}w%Dl~ zbGBHk9fI4QZ(osw>@H#yTf3`RES#Fi7Ym_CR;(+suf(7NP9JMv>960>E*rF| z`tmI^4FmMdlV*9X6kU3z`MYMO?*Cowx{GuO_z0MoD&YI&-?IF4ziA8v2$u<(zx=XI zIp*Jj)SJK)tp$}j9QKic4ON{rM94k^59ce ze(C|GZ)B)@s%Hwbcud8b2u^TWhmqm}#LOkUb80H%GqLz|bxmc`B>xiS-n1P#o3G1( z7t5r}dKcy~XLI_#G`yzVx%S|yk=63?Z&s4v<@KcvL?O+2je)Kqz3ul0P8-RMO*((Q z{PuJFS-C>zV&&b|Gh6G~v$3!FVP}}Vv2IEoD`QQ0mNB*C)9vGHNir{%u(QL*kQvK_+AX#b4mbQQp#ta>C%Uz$UrKLTXnOu6S zS0k>=Cv~q+*~F3?g~N61+pDy5&fa@?-{DQCt({pmIW{uTCzaNScif})gj@=|APc!+ zos%vhmiQPEn+Q;@bA{t2ZpvD%3$PVB_FX5T!p*@D6QcOaSwxE{Kc8%yY73D$O9VSR zF`CE#w#REzyl7xUSGd|SxN`a7Rk2z;S)|4T(T$cw%e;<&V)qc(lmVhPf*zHb z8jr*xfzvj3O_$n+M%o8=_D&s`+{rf0V$n2z`2)*G@UORVyS|dxn~*lAU8dcn{qpf0 z%JPa_C25qz>Jr3adI52^H1Cy~9U)}Y4qT#-}nX&82^x@)lLehmMOljmb_(Tb0FXIB0_+dlWZndF3uM)-3u>2QG zNIJo(Kl^09y&POk)zh>|vBo)FKJ$Q-(IC|3n(AP|jbvdc!!55x%*2?v0!od1vRwZl@# z>sjDZuhQShV!mE`a_eI;hI_5%HIY;qZojSB{;M?-J#4?vX3L-$gD}Kc3rjFfL*R$e z>n*FP!UrR4;)evNbKUWcU=sNCTbY}w%ND%unyX%V_~5zc%m%1MY(WXLa)Wb((7Fn+>?A7cxg?pnVDB*WLUp-DE|ZNarz=kI9**Gj7!yY`t_;28 zicYzL^J%7<`?<5uk+Ni##RBS}1mLDZ^KS|U6R}z~a91!(_Dv!fSXX}g`VAxsp|VB{ z5GYV(Y~UL1OGLaXo=Fjl=DV}END@5(%CUq^&X(m%5y3m?kLAoU+bp+5?07KOQA~CY zz1}p;0?BEqHxd{FYC*ZC{188%DUAjFxlpV&l_y=}$YA@}j1F|lbq;8uoS0nor# zpQ1KZ+)HRIhym#jcUHm#Z39dJ5&|N7weg?&7;zmd*?;@AM_nqu4DAIxQkDVSgRD19 zFfev7>+vJAgor)BiK`YBWbKgbN2g}_Z+5Fw!mF}n%k(sP2>Z5R^qAf}jmAk8!NHC) zWv;^5f>$`At z`Z&A7V#94(HMV)8FWt3zb-i91pE9jLZX!kAp)aywYHZ_pU#2vUU^VmYv57XvntbiT1a{{y(^oPIAW{T^-m%$BXaQb>3k#162>t2L5k5ZTnlg7N6s z*B;sqp%iEZHlggD*S_Y}$1cC8%%pC+XXSpM^uuofQmL zYxTfu0tsgy<;wYFJVnq&G6pJxwT#fVNPF_jp|}t9l5B9adrv-=jMdKQ>D#hx&||FJ zU&-|4q76-O-B%^9MDCFd*LbS&56Dl~F&BC5B6YvJ;Z|$ZgYa8dYeC6m#E|53Y)FvZ zP|F?}Rz?tOstp2~K))Q(0s+sVh-);&7$qSXYur{KxW7R&4?BieG3Cyl)XWR?!tZx1 z7_7inf82&dCHSrTgQo3_%dh!Hl-?kl%pIP9XBSfb+)TG?Q$6q8eS3E8KrLJ`IX=+e z*-^Ntco7y=OfF1FC@nIbD{f7>#K8wc5z^B91sRcLEKI}|_cIPDg6x1;=&p4~(051> z8-rLe7CSqIqwIqwd76`u4hRN_`%2}4^Pf2W_u0KGGKp#`+YvU~(o|oBK&%SiB zJ`lG%sGAUO%T`D0)pWdnx`#-s?y+QMu-ZOKar$t$ZEUkz#i}Okj=kj& zA1bhRe~iSS>-T8W+7@lU6efTmpG(f z$GV)EL6uQ+sZ5iENJP0~gmyykIPFNrlqodbIdG#)YRCP;BCU){_h{g?fmDS&{^7=Kslr z>ya`t<+aEb0&rDmLVHDhrc&~mn=QN%Pm`PnVP7#my6*b zlIyyr%~0LxcIn@XpwcV}6njmQy4{$Uxr*Kh!l>jfDGcSz9SQh|wL z0QGMAPL=!O+_RkwTVA=@ghS*Kb&L#opX% zfP^ApovWhVnZn>tghLDmE))&{q0hCKQptQtI7F?RqeYj#w^NH@I4mVKyzSNRZohiX zx*JaK9PFO#D|M6m?aZVzksU+1uHN?a>DSGUT)gx1r8=40P-@-yaBJ#MW9l7At2Ot& zQf2-Vm3Eh;Bi=Eq&%vl~)9;6Zyhgih=Ez2DPQG(V%)$x`=nw>3UF^4Dq7X@v9zkVx ztenB%!dJBRL*Y=sj(Qik_g%+c^~!6my6A$#=bg5G?aZ20gZ=edwWE*^zb5h;hmSX% zKeCUSa*V^rCuR1?)Tl$JT#Cb&wrs0q=c0BAp{UkP7Ci01R`?L)xOqlygqsG$*$v`v%DBauAjeI^TfDH}v$!ycs4$K=CR@re{JTPxD+RlI^u!(aQg?o^x;pdo+#`;P(jPb$&W(zS z;%%>o1HA*GHRnwXY(Ia(2EsaA2=%S+sjMHhz{R~klhIg)L$I-#MKrb2DKHj^&+aHh2SGv29n_2=88vif!4?6>x zCvNEhR{$E-Fw7XHE7m#=SakV=jw=rM0z-n8rOdeBkCYq4P5cnj%FLL16aG69hF{!W zb2FW;Byhp`=bgK2=j@tggM|x=7cTLthEAFiR|fc9PtYrx6C{{{Y@p}9e!}mM{dN=f z{e=m;ZsFVf&AJ#HoAK0xy^0xL5*v6|fH%V@TEyil+mbM^$)A zIXCBQSVQ?V_Q^d6xfY7#uefDyrn-Hb=rd=Yv2AYq+=^vmqu2ndF!@w?Yh<0Xi$Dr- zGSn7np&{BnJB5vVJl$GQNZhIe+<{he!agJ0-ZAMqyw8xj0uVZqteB@nD1Y!e*)Qk! z9k)N~&B+?v?Owfc`|;asc=?$_&5d>TT?_M}Yv=EkO=G-v$rfo%(F5ojzJ&gZC3|fC zzKQ)~&0X~sXwjlBv0t6zZlnp!Uf8y-W=CLhKyz*l>0p|fkZ!{->vP{4r_;J&O11#`|S}2C`1gVEFR3T3ZgG&evSQp zs|E;+1UVnUOysu@vil#z8WBKnB`s|KKBb*|*1p60&)>6a=jm(LtXz&&wVqB!f|N(t zyI|C5N-j;CoW8hG*`uygrNdDU_;rFIPpo(+i=1Y{LCk8xa}NkEHh*e4hL)X`EOQhh{&)+ zlJpGy0>709xYcGbuV>_cpo5o#BeM;h%A2*<%p~?Q^dtngCE@^n5)n;!flGS3Pn-rZ z&N36KDS;4%;!Z(+rhek3%^7nIx(gT1&E#s;o36j^nu`fO+H=O~TcNkZ)thTKOC*BA zk?9k4Al3RZfgTKS*woa*7q&)IHo=-C6N7Yl;#3lA^lMI~y5O5Yrc$oxtAFc${?#*5 zVAN+n^LOs&-+ie$zc+y+1fV9^#WLj$vsfVIWo!G@EraG}^x29*xF;uVy&6Eo=?ON@avBhgz#y(L8 zQ7hPm& z<*+ZL02|;nQ*qFoQgRNjmlc(4i5vj`7|?O~=+WuHPLQ5s2)WpJRd~9VtHdMRXnRu8 zL?Yqd7_Lf_Av{{m7BN})RdlD{t5)N@0wToF54^K9VTa99{+mh42KWe;aU5F^f>84B z^W9$HZL!ja1t4f-qAa@YF024%bs>=k5lp{!?e3yg?g$05`E z4}@K6+LlDOKz6Fu`UAJcGNX}5Ht6l{@+Nxfp|JzY#&-0Dz201@WC#0;FELa{D$_l9 z`ben;Wi{~<26bPy*g0O!wDnKzp8rH@_3EAt6RDKB+DwGoM#8gOOU0xw@cY&N1p}BV218S8SEsT)dkeK_VxZQ!s!qYQ;UvD&_G)*v*b$2l z_YAEnscrGTEg13>nIB{#%;c`dBl;KgFM=_4nOgU;OU?pwTZ}qlkez`ql6fv{QoL$- zEhV5;0t5*Y^xaAT1y1p+aH%0BiwyuJ$BDO4$Yn~oMa!eKvs$AP4~*%kG=Rrb8USwZ z`5JH>0_0yVX+`9-RWHyAVQDAy;-p3}=l;sKIk}l7-Eg8UVo{|X*uQVj8N1faE}t41 z>Z-Mu^SS6{vCA-(L_`=6QneJ4?N`JTx~maaIT3G85NlJOXFEvR+BaPL`fZ~-mKDb;mnWo_Dh$Afjzmo%ZxD#3WMZt(@}r$& zIe`_#8$VW`(q9Xv>b{vX7ro+ulG_3*ZP=PD3!LNFG}$Fy5%_uJK0Z9gLEg(_ko3E0 zX0^7KYHV%DQY}Yz)U~^J^0jp+YpGumZfJ zj%8dBiyT5BhfH--dP`evPsv*d;kNPk^MSU}F5d@1F%Q14P`N=q)iLHF_|9bB_TDDn zZcfaM;Fs^*H`_J=s(GdieC5EEWB#(=4@>h{#i2aXZf;^tR6c;$%0`AqlJYsQEM|DD z6*o_3U>H`|Vtd{|QOiGabk;kyGiP?aatGCO)HX}RSLMZWErBVbvD!Yc@gLkSFz0N? zKrycG;yz4)5Q0`nE0WrzU$Uo$cW}BX=$+o^D;HCDs8qBeE3{#KhVe`5R3q8&hieIBHn0$2+m}wF61^cG@3|smZMnXhRWV$-dLM5 zs;PK3>Q4myJwvf_EfWkRW94O~`PapII(%Ui0K-nF?fH*|@S-iX!hNjRn_71BO_$bt z>k%)IrU1Plu=s33QaaktdE#JayP9e53TLxkkX)r&w_$`FH(F)>XlI97KQLK9s)09Q zGez_X8D?i~eobnun(OY1Prve&)AQFw>lLX3eJ*117jZ-!(~h}u*u7u`B9vXtDrbp< zfOiRyf=G-=y%)0&s3#T*hFh|5pIl6c%h4BcH6hR>Jl=Nn*6Xgh;_}Nbz3_rP+t;ib z?Uewrc$5O8$J8-lt^@)J_vD`d|M59SK*8j~cNPP4$v-*cEC~L}R037&Y?UV9z$vZ} z*Q#76Ta1rNW$}w++K^+e<=(uWt)yeM91Rq%6Bw7c|1uV}0+mO;A4Wr)_GR)RmUc9l zTGO5`MS>uL#bd#uuUA6mW19b&l;B&4TDFp9DI5w^+ct>1aK2iPw`a z{eB{uOhkt!GW9N2mBWuYg@#$_jZPhI^G6BgvIE2NXRfoaWpu|7YXB?#cj|2fqV3fV zX;%m_JZBvc3RF>0NY03KcOXcyS4?IZ#p)Ph6Qyo--w_Ih(Ze}DOo?kWy}Lv~J#xvu zL;DZy+%Y-=3}KZ5qo}5K6ZmLql6m1Ddr_ts;aBR;z-JbY@m=PXrORycPv*;+mkE)T zqG_T+otl^LSLs@P|_Y!uU`P=_lB&v6x5SNJ;I|zy>_Y zRLj7IEwwKq8TOFq1ptnKpqUJs#tN?m8tmxleV9xWdT^|BFjMj9v&IG*#(5s^DTe>f z>ltK-Oh=3@cLb=V>+9_F>)uB!Z>(OZOq3W!@SFhk!a0V^3v`=KDfZyYw}UbD%7AI* zyV`0%S$O)qo}HzEY&C0m-(>z6iTq}7sw0`pGC8Tnf9bRO^+d&srSLtE7sNV%R3vi9 z3Zif+A&S|y6t@0eUJm_u#)zY^=s(ryaU}CRT|=!$e{cT3|U8Qj}V|lpfr* zZX#YZmW>vt2E%3=q0y5GdQ#rR`u}y(ZN^;cewzC+|5Z5{8Qy>WY3r`tKZ-QWY_e5` zGrnlhZmS0Z!QnG6Uwy%ilWkooe==^_14)7`{c$BWMT)w3gV8t3ANd)Bo(@s|_iY#k ze>L`}@g_LNsiq@(9Ak=N+wtoAK}v3t7;l!1}gcQpkR3CR~>K<+RYffl?{%sI>vOaNT`HpLD&@lt{t&;wb= zIc-FZco?c$C)@@)BT5;LT9J^QV02(6;Wk2VoN7)fO6v;yVZhYin4Sj=&%GY-t>fNf zhB9vShILQCb0j$Xj*4`zFrVJ zVOvxtB2NpArh09XzoB~Y3^hmY+HTSV@1PXOB4!;WIms2etsW#@FW$R z!ufYO$CHVIDz?5MF|O0@)d$sOJhCXOR6|~D<^)1jK^WGJgQ7MXJE$b6MT!wb0jGPW z>o{sH2YS>DM_lObE(bbHeO83r`E^Tvs1?p)MDr-VxA`s9#^9}M{3~5~7Fn~P^=a2^ zeN3>G>wsS9+La8R7hnb**9*SRO9&b8diFsqy$2C)J>DJpnHm>rcl@gB=4RT8MaefT z_7!_;m2d%EbvGKu4+N|THj7c}?hr4$kL<}MlW{j7_$t;!efSSENqB`Yk&|CH2?6|( z0|$||z3TK+y}QyT8b8-_>Z^oFnI8ed0I(5Lo;FouIoDc(@tD_%GVq;lgVwLEV-wB4 zDlE~K{O|ptLY$}rVgTBFA5ez+fDaF_U;TxNEYj{{OHCj}<^b8r@`S9PCwSdgFgQE#W2VeMmf zkvhFHATu68*SbYs{qAVQHq_&hcs@LThEiemRE+x9e((J904Z;~{2pJ$e2|fN&{y&M zKWcUm2;}{!%9OBKC&y7?5=wJgstW6`u&EBq1n37vI&o-Lb>V_VN{{GediUWSG+D6Rvjf|6U!T(Y zmiH|i8<9N2FtQ?GvAuqWrY#}=FHHSin&2!__;RJi3j!fnK{R$eD=2@*VG^uShd12l z@&#WRwqS=)U>4XyC~$_eOod6n=K8glssB_DXkGp{0jhG7GW~DzWwe;!I5@Z~0(YNr zS>7H1N`45EUrpcaRTLJ7idxOSN72C?&(BbMay_9t;noIOlvpN|Y--T=^nfgmacxEU(v; zwsvOuwiVk(hil8~%L*7J0UoNVYQUBM-SEO%6|$+b27E zX4QS|>&>hOv-qE?c_%Yvi321gF8s7%)>Fwr*M@BXZ=st3Zk)dQP)+8JxVSzOuG zK31wulsp|1#p-0Sw;l1&=5RN|e|qB~{oVT2AO}{EL)OpC!rMG|z%Mi}@`ald2McD) z&+(yaSfJVcyQ)(HL7W>+8C+26hMhHbkppImvtn$f*8)#ZmC5&p5H(s^?8ZM#=qea_Utj*FMC zzUHinv28c6pLxmb;P!*V8(y;NRe>dS(1|MXH%8R6`kPqLvlvVYFjdVYQyB_ywNG?ftIxUO>PxyLO9M(1he`df{$`v|_d1{q&o-XZ zPe-&i&6}Oy|4Q)Ljru+OzEgv12Mgk9lGLu5nA#(g<$Xz>`S~h&fw#{`L zM-FUF&v(aFH{p|EPocA|y)C_ZO{x>DcA}#3z)}YhUh4Ii6Q2sAx9aLuy5*h!yd8LV z`#>U5%VE@I8eHy3-@b5&X~NElefJUGv7uq&kz?gdItr|DHGG zng6+!@Y#WCiTF^A3jUD|T|R+2-P3qbf2IBrF#IQGMq8Ck+;YOONR}EV#iqo_P>S6Z zV+YGZE2)y8DrfLe*C&iAVz-<VIsi5$KV{M;^P@XsjIkxZ0py0Q;|bhL*_rF zhm+*gUE~YYLh6&o{M$XcPe0#prw1}*pFj6*Z=r)qH>`wj&3{+@6R?{{v>h|swnAYy z!3)HzNMwl5b5ukRN4s|YOpk7d;J3c=E}*WUh0X2Ty>r9570U+utDT@u98pJv8DsKv zh@#BbY7c+W2a%YZUW+p3`stg;-4IhbCKeLMbm`d2DlRW$)i_RK?qlMm5en;2wkP1t z`iy8Yoxl)b$BOY-dvDg%%c)T3NHs}q)_@tx!_3P)JrO^Jow`bx|Mc*{XeODJ%m}J3 zmdRHu7Kvm*CYB&VJ7!s-crH8t-B2ddvGdGYXew(@ZP`8>3xom@Gt#qc^AKkJOesAz zwCs|#mM5C>g{L>KO%{goZC+1xvXtmdg^D4wXQ(oag6U01!_%u1rK%KJveM}=RAxDq z@8642szwU(vYCmNRtLlP9Kn{OX~rBMB+s(j3~g6e9q{MD`c&6ckq7_{s9d2w$lOhm zDnr7^u}bQWF4r1pqnRRzJwia*-<<3(S7y&%7D$pFq#I^!)1-$g6B`bWWCzym?a7V| zR8p}v=OZ4@Pt*rqa^7l;g5F|&*})l*!%W-Q{Ib(l-*){ulck<@+qV|#z0OBXK-StD z-$j3aJBYAp2uznXr-q?3J}a$~^FILZ$pBu-1%r}Hjkn6B{&%{U=qsE{yo;AKr6C=G z$$_M48U*-#xAVKHc=P+U&hMr&#&3uGwG0R^`uZOHtO5OA6*2EMiu!AwZX%@WuW`V3 z8sBN$Xr%Ogm@DQfoU&=*^d=XJ=R=KO;P$^qZS+5^eO7<O~hxM zVUEy2eWI{_6-Ad~5gnB~7M=e#Zl;f0L1aGfFK01n=sfX*^WRoC0K!oBe}pM8{g3^K z>h?&ZPc%N`_LxTiyYy$w5f_jt`;nIk)X&#B`iOJe^|1aS zp2IwnRrr{88+w#e<|*qw2<^&Pi*{A_1Lmsv{P(LKXAHJ*d>_X*`kyqIJR$Wt#P)lMx6oM4_iN8-+rb^YKf7Iven{6J+fGX#^0=Se!TR&O8e;%= z=m(qub7zj@<}*u<*JXY3miKx-z^B6Lo=|_Nub~inai$HCm1Fz(0QJbR=Ip4gtc_EE z%Pkr-DP}Dpm%;;GvWaPC(WWIf<1fLByL8V@SaK`-z0?3| zJEthhaw{i1IY}3yHrmzXAp!z$qfM;3c92r=PpY44K`p1Dm7Viu;MhaSITN59>o(MvKe@(GIsTYS*_r)pShZEewOWO!$U{%F)K>ymriP7{;IY z&8Yo#>dpmJmS8^0fgIA+`Q8|1&AitTp61O+hTI%zyzkcs-1do~*(~jMOZ&=gwx#4d zCNOz`T2G^Ko7yDct~Q^ea#y%5UMo+EdM{G?Ii47CpgiHF6xO^G8M&f$V`*{h+YaEs z98V%enE*?~kVC=&b|rhOUCv}5uhY2bKDH*ZcKmFF&Ooe)VWo=Xy!28 zQg@J{X`qp3gr&!dSq{Ev8mXHR#Yt{7NK&dDQKpWOg zZ(X%@Vr*dL;L3Wn*k9^TC&PtE0nD$E3Pqfyu~f{*e9_dDT>WU0rQ*CH3nwimC0C6) z#mQqRN9rn*Y7vGpf1fwFsw*C{s-yW_PPeSeNF4AhtdUkQn8!%&^}kO}*P5rROHQ}R zX=knuw zrI}<;7L|RA>}CqpfhIVhH!agKNA_`QbUJvrOsyL(!@`oN8%IM9;W+CaDr18pSs~rm zU8Q0hb^D^#?p}Ip8Rg0TSSa>5c?j=|wU;8gvVBpm8yqXzMzAn8*q`=L98p)n_Db}* ziwFszdzr>%`gip~z;7pK#)_=ML3VV@0mk0O)OwT!i73iybPBZ{Vy&uOeG|*lF|jpZ zRde$#k2QTqcoRD&6`1s{&Aw~`F?>gM*>u@3QvTV!Gi51~sF1g*MybPy zj8N26_xKdBB>0$iC^G^sIECpE;h=p4P#M|bsg1+_lv$o$mZAIGwJVJ;sjoA-12erM zBi|u?UTT6kPrAEP%H+kdUdWhB?VuWxGk$h`YQYR4-IopJ47=NN7MuPfTZSw4Tn@;L zh^2ou+F2sZj6wIL`v=D`!rR5M!9E7|N)%pIp6I7)IYlXBeIvOrxu1O9(=lazk1L;y@P@IvidrwKksQjSuputV~6nvdS3cq#Hld^6QzY_ z8;xbO!6@#~u8=k`w2aLRV{gLjD7j4@16?0BA}H{l^TYzMlRLL*+t#mJxx8L26~R7n zEpAH+Hh}T$k}E2;o_eTd@w-zZ-ccy3n!we>D32ELQ@X?Kjo=y9WkU1|qLua_F_tIK z1lUy0l)W`p%!dv03ctsh1ss)Z7iSur&B9d0`X|d`MLcPiT5}oe9?VfPRyImUW4pSG zeY{;O%;c8W;_TyfD`Kd;o1N`EK9WhxW|m@OMw9XI9$?vv!U{hUl+*s4O4ocfT zD39(v4^y7*WyfyWj9G1JWLU!K@hI$4yPAevXM~rGX)2i%g@3F$#Lb_shX*rv$t6KV zFB)AH=ZCYhQtaQNyMOyr43)cT_O%W4bte{n>SbyyQElLV7{4TFYY}gvyKkUvuk-WD z=A>D6zpwIWwN{08EO7vcy_YapI~Y25Ls{Q^vd3H zngXo;MMkkh?Qqu?k!`{#Iu{tl#PL66g&oH?QYDGGWO22a$WP%REEmQe9+K>;cSaU} zJ`YQYAYbq*OZbcWUURWTJ<0Cg!Q8%upU=Z>_T~nAyOWFDXMPaw!-Co7l5eQgS58Hx zG7QWsAc7J9SJfBQKRw-|aZM7~q;cqSvOJYG!{zT`99PLWE+6i~18y>i$XLQ|2l~WI z->kwm5fkIl;y4~ZaA?a5#au;m=2FuqN8Z8c)sybvoitirGgXU+V#GuEW0qf-wcq8& z*9J(|J{2#9np&yAb8llXVA^lAq84?Et(fn*TU_RRh~fEX_RX|*#C7x5@Oyf^xb7gm z68H(nBUI@`dwYJS!gXFecMJ-FnWw&LZU&ny@q6w0TuiF!k!J0ZZ6U+3aN&%ISsh|i zgP?V_e#?L?5V8fbrO#7*m3KMarW|t6(x3K4NhgP8J~!Ar@+hZWdVSo^YjVzH-DRA9 zpc%qejPZbr#=8;@c^0a60u$|GuJ3i0#y4JIX|Qs>=@~zP{VgF#>%=E2xkKHoACxX| z#hK}=kaE#^Jmg{$1?e?gC1nX0!hc?urH0KL@ma*-=euxjCc~m!r>&b_F+MgtNIZQ- zti(%6*l~P89=t%ZmVCu+uy9yh2q48RlCLIXbm$k1k=o$;!(Km-K+nykGy1={w2MqL zTmOW6_*%G`YSFC|IHH}RF0vI3RI(1W3Kc03%ugGj5~u|)ooCE%XMb(bdS>dgt0zW# z5NOnvLD7y_YIh*2IXi9T@>-|1L2Z!YcL?i3vtED+HaDAi-D1t}aVTKm`uf4 z=Fi6g>9#)-fVGuE&gP@v!Ketq=Mg3Nd@K*I-E$wN201Bi`YnNM$PtJ6{@!3N@Z6gM zVUg1=XZQWLBSQV7XZD0O#OY;>#v{%O{1(NTjweni%Dbp^R>l1s!DuitGspmmG5iS1 zv3N)Lz&nDh%7qfroJ~iIu_A6Gf|x~9Mgfx5A^S|IH;`VALr9c7>~(*T?Minn@62^& zI+qu--I>m|OjoAk=lQ-|Wm$*&w=+}Ewskvyc=T|iUB4Mab43bo1o2eY(mrgdz)->% z5Lc$eS2#6^@axg9rOvv~?g!5+5pGXp*KXZNsSZ6*+_-sdHqjnVOsrhi|8r{02NN3) zoPSQWU>0i^U3ED{Laj*uBE3U@ zsZ5w~kRd1ncsUH;9b$R8p6y)JibW}Gn{kvK88v-s%we%IoCd~sj!ZbOG1e)s@n41Y zGr*`R-ENy%TevwrG1?8vnr@i>uF>)ItTL-BE3ran1+_||9T-XecK%D4>9J`3LO%zGP4>jHqu~IB z&=dFuoJ}~s+F(IBaW8Bu3`U)m9U&?0pu!RLZ{bKZ)Mxh;N#ifB+H>oZuZr1$*mLhs zhZvT{2MjG)$wXSoO5W$JU{o8>zo*}XCiQ)7g4*clQ8TQRrZ)G7t~NGA*xD`n zAEC{CpD}y)qBf_$+r0q&RsXizivA3hEotNFg;pB#qL1m?;(HBhm6`T_7l>4IDvxRh z9R+QNN9!!fySmfF2%? zkIg57LOd6T<;N!u3*LZ}hK0I zQ!KWL44ew(dW%-JC*kvD%2T_0hF@~g8KaSMHq{x=0G5?54Q6|m7m@?Z>utTcbb#dB z=wMlOt?vQwlx2v0k1T+2ysu1EJ(IZoQX-fO#)tX}WP6NsbjBh*XT(yS!^wDX;N{u0 zAIq=D94)lZKRy-X-jlk z;+ba_VkkPIZ=UUfoDs?nY5g?HmtvNn?+WD$LOun|8$Q}s; zdi!tR!7>x(_XV&14LYhNgIe;1yE*fq)5Dly1Ca3lvoV~To83pL@HbHP^cHoIx{#8l z@7EsX|MzM4GF=+gz8~c5JGkZ@>X>>JSKZIG_p56u9C;zD^& z+RwG0Y2VepqkTpDJMFJlcWn&(ZMYY0g>haW8heDu0od9GWc#FXu(vuF*oh%X!ge z>+*fvLD`yc9>FU+S2k}-p7?I9^JyXSlP>OD*C?;!4j-+$&z0+(KpXc6KM4bOJ3?Zw zbhmY#T8r}!BW5V+&yNBFj5o#aNtDU#LR!FC=ut*8;SG4K0I?V%!x@z52#^73cq7r+ zU>v85&%_?+l{|RBnIeK#8VB&5aAmH>5DoerR!=|W?#RRqv{k~PbTN>zBjsp(?@(r> zvvYLxm_-qCE9(DR7+@}m;Nj8yGw}6c&=PD?Q@4nyA!8H2keGe(b$R>%OvfX5CP)Sf z1Z_K{@>o?d>~JHBXjFin0OZOhxtJb$3>*dIr_iZTh;SSEDqWN$9D+40)e)yfGnNY_ zGhwvV_-cVqg+*XEj8R$KXKe&pjz0OUu%fPRcrr(RT(3Qt|EjeGrm5r+R)i;nVF*9_KR%9o3!ji5~K^b ztrskQtUS!9m&hRcZP_tku|ihJ=LbMD7`HM7Fi{OWSFspLgW*&vWeF~DH0)0l0tRRV z09|-;og@c=*4{C#`PuMzi9)N(BNXCLm5V<^w ziKNXVSzan9*HT9|kR}kf91cbTrX48xgIIbgCCQ70iMsJnoFZ;VOeu=}FKLo+?;(^cV$4Es=Xk8GbIqfB?&t-^Ha7bR*ATS3|3BTp_AE9O`hO4Tj>m_^6*gUsoZg!32Vs~%q*;Fnj zyHWtfBd;W4=v%dgIuot%PDeq;Amk=oBU}oJ5ptVJLqM8j*K|lCudxsu+oEEG#x5Z; zLe$jWHJ6_;G<4?WYt~$TCZAWVnL2M%PtT_FCMWsq-gIzH=Rmq`tX7={E;&5Xx8#=} z|7~_CMrLzjxK!;QSJ7(Ucz3QpMqvdbIhb8+)NQ=8ck7`kX;oUEI<&R-`o7uDk@eNd zZaY*TcfMDqx`UBiZ*DwA;4Ja9{WGKe-77s~{7JV%ZHT4q10j`Ir~g);R^I^w|8~_* zX}B4+PhF~Bu77a0Lv=7iIf_S+pN*WCRX6h)LB5+OjYCH=i)eQuwdqP@~D;!1d>;>i?p;)Pa~zJRNVB$kI<(`C>KFE%ZF7cm`6GCX~C#3cqGxT2f+Id z*q6FE6NQ3#2tu)<=zec}~?-J738OTxlDMvS@-GTT03apV9QrLAA%R674$C*nxe<|=S+tg`l zgIcLps43RaGX5Ju{u)&MDzDlIl1XSk)V`10|5XeMpVB^vRQHFP$XxG2&U#pTm1@`S z;J=qsiQ#hXcAj&)wozM))HO}2#*{XOA}`WcA7rpyE2CNXA&QsLm&=gCB1@#OChm(X z10dG$Z=xBClp$leDO@>;W6eMAZf64%;w#(U*AgT|@N&Z5MgDRT7hKWJm9daNM#i16 zPXxJ=PBJV6q03Q3X>y?hrxdVK!)Z)D84-p=6&2f5Q^ayI+(wp)gwA)T#imR{Ul4WN ze`v9;$V79r#CMvcO-Fu0Np^mc_~hI_>Gnk=qp+SCosjmpI>Qi6E=o<(veV8|`AXWB zwwmwN6s}UqQ8mU^H2ow^gnYfTmN$ZMl?MP+#l5`+SUU-k@O86h1%OzN^iV0yz~e{A ziw7-P(sxZyi0ldwNJUfu#D=mUew1*pU7sAZ5hIErkBI~o%Z;{I$4A$OaAm3}_I}z$ zy3rX3$+ISD%+&p1gcxtI78>Iq=FPEyj$L##*; znZawFMn)YTC?XmIl$P*Vp%Bmyu1p2OZ)gOexIa$VZg#5=%r55aKK`V(-*G zu6;q>g^UCbA942oqPE~t0Ov1TOt!ZycytoB8@^~)t8kb;E4;at9AN&Y?%^sK&INKO zt1X#!_Y!~QaLF?wB%`@$obBxHA8F71#(nZbsD{vpMUsKgfo@c%cN4fWCy`8`35zNk z*G}@3iD}Ux9qGiCIA~006pix_+Tq4@xD8FUlrMLOx}-v`kymz{0(D4+-0F5uNDm6z zPc(8~lu`DlQIj3}tkj%r20(I6mgW-#vw zj}&4Z;anz`YO97rc}wNGYUym8&ET)@2DO=TlwI+ju1F~EmF%*CnT=&z6fATf*>F5w z*E@#Bl9Eal@#YIb+l=C}S-Gqp?M{dSDKEzGnY@rCgv1j|2Ge~OHF21|Xv{3*ZDm`7 z^W&0{H>3;xSjI;IB~MHh`$0<$Z;l3nISXs8ZMAy>DHDS!r3AcLvQ)g0m>Krx$an~{ z-_62gk?anSCtJu-`9K1_K_E2~P*t>*LOogtb#x}6`KD(@wu~jTKuIzmf_s|ap>i!! zNJXsaXel4+FZN`j`LsV&FMEBYu#R=dvUYpb@9_uyHq#srb$9r^G4zfQz^x1f%Y;Z# z3dsJq`mX*60?b=54&6Wi)%#|_mPWRxuaUn z6VG|D)h-Uy|BJnPzCl99-GP<*W$KVR56FfGiB!3R#h|HIs-qmei*t7&;a-BYdjr?p zfNhZ~tVq87suzu^M2!Jcdsh2jN4EVOw#83767HX9Pr{cTB=z(m{(A%V#Jho2zXKcN zG5$M@W$_&B=exC?$hjMca9*wr6Z|R*$#N`=M7pwEJ5H8u9o~io&*2+TXH1MP>F*L| z(qu|HnVMrj*TFa-`tT_ytI0W;Y8uXjd9}=o4!sx34^K~ehe@FnT!60;p0fYG`g5H7UvB;j?# zJV=_Ci=2P>iF7yIk>8H!>WIMH?p8De>(Sv{F3%Fq4kP}5sCy4M$;vA4|30_!y;Zkz z&Y`P1=jopA>6z&X%rH3+hde|F5C#xX&;bQh#5E#fKvCCK(N$D%*{N;KcN~atxWILQIunbeEumr(trCY3Yymjm0?AA`mZb=QHw6g1KGzNbocUP&|#E=}|L{!JBaVil^7u!D{0ZCs=-e+};ln=lq96LwWP@ zg9@#~4(UefMT54!O9>5XLPG{9$rPaBk+G&Pgnugu{?K_L7}eG^ON( z(42D-;5Cvto=Euvepu7xdtA$7S_pq!U2rD}I$C#`Y0JZBiE=Sks0Br{Mg7KGC~#cS zZrN9SpxtC!4mcjeLS9@^I6WPgVKAPI0f$YuqOnHOjQNve^<+3UHX1XBTZL8wb{sbvt4;Trav6@;U#2OiwEVI z@L+8X2P_|2c+j7Yh@TS>5hQ-ni)a8o74rE_E9|lr-zEPb_0a%$Df$qFRCZa5P?OgP z2i?9(F`A8`m#}$x{OO!4Sfp@HG+uQ_i`itLl?eFj#YiMt++8*UrM`+D%%qY=j>;xs ze|UHx7#b|s#_&UPv?$1iH(N>tOyPlJqI`c*+eObn6+#c9I$Frlcyj?ff*vpOV6Oc` z3gf*RJ9tK;m;!h^K;>5huk-K&d9j_nalppr?SqiOy&o&dHJvEN*0Zw z9kbPXG@YZ$6&O}mbzr1e?HhW3-^x_Jnhl%1g-TPp-<7Fb(Nu6?^C|uPBSz3-&nqU4 z!dHfi)qeTMbM9>aQ2Pjn9v;#VWzmyAYqO13T$iX9Gmf+LK8u4HC0jrWQ0L zv%dpca#VX;-|yseE`NZ#5@1=vrd7&hi$Py7=+(^_w_4s^|I#8BEZ zwR2pD)z2tb`i%#x42*E*2Do|cjYO?fTWgx{D zGZ{Ls*?w&7roBlV0pDEwrdSz{F$GFktQ#Oq$dCv*BB-c`uR(-STkB3V$HS{TD9&$4 zu`!a0y!zp6=cD%_6AqtYAgTTOjVxVsd0*6>8XBFn;nkC)Ln(Lk91^R77}iLnB+w>qfL*6>(H*hN4{p97HmXTUoD=-#d$nQqDa zt+cP#zoq_&ll}_rs`)E21aAOvdEm?R1PQt70bTSw6iv7CCk@{0XaHh$X;#tX@SldL>;ciB|gRUNhiJNhO=!ccS~irxJZiI7OC z@pEpNZEZX7{GIF0-&m`!KW~moDNNhiP;Lb%oSsb=t&5byNKk*ohf_fhCA@G|W~TNG zt+;ge+;c9SUv%v^i}xgvU-$xz zR{meHdlKoZ&4|wmR>oK5D`X04XSDy_^%9tFZ&okgc7Kc&xR?54q*han4oPd6!YTmy zEm)gSR8ggrN~=g;q{IPK{h;3nUaDD^Ykvd{oFcH?NB1RsIs0SayoBM+;d4BxbLP;^ z|3^<)u$M z`>fMX*}Ze?i5u6inVViQ3KYLlD;0p8S^!RORyW5TY>+5>Q_Rq=2V&_h^ViY*Q1Y0e z&TG;4I@1@O&{6T2t1@@(?abcIx|3Jhom1QAauj0Q(;<#fxuUw~+*j;fapubLRk@+! z(8ku(=@WyKnS_~4Myo4p=jSWU^1AI)H$DB_Lu;ls)p}w{gor0-r725U%T2EB-!yRA z=1s*kx)(}MCYmXw`?9^GgS)1|04Ktyzb;G#r!7~lQ);Lu+nb&|d-deWV@eG)6WN3j zP1NRE_fSwMd;X5ui`JZY?Yg<`&0@UBxgwcZsxdp-v${vAiHTg*^!cdcZuzW4DU&G2 zR*esBXpl&-e)z1H?nVN+7arB$0}Ol=-C* zfUS*>L=XvehIG0;9Jccd-WWZOrX8OgwZ~AD3$m zfX8#^)vLGN_V?#ojhe)N$?DW|)tv4Ny1ts4-}z4b8MhdoXszB%)p84u&Q0{p)=KGY z86r+I9~|smGyfgGIeO;&d51Qa=m8vV?DvI@L{AE>D7k*T zuyONy{mP7>gBL>OG^s3s;)8cwa4PV=U=zFuBgNls0p)tx|O`z>~4`$SCQ zvut*$J@dkQvt5J@PPGGkOA;K=ZLzFKS2=J5vl28P5G!rnBH`eZ_ij0B>sd3?6^MP6$}^llOYHjmLz69otgoFf$Zu5w~c|p2>@oS%eEc+M(W-*pScWgqNA@#E#W9 zM+JVzMs^NQpFS2FisD?PY_2%a-67K~Mkm(fCtHQ#pqnCjfb`7BMDI~S;$vdH&l}%8 zIKH(XKmmb+9{A6wU~5K^E<2|i8wa8poa4ScKoQ)i=N%mu#(}lexh=Gj8?{eJ_c~zI zwHlxgz#Ou1a9R|PP%seM7ga$@a|S*1F(5f_gk1Q58#sV200RE#+I~{0ZJ_D=@-rB6 z27_}Lp#zKOK+k-tQxM5Nc%>7^zwQ}V-gxlF15Z2q%rj2kxMAJeHFKjQy;t;Iu{@F= zd$M6XYD9!+(F)jU~!BmLb*_SINe&;Vj=2Av(IvcN`F@z zZst;OnElxp|22jFp$JyAXJw<)MH_}txojDm1)(3-AGnm5|~Co2h7;(_s=Doq?3_+G~Y=y z>5OWZj)%o)3%I2LNTmL=Ow|uz6sy&yDwUz3N_lu#y`nx-fn%()qEeY{^pBRS!&F%w zfOjzF==N-7Pzm(Xx_mr)<-j(M(*UKlOTZ{MLF)^8+n=!OSv#}Zqfl(4U1Wa`@Uq3I-U%HD-6hK?MskaF*r zvS>CzVy{qSEZk|Nu=q9cX)ep-wv89*DaU)kcUi@@VIz8l_sW3FS8sx(VFyZc zL!NZAnGO+xt%b80BGuw4BNpq;go1>0vuVR+B$~ac2;l1|TVy5S#W98hP#LCC9jUs* z*Je{!|IN-gr3d}-T-al!ywK zYi6Mjlyc?dW4>LzT@>@~h}hlh3X)O!b-wVrLL-19jP(<9;2NfsFN4AwuEtBtvNBLsrg8h1{-WIFiNI4+j`ViF%O( z<%Rz}f`dTb;71JWF7QMqL?CfOkO?cC4F$6@F<^i3d6+9vkIz17xMV>qn_|AiVDqI2 zjAaqWw}GJO<54eH6Ih^*zY$NU6^5fe7mnhdApao~gy#z%tKc2ovFl)@srFQ$aBzEL z(Qrck!psKeFx57|8^%K`EDHR>Y999c6J`t_urFyv$={}SiKkSr<)c9}maX*&3xwMn z;ruw2y-`yXXQ4a~1h&#k!9$_k+h^MgdeG*py!oc9ue#s@ zrQQC5n_hPF%bs=pRfn!Vbiu(3u>5vz->`0KG@lKJ0Lz~r!S^V!`XlPH%J|tc$O&3d zve%hWOcG`oyRyfgYO?a}fCd3V4#80*zja)h?CQcaB&G-&oUK3G@7Txf2nmzQ@olId zMIr&8JDSd+v|Y@5YljOev|?V)MKewwm@bv+kqbZl-nKmKkRX5jn#d_&220ChI+R4C!2+6 zAQ4HnDzRYN%GN^ub!T0C)>=%nu(#*5vrcc#ZYU^K$wLSUvF1?a^RGx0L)j_c9w4 z1gtQ;HKv+V`78w^0$N?w#fL0(iH?njvng4%4e+i^u-C7mM4G5t_Nw+`=b@zEf8uk_ zotixR#!V;OaMtAEg>1wy>X)sbzk0?jL;^#1E zbC49kiS(G?N||QBml{cUBkF?@U+?;1GXX7HBQm)?ABdpKl-j-Sz4|BM0{aSQZK=@P-FEkd%i2e~?XI!Kc5SKMwX@rc8_;0ENeewvHkO`6TCC+pX)d1F9o}CE@@`x z%%2IxH$Eia%^I;>pMHql621VT)kSU9@Zn&xx`a_o;(Yt~)*3y|9L_ocHolp zuH1j+IcJ@5`i^bu=P7}GZune>J}l&HYaOtuND?9a zqwwQ6(QLns?MUMc%RWYrTB=1SKKqn{Qe#Kxf6nffe3(G8_J(*PZnJNb0(i4&kfx zs1MYuA^5N;FNkVdTDM|qr(Jh$YV8WEl_zfkl#nM9F7DiI7p{B9vch$0gHv_RtW-Xo z4l_MOgx-z_Z5ft!I|JtBucSLT=)SjT&(&V9y-)j$dcJ=9x-ysxiGz}BOZMxdm?$ny zcC$Zf?_?))0nkZ;2Npn1h)gd9IUuxr{FVGcaOsY&{X#9~j=Ez2aN@~GGA>Dhp=2a< zNDCRska4J}g6V8Jn7uhu(yeSDYb_<=d9^TMLrJ(zr1ZoANoh=`%mW2db<;s3Ex7N1 zKO49dyAEWIU573jmC57bZ8CY!j=YmCm}4t)&^eM4{G!GCNt$sp8Rx!0g+)NYhfL?T z%>Vap>!>^8W{85__W#)(9oa`m-VC^$ZQAF^)_XvEKM|FCK!iU}B4XtHJx@JX-DG2M zcBpO80dG=k)fzPp;=BhMN%3y~o}ARjwSUt-tDdiYj(;D~KEzo*!?`|VW6tkkPQ8JD zcY(~goh*juG0Se@-#IuSw?pE%1ys%kZ5@&JL1vM`jC?NFelE!K4%QrPlAq;ZQ;^@X z#ygQqvV+5t68;mG!Vb`tL&Uko86A`h`bftU#+}5IV?Xe6sOi2#BPO0R<-r=O11SGh#+#g2G8*xg*=a zu;?LIc1ztslfKU|y_uXFCqX!BhAYYByTVil%cldrWFZFP2K{-LA$VtxMX^sozGG&C zT@gnSFXeJzvMI(JK)vT{d=ZE@Ru9DAxQU5pOJ<+|X#l{>R|pUI@$6AWRWJ3oNK=bf zvF`ktT!LIiPbsVdQ7cd>U~mSEprjG9sR7xEg{j0u(LiF>g7fwOM#;y)9?BI>&^QE+ zpvElZl(C{78XfW_$O&^{<7R!nG9BXb7Q>;28p}7&>G45iPq|Jqs5ci~`9#W;?52mHV{Y9Kp^@tU3fGBp{r2;ifBCUr_w2m{?0N!GnDS{v~9M5rZAx}hgoD@cxVKxzsAvJC|R_^8QeFcTo`zZn#0(jNmqnzZ~$>ySqJffY>LoW>6Ys#&&)fElNR zsz-w#DJnVa{+Qc;AWN3La3x);MIv@g4{mhJQu}dBP-l5ZCX{jo0*h}EY*eYr&tLUF zy}DP6;D%Vd3(X2DYv1C%*jJT1(C{TV*W9;mmRzA3P0*6}lMnP-pt&2=dNo5g&hl@F zy}m;3PzY4Se`>$e{zLnBa=0JUKB`t~ALHLYX%A@+BG2E0Y`>p>uVD~g%RiCk`)zdP znZPu5z-d1~m5v6#bK;&B$Ac}cL{^E>XNyZ9@$y=N2A$7s2g2Coa$1Rw)Wkp0^+6z} zY{oyYcT8lf{IjK-NHdY%5}510KpQ*~W6>3aDGcP6k|8pS+7H&S7cQeLQ@DSPA!AU}0qG@2?0_=YlZK6x_rS}IK%4t2GG#qkGv3uaPj za^bT+3%m|)Gr5S!OLYQHQUHEJ}I_&~uVD_ z>>r+BlEi7e&f*G${tje5@+6Rn%#3alTxnx+%nD_L(kT4|f|T(PS16SxLgXp_9NTp?nt+K&yx`VVN5Ta~x!Bi3-pobm_!p}qS&!iGkAeZ%8 z6A>#Dbm!QO{psvbA{n)s4R}&4f|%?}p;RmuuoyjxlGBOG^X#CD1ZiTKAwmz5&263l z5g9q|6m~T6tPvDu#0h`-B$U+yrT>TE=@&Bp6^NCl>!Q{nLROckA^7^E?^XK!ha^(v zQj667y&Uq<&LQ|W77ux*+PLtGqYn86$8wcJQ1Abn{u-?b@i>kbEuw0+;pyg7c9j4E zW;ZwiGqh8m>jq^kJZ{%ey8i|{PR7+A@1E+9u2<@JEuN|&r($o|-`+tvp-cR+ zq-6&$*ajkjG)q@N-wv8catjte13|Vuzw}nVvTvVr+-{1(l1meUVJJi%m*CBS?h4+F zZ?ST2W}r=A!iTVBO$q0CH1f|vczA=FGJ=R_D*xH2Gjl(fC9_+vXtR_Uz3u3eio+Xt zs%}#8-8mgh+AQ+rr{i)0V(Xr6{{Q$Lf-!16^LnM-^qlK&edeu#G`i%XGxyESNNA~2 zE*0|l^I_h+uH$!}Mn)oOZDA|!ND+2OX-5$9yQ36C2*y`_JlLA4TU|$dcHhbgmc25 z>&;aHVVDgH1(wS|VsOW($~CDS<3~(Ijc3AMi8J4f#k`Q^gMoQNc6Cp*;r9p2gNeQq zOEF{w_G+hv34?975i zV$kva(glo;ZDT3Z6AcD@)m_0SJ#K{kV(}F0z2QJ@)ViIlF18L7T2$2#C0h1mTItYe{IvJxb0MEAz;%HuN_}b6 z({PWm=}`o!n{-mk<<1pT@mxX~CC|c_PmQbCS4(vwmz}|~j|ub^7ryPS6bh}#TrFHr z#xs`J8;>AVBJDqEzt^uNcY3WR^(sL)p_L;Cq+Z)0Hfiy85f1V!$BM6*)HMLUYgeot z8yTWVmNubJ$N;2kj*0EE77GE={63bQe-hdQQj`6 zslPH534rC7h+Hh<&*Xi{Od=9Zrl*QMec4jIC7WbOATq`yIcjNJ0DyIWPOKVVs<)N+ zF0Lm%J6jzIA5E4M`*G?@`M+n$!+ex~1Iz)_T z+hkXhZS}*$3uh$?aVuVk=jeCc9Z7G()eHeWsQRQ>cft6mqp8D^aN=tXi7!9&JD3dZ#|1eyo1$ zeqdcqt>KaKS`bf}aB4+iO(LOk(wFKN+je5gh$Bd~D z)WZXqF#}Z(!gR$OXN>srMhk(-O=Z!2?<; zlPm3mD=Zz#q;at2v}7umJfP)=R4ST>3L>gSDpAahgchf!+X1Z}*6RDTfmmbUjFCaT zq4hKyJ(sprld_A=e&CJXVM*`1NDGB9hq76IVUM4WqwWnr^&F_~qksM>Bjwtmr+CbP zSoP-re?R9qqxsm;&lyS=)1e}y9NBacGLEG|{lDjNj~>zaV+Qm8-iMU%t8!hsG>3WE z>`s8y>n>40QIE4&HT5g?OZB+=E$@G;zN7wCeHAY1&k-s7gnC$g7zg`5Q7h*k)Pw4N z^=|bJ^>&*??FG=MT?cL2mFf!o78k2i)ybIMJJc4n8AE)Xnp6`Icnql~PSvU^V~S^~ z#2Tc|&>yv*;oA^0wJ&L3&_0MM{`WZG-=@74ul5_YJ8c5Bzag*WR_$5Z_1eYSg`~Wk zM278l%D8N?X*~MiFsdVJH1%T^;*Uvv>{578wtPve5;L>jMB(ZPQ#O2izhOfW)vBYY zk#xv6c#kH=zT>>+GuwG7Uy>aP9giR91e}APCCj$EbJ-{10NYQ=HI`jMPR!T3H?U;o zmjsT~)dD-Gb&hj3KJI4m^a66`+lyacx?6b?#}h1HcfPZDvd$AZPuHsPUFUh0pQ`(e ze8!{E-qC1n4t2S0=N4sK=605z!_k2j@6hhV#rxw_90n!svZT<(3)n}}#0QJF<6PPq z9h+OhK76SI0Q5O$v~NQHxDmv^XcP(mhqG9bn4Y??nly_HuaD##N-TwQ(Rdcd&i%t_qjqK+~>zy z$7x|=8vq?iRB%vZ?0b`bcc~uYOgynKP)zk^E!+-*b+Ty@RE$f4POJ8oLJ2DI!uXC| zP9>{gr3AA8d}q*|;_9(cO%!eQWUJ8=pS7j2ZA~i&i;5plwPfb|d<8r`V#*Axt41<# zs{{h+6mH-UWDoHWpBR)0qHjH5Aj2s$z}?5eGU18<1m%mR@nn-2VUYX@+$&{SNn8fv zB7z*He;P_Z!jO=mZ~;#>EVZ;bJWpUWl(x*cD+mo8G-o8<2GHbV)odgMg&*iFobJRB z2oV&crT&zlyNZMd#T_hHOo_U`%M7?dsh_Z3~_`l6o+BkBwgMy7`3caRb1BC?JD*{!_djSa9$Kx%^O z0W^;a1ZOG99@_cDx`nZHe%3w~(m3pbzw%(J4xf68(#|^LlnYM1VB3}r>*i)hhMJ9d z6wu(w>f|7bGXe0fJQc)hN1)<9ooaU8HaqevEiyU9tQFbBOTIA`4Y&Dba2fG(uAta$$+29n~b z0pOs1kLJftBQh@5nzkQnk#~De+)O&#>6`bSxK}Wn6XSiYW}{vulVp?HBm)rdn9a@~ zXN&QPoy?E3B_O=0q^Xitrp-qHkFoR&NzqJn_>D@&B0ykEz?>tP^}O3 z8nafk5+Yq1n?4XF$E1fW=RmYC_UuS1n;=I)C^mIhvK1}&MLo^QUUy|hW8TUSW{Ou< zs?kUx7g1r=EH`)Oys><^Ii`xq?0Cd|z_fB9D}j@h%6#NTD?MgiP^sgI#Uo4|^k&T{ zH^QxK;aYc~cQl>IeIhi8D63~PIePEe+Uwy6`d8w(mpiF`P4Y;v_yncgG5e6H2eEg^ zZ4eIa^8t(LvM@;BIr@vr=7l)odv@`XX1!D(uUayr$gE}xcQdQ$TW3P!e?UuFS__VH zA(PqV^*&PRi{)Sn0Mj4Ijf4uir*G%P$ll9Vm0;J$@j}9?{*1&4uTPZ2u|g^mNDud) z?KSGFn-kl|Gtk-K)eiUL8y|*y{CWC=Fs5zSHqCEXzY@76v#V1@+D;hP#0Ahv z<{u^572E_4(PudO%8;_PY?Od9bNI2;v3 zSLE}OepVbv8%54_@U6L;Do10&SPY(99ve|)bZZy4OYoR{LCIEpeiL+)s7po_dW97lKca6OuI9N!xGMTAt zXfP3Lf*Dc4w%a*Bc=jXJs_B>=qMTU-Gg7H)pMi_q?) zY+5eQLY{yDy}WdqvJ_}2B&1)rch0BCQm0BoxuknDc8)=(_i&Klwcskt-!EN-=y2zH z>dS8ThwSS;%;groyZoK~4DV5|(%;T@uw#BJsm|g@`%6*xO53nr1jW?kV1Knz%%_v_ zsK{!kLcCCgzy#Mp-ZPpquJ$N9V!=k{%A6+t@5pI;g3GsL?Dv4_Dq2=N7|p=h5EKG8cqect zN7L{?yeDhUZKy>JYASlIxamS4N*lo>U@ng*Td4rBHmy{xmUhAIod^Yq{ia-I95gh_ zQKY(Y&J=+#qrF+ZhTgkVdFGA1kW$@1#9KB}adfN!PfsSk0P4xaUqs_yx`f7mN<=-5 zgdk^Gy>ymkkp92;B*#bf|D}gJ`L=hw=!MUJ-pz-eeg6J)&)#?1DJO5=+D)~{Wl)s-)jr|u{mV!>b}3*LYjAxv4s+9JTeU0$XkbO3x$cSZ9BXzX0Bh#4k7i7AQ- z?Q`Yc>%ES|CaJ`{u zE*E8Ajf4!U2n3;)M#qFiIvR=?0PoPgebIo+^7+UUk>fn+ICZ}TT6`m>`;Gc7c)GIl zq%k0>cz)YIj(QbUQ7No}hjn^-0_I1NzpXmU?nOZV-=S}%_q+-Bi1!9}SUqe7?t6f! zrEvwBNyqp|1)=b3?RV<6xCA%aaOoL8kyKpqx>Vo9Mj~W{$ir`lHi9Q&AHvPfTC%r` zB806WQ>&?(RI?OJwS&YT^R=AqL4=-QlREQ4-rf@_1Wt;bjdaDfO*1U>{iHo`XUD1#l>NV*&1vc)}3GPrz+O~CPa z^WGVKM{nmfBBW#aiz=Y9yDu59tUlw~O}j51tFPWMkV|-c#>(1Ye`(d}v!w387=gx! zg$OZ=XN{q!`q$KYPTI8bvaPMYQ#Q<<)8`?t4Q+B@(`mU#4$jQLfZLNSjc%;xr)JKb z9y%3*MFD?e>7;)b%ep`simOi%4Gi3Q9 z6-8;oAXQq{5L*jiR`-18Dx?(57q3qbE&{?HPr|r$rWR&&Hv8HUenG zOw_0HmGOAQiq@vewfX*$&Gp_@=>$F*QpF=d%H;Gl=LS;IoI%|H+%sk_607zX^HV)8 zsB$th=dVT@&$JJ!|5TqRxoDI2_=8leaS7Rx_$vA}%wvxaiWQIp>T33CHW{xAP_x(gN-RFay-fmAW5#R&MjzHAj{AUgkdEFytKkj!4c|(iUIsadEYMDFvmD5UtyJXYK zO+)>Sst_Py^G&HKgSi6GR%QoslMzKIc81Cu z*PE)ZGD%c+BfygRf%(l|-*&Wf^PFC5fBj6yhXrMsq6Fi>}F%ceN=r8Sk(Q+Y&o zj2zrR$x2s^K(MVw1jf0WCivL4~$WiiZH6B!n)qvikWhe3UEUuxQM+TkYe~5Liu=MqL}O-NX{HM zt>|{YM%RZXi?jL65b1zs-t1dnEX-m>@6l@d8eIw*t;el%^8B9JznZmT;|8g_xP9w} zy&LyVjt>o>p{|dvcM{`Gy3}!@Et%RaXPU`8qkEh#CGB_-&tiM`r{(+3G?boP+@9@O znNpiK9$dfS;D(I{H*7dK)12=a+T0s%02@HtLo+sAE-F>T&Hj-@Uu7uaf?9%%S2pDS z%Iw+G)91{rJZF0P?ArQ+8##^h`#|5iM(^qx-KYDE5=yPY!H!urH&~jg^-2Ye9D6wc zq7!D$o0&OxcJ^HPjeByb1Iu_f4+>irt}lFIwiA=-hh)G|cStGxxYa3K>4vN@0OgC@ zcRW&xi!Q7X8CKe52QEB#(ZR|El?%>4@7%NZ>=r@4a%#l{{acQfo&Jp-uYZr~Ec%;O zO@}(LhvU;lbcA?kUMG*@oN(X*tauy!v%K>+F6+=yn6+`&dqX%oGVrj(D^sXN`1p$z z(`9CZ$pOeGEirFm@;!Gv8jV{!vekSl7P5{QjmGj$-T`D0eh(wXB}b&;bl15{^5P9eZTsE`aXWwD{NR_S({g1 zS9gJ3KbQ}!c(dkzujai!U|SjOf9Jb5U@rtH3-vGC?iY0p+@VK!35goG+(O>#M>7>d zrL8*vy?OStq47%Bw@F5j+K<6X%8DpXRSpJ$Ca5U7f8gXBxY9Y}q`&X4TA!iB?awjC=bG^9&3Ds*1*^*r)JJHZkUqEV5VGVp}{{ zwrF9#i(Z3{gM61y9cg5%I*S`1a(+<>LQWx$yaT^*M}wXpxs%}wGEFNKCD=lk4@@Un z1#C`!*V<-%9Kx(-s(0f+su~QjlM&6s4VJ?rK(uPSSsE@54pxV@&+BU`IdJ$JkU4E( z>IyO#E>d@KFz2@t!QSz~MsA=KZ}jCF(^B-wkZL|IHQr-Tc!xSEm27XdI+yKVC1{s9 zU?N{o_k)9(m>*@Q!}epZqh>WLg^1s2{LvM)MR~VNX+8B4VI-ed8&L3H+Rk2NL*0H{ zdP4f8(YFm9`f$H4HLtgG=qKW^Xm0f!l=(zhH7P`qf-}FK{QAx9h+5Cdj|UQSzYd`N*++o$bsykrLh47kUCv?x+))TGp%L1vu#QaGyGVA15T30Lg6S|JMFI5icmblYE0$ zNQ4>frRsa?a&1%KrEP8M*Yor(Jv@Lz=A9%Fc;BB3Am`#92L#{|eTK`5lZ<|pm(Nf= zp+YRY@L2-Sc%c4Br1=k)5ms-1t&g&?W&f**Ck5)hn^3WC@mGoDaLpdh{}Rr>**FbM zM>q60to5qT=u#kYRy$#SeVmTMEx~Vm7uwBig@Vl%a!_%~oF=10(YQ8 z!b0E)%l!nSf>7-SJCMLv$4~sNLr>1}lQ``s9KN4B|^Sl$EsvQ({lJZ1Er#w&D zx`Q$;>RyAA%3jaHdH#65+Vlp^p*8hN-4itWS5>n041U63E?p<50M62CwMk)vC;vjx z@Tkw2-k@h;Wx)Fn!&~}l>jno-=&f%W&h^gZ^RunSidv}TuDusnX!{*GS5 zv$8`wQxzST-4yXEsz6BMtrzbxOp5^MddVO1*}-cW3l}7ME?g42zC)KiRT8PD zouk=K|LVgV_I_?({Mf_0F|(uZ!nyYR{F7Z4b-~ACU5vRc9uFeXj>V%BFmd+S2By+Z zIeGI5Ygf-qj||nT1mZ$okG4bY5KDl;bv9!eY8wY6o3Zob2tXu}^A@x@o3?z9AKKV{ zC&ooc+4D#=sFp*v(nD;WFR8xfid4Ljbj34fsAMJ^b2Y?%t`-})ZvRkUrAWSu*wfUv zjyHO%`S|=way4SDM0z5(gI$pt-NDw%nXh}WAmXeBu>-PZqa2H7!z7<&sj^A=pD?RdyHYBUx-{JoNaH@0>0aXQnOd z84f;?waBK=U&rENSG6~TZX<2Z@JQTDdRqb^j0oRm!0ds#$?3U2Nsv2dF8rqZ7OZgA zTsRyI#-lxB23a&z0Wxyca3B`U7Bg|^d`M4>ru=>q7tf8Tv@}?aP;N!SA4x<*Lw$jB zqAgEZFg#&{V;~AnHyZyW6fvYFMfY}JJe_w~ZI#-|RxD;-S){-S83BxPO?DSI43${U65veki1F*Fe@DOk1YH~eVvj#K4Z3h!@_RIU|85~ zr@*v7+P+x5N&6;^tJ=?5fMMvpn(Lv3)11a%EPPSD5SX&hm}?(g7;{|w3u8{>``c0` zsF%jo?b{Zv>74c&r|~y!7ZHpF8rQU+?VOgho6c#M8rOCk;jZg6{HoUPP_3h4`cvfBwuJ@otbe)SUV4>W$Nd!(m(q~>kk&gws(=bUZ7 zW8uegO>XGN-ADOP^+k0tjjL#Uyz`u$e5XqL8qlZjrE#wPw+oMS?)DMq$j91mrrzL3 zXk6WXplvv(Z5wtY*|m3SyVOf*T*GO9(mC=cM>nqRHgZFYjjx6b;AI>+-)-bMoyPWK zFt4q*8`mAvNRsG%s-Z69$o0oGw*S zBuDM38egnd>9@NQJm)NE+`GlX)$hOCX}eav zM?ck7rfn65#=X+!y8m9M?Qd0CpLd;2+Z^cuw@911{}!k1JWBsP;5wbQ)g1R0=bUe$ z4JXf=)C1~z$fkrH@^suhubhwf;(IuM-}Y_uQ%Vc`x=W32sTDK#}%|Q7qv!|0fg3a?$^7LoYp!51$X%guBik z6jK!}jurVSjTVcP`J9+&@DFl77(%Hk0oXGLvwF}UCk*TfQBF#V@OnvEW$z^#=CgYJ zqF29= zx#}FZ{+PB~$$a^e>s;pS3ut?TGxgr!Os_Yq_p5K~->2L$H{|wt21Ta>a@KWNc^MvS7`eLZT6H^_sf)}U+&ensfYA8 z)Aq?@?(<#hZTfoGJZ+z%&Ay)J{?7GYfw;?({zd^3aVE8Y)V@QzOuL4dwZFah@RyxM zdicv+1l9L(^@R2deJ{)aS#83Oz4wA{z!2KUAA;=U$cWv)2ciot8K(>l#kR=j2?|B@ zB7Ip$qw_M`I`fx#`CvE^&PF1!%ER3k>WNG^Qi$dwsrupzo^uaCmv`zHalhsJgsiEh zzO8*gzZ*03F6}!VGZb!8K7Ei+qgutj%_MiFZsSl%*W;c9j<9r3q8^D(BU)FxAQ>Kb>;K?rBIA4*DARkM5K)WuV zQ(9juH<6!!KrpMaM|Qv>87Nm2WKyRqj`{dPJYdQb&m=(@%iZM2MD_%)J?^LK%lJUS zpErkELGBeiN^NAo#EW#?PwBXT`ik}i{gujV7H^F?(<~;Vtgzs}r2SlfxmMTu>_;o{ zFgTc4ojjnJlJp^jLxxsYb@x&)QqRcNEm0KFCp&&O=~DX<_n>WwpA(NRj247H(kr4K zi##!xzo$1CDylD8k?_!P&Fu|G!zMKzTZ^E&be{eu_Q-kjCec>1mGIuVK<_ zOsVfx$J2%t^2bZ1I5m-s>{x}Aa z?q$)~)3U|J1Z40%lYT27hto6{iK<^#v!$_8Ia43c7m}4&G@Yo%BWb8vzegh66Z$Fa zZztHjLXbkaB{S7ydjp{!2LMBgHRx*b3W~!@_s~Z@wMt3Kp-}qC$B_5>J0t0mW!a5> zO%USh+5)y|CWWi)?3I`=kSG=d(S#Mvg%V+tTwjXG2a{BN!Vmv7Pwc z4?ad71Z)^3GCpipiffK~ufFLwqAMnXu|g~w85yaQEOXR*MEZ}_7qwsOFC>Mtp>4D8 zay}s>6LOOTn3Vfwjj)uPY#!lL>q;E2Epc*LrBzDVMvhzpD1SUu9?x{w(_&IFa?uVq zu%1NhW4PPmQg)ql*Upl?9ryWrQu)=8X}XM5YlYj26;oEUq`o+siQ;SsC(1C}2ff8= z`rH(_(X5pu1*82KWqTghpQFNNPMz&O^P_fUC-so~Oh+#m1Y-7G{XHsd{3Bked%Df) z9!J*a)ep3f=5iICAK1i5UZw7CH#hSK#E$b};3Y-)(;fMebGY z*5QpE#b%@3OYNQQ3XR{T@ve67;S)NIC)j<|o@;wCrar`7+m#+1I8_0Mw(B+tXh;bx zR?ZQnuIBTL&BuC#_sxeX$r%=?ygYGN3=kNYo<=DWi96BRpV&K3rLbG{Qt_`OjPopa zQD{wu^icQ@0naqvkmNv+lBBO7X@|McXe$)BhZyX4wkr!C?hf|Chn>M5(c^5Oce4<8 z%LI3zf@yJEANLtj$9HJ&n@78|Z$7T#%l7}Jo5vT$jlT&!CG$+V@ucxWZW?yNupSS1 zcFA4)J?C-DNa&xaYqk5>1TxyBz3BRcdfgVHy2>ob7Yj ztYojUqOEAJ^p>|s6_~-T>RQv6_L0obVuk^YLbaupb^7ci`s~~7chG0wY#&xH?Dm;@ zp)>dc?PU9r_B$E;lbk*i*mc&vvx7`r7Y+)UzpnF${A;e=`S}cO_MAStY2SQM(>PBm zUhnaQv$jGkW4?U2k!bW>{j*3KdaaRlmt?q0Bm8m&BY~ew*X@!4-w$PwMPaY@)^@!8 zpZ4wF->x1r2$=P<;owi09M=mF$5K-Y7e)!wSU{bhRy9MHhr{-p6(vk9R;WJKkZ!eHJwX6D1C09 zom1t*JClD(u>`<;+~E;1Oac4>Rn# z_UiUm+Hb-lEH8ZdFbw`UQ64%x=LpV9dk#{gduc2!+;e!9H0lo>Ugb2-w-fCjxBnTb z`nq=caI4eUau!zK!V~R(WoBlN_Y@>~pu8_Vh3H4!siGqw#+{De= zIw7n%*HeVR5X$3y&+yP{Wtg% z9?v%9C|kjhBTlu21+CUTL|WCQa+@C*sI#gC$|$#6z~3#a{2)tJG#FX(`inKg&mDY9?H_co{dL> zpoDa9G+mCUBo9PlLp)wJNkmOn>)}*g_f{JV3j?)8As7gkGdXy=pjY#{9oC}l|A!g&ns)Q>y3UZTbEe-&+iL$u`>QnGO(Ur?_QYM|G!D1>7|(ao z_}X^g;ccD9ZBAph-Pita8pFoN+O37JclU&auRG0Fdm4A|Lri*4d+hLqontSgk=0pb zl2qGo#Xfur=_ApbWzt8cG(CnUSpNoj8KLh>#QJX#JY^DiQSufZZC|aO*M2v5`-b+! z;Y&JKyu`kpg^#rT(x^9$PqJTnjZc36F211DL+!hq`#qDQ;J+dq=?lD?Suon{U zc-dcmlbs>%U>Np-pa{Z8=Z}Tdh1_P=2gN9-Jyl((GXMLheZ75J!rw=oHrIYw`vW>c z=y;;Sv8%hHLe|kz?D?DIcBEG1G z@ZpoSZN2^J_I-5pH`~R-^-f3EosK?C@0kP$!p4W%=EAcUr^T~m2Ukg#kM0#mJa)0y)`ji{|d@q&6V|C@A2pr zJ#L=5E4OQ*?R8&C9R=Sd5ayo3 zy=V2*C|`h$vgFc1h>1@}`~f85HdLdlk~+4_^t6q~0fmz$1}W3j=Uc?#_`H+8gxfun z*P~=6XZrm?3iHfn^|(9ePmFkUY6`miuEAdXJbrJzieeUU54B(o@CA!asX8>IzJ&#H zzt+@x?b|CB0EElUb@eE@wRjAd9!7fCjVSwpZ7*W}a-q2s=yW>vjE2eIDXa3*L=z@c5rf@L#4&)FYL@Gr zrL9|6$KsaTpR@YT*|71h8L1cIPbRmXvPb`v5zmGx`{T3xsbsDIlY`F;TZL4J#r$gh z!`#t?+H5=m_VB;wwQl!${@d=M_LtNXDzA%j-|;@#bB?W1w|zwVxp>SpU7Sy-?e(TR zoUyfbM;I^Q+-)nd47bC2{{p&9|qt^bC zGiq~;+S@VG5?T%=0>x5v2z9RlydE^Qgi6R1iwmg=UE~03nC`B10G=ryuBQtm7RCyt zwE8}QDo=8vWu~KsCow$KlVY1s=^s?9T@^g|8Es(x$-Vb%@-S#2B|6@FqD{`|@T?to zwXU1YMUOZj^b17!V=# zCyMzNPb`Mg1z#+XXvIAGKLV;+k;4fIa=AEH0tUbd&*FqG`-I_nTxqcWaMp}d4aKR5 zAX8IBpX~-c-z#7e=tc_=lbl$D?DHR)k)^pJtQurZ=2oOVg51q<))P2u)A;^+@rQl? z!y-m}`ah_C*A%hE>O35@OR|owLWEtEVn4Vq@?zu4KzG6upftEXN)(UCsvyDi*<>Lb z3Ezn>m*s8s1%pIAvcL<#5TV zpMB0^SQ=VE-n37*7g5T?Xqc7z@(QEnYP`6U@bYK)~*7xj4Qh$g``rT$C2Xxit zX2Hsh7?5;oYxIZJ3fCmc^T_<5<0XAc-#tUp(T&A#-#S_>q!I7$9vDri0QuR7qH-Sc z6f%KSs644ZoUX^LOxPPwg-iZG!e6ck)!f<4dyi|oJ@5B8^l9RdlI`JuIBNC%f*pCi zglY5L&-p~OWNEPTM+q%p&q{3T=+&|4;}cP^JP`Yq?9i%Kw31v^N@HrJb1c7Nwl!hp zVy%%>Jr_we@?p7;oc@4XL;0G1t$)4+bVzJU7W6(whg?dHy0`3HWEtu1z17)9H9GAL z7wlC1WuAJG2hN&w=BVSU_wuG6j`e&Y5bYsF3Jy zj>@TY3d=*>^@N)$9d|v9^xSA(|C(Cqa-)is=qRS{(a!X)X4~l!=Z5Ni5F=W@r~F({ z{~G#Y34Jle+0NJhSy`@Kc+kPuCMjM9nt><%>s;s^CFLpI=NKZ4%p3hi!h%l6Zxtet z{CEOUPjsMAsFf2js>AC491TPxK5x|W2U2mjpIT%I-5<^-Bq7Z(pbqxQnoh8$x3H!! zF}|7c!Dw2Roc|ABqm z(t1fJv)vL5q(sMbaZ?iZWe3S+ZTECbwPfdIA46C&L`W8VXp4^Bsp*N1zm;CI^t;ma zxX3y)O`3VaG-9=hd})~K=Vq+X+gf;>z-=BHe0dDdCk%$D%M9_bsfWqUPNNYl{JP!H;&$Kv zVBx2KdU~htpYC*TPkW74AYZ~~{BYs%qX)*_9;Ni$12q2Iv7_c|pQbh1FQoCu3%~f& zt)0`}Y7dNdy8bEc_pbhBdllpzOxoppmCeNa1o5Tx>QXF`CAY#Fs(bZM!PT9F!`}-j zgwd#hhG2Si&$rq5joRIfc(?ykeMkG9eg)8AG6DdeNHQD&C-OXSQ!@#=0Sl&r9U>JS z4AZHoiXNYxm%p^>cCB_tnppZd)saj&4nQNGsjr9!a0|KfgH!4|=|;TLh#3Afi~_}; zC>4D(gLRQ+O{Cc=uCug)w)+E_RL21!epBL=;(l1Vo%0!b+xLJpI3kqWX|R3G(J;zE zfixNCMwj%EWj8AG^c^RxX%wOf7{khIP6XiZ_T)#_=nu^FWXB>QiyAdndewl}Z6wEs z0L{1mq<*7)OTQfC!0#z-fNnUCJOdW>8|@K3Eo#wuoQZ6Xq6rMuY;KgU>LYr+18El3 z&vG@`4oQsAeZ6DDAxPR?Frq*-)0+!D`#Fo~!2Jj+Pw=LAE$C{1Ykg9BdI6tGs(H{D#BYn@2^?-j)V@K??k ziHF;UC!dR6J8SE;hV8TT+w-ssBXDAU-WOpnx+7t;8VpDp0Xv}jrq2is3|915Asr1< zKo>F#&ep&Qtbp@GSF*%v+5P#YAI_;@DO zMPBqYOixgKIpQ{(gGT}^IBixvpuJT;4F&4Wpea# zfwysi^wCemsTX_g$nkM84@VgvPdG*)5gQp3PUoZ^ybO?0sl!4g2pAPFlt~&kSnEGi zAJHDt_Y)*_X%?%`w z_CSlL2Q8aOTIXRF#lL6*-G}g=SMQI90-iumJ~eF7)kb=S`c|S6i=;pvB%_pjiL+55 zHovRBru|Ak83lIr{9lSdY1XS{;r6i+DE+Em+{x_v%h4y!oj5a@$&Anw_=&uV`vUPr z{E3;SrUp8#;SHv2oiYc0U&}7<+_!9M6RbY)Rg<80!MYKm&gB9Q?ztu7k)s<1#Gkg7&74;kpV}vGWCU>aU zf_pVw!Qq}<10#vT9A1jIuC8(i*QnR2Uj2I3TS&ds9bH^+QD?oq1J>WH{&C!&$Ah1Q zweWG_Czk#`;3pF*nHKoTgo@hulee+$8^+kPvJ-u6Eq zzP;0UyFD}7?`xN}b?xtP=6A@M+t25H(gqmZ)jscNfWf!v@gJ$HwGlHz<)v#rs^LV- zFgSKhLP<&hU)ZVr!Tyr2rEOQ}q9X#L!A||x3E$4Uu2NS&bLmOA{#_Tzlf8}=Dag!8Uytl{`cDVyHE%&V#Fb$}tQKM)tp3TWI~Ihw}Ls9z6jTS&%ua%hrs5Lemx$?0_6 zGDCYtzSJi5XUAKZt2un#$%jPcx~cjvlz=jG0C-3PyQU6;lX#}}050x}k;hrFz< zkq;?wY8|WI&QIJYf8x5+5jtkR(%W({&Dr1ill$OLt~fASxr-1)B48*6)cknJ{)stkI}7#`2~A#V4OUATj_CrSMzbiMq@`|c;d?-DDG=J3xd zuLmUFr*7pg_eybgSy)6_80k75uZ|C9Z1vST8#)GL%N@@5)Xgy5doH;=7k3P3=GD$0 zrR~>->0zih?a)s5(|5WqC}17W8ESG*Ko*l;&UYO=>Q3cFT8KQQ&9V=!IQotI;5V)- z_v<^gGt~I@fUIN3cr(;%r+lxs=U6Z25T`vyf=)j79EoaO1u(%MqkY9#?Qitw>F++r z$-c?Fqq{k?oV(~sOO$fE%;rSfHJv&}FL*}VgsLW@YI*TyR^zwnU31qhRl%^A(zdG# z>ILn%B_bg#F`QisP5+<(HiBoNPt%Ob{2-k0VYb17aoNEvuSf^9!!K6FaHnZ|@Wl5~ zm#w2WrKWc78aH0M2B^kN&poDwZjX)D_S8{B$GT$(^iQyr(N0`_ITN+*TB<&QdS@L^ z4-2vDp0o{IPp@;_+nnIgq{5&8|DdGUgv6wr0&P1>7x=TCAM1#O1_sBb#53|hbt7HE z%Ri5oKdI3Q;x->(-fY6z*=896Mm%)_AmCnSaw=na@i}w=478+?DxsHa3iM zSLSI~57jnmSJ43!#dP6YmC4a63J*i&PEVxl$4&Wz5D$qlfZb`G~D=|!knenB-mtB$^*c@#OOMF_b!npRJTVYO%tjHBk|S5t z|PhdybFJeoclR<_L}rjfwR&gZm$2b~>GWa+{Y1`S~RUn(6syBgCf; zv*UvvVJD3z^#hXa@068aB8$Mp_+knJ|s>mPCQQCa5v z&OW)2aEizBQs>4WaH^GzhczI`%^X-X&n*Au}``UJ< zBrscwx9sIk_Z&v2YYwC59m;Lauy50qw&QpD0xg7Df1z4tZa-JWLCfS`ymBXNN3E66$IHZ|;uPC?Cwb#GyPfBiH zN^A<-AC$0JMSezPaJCQJ3Gc@4&J^PX{VqDgd}w8aP>kaU z$~KTpdW&+I##YLzC#|H7v`4w;&{WjfQ~|*l)($! zM^XZti1~NN?fBzM?mR{^M{dq|w`h(WpRxa#Y$`_YC7TpFavX&&(Q>UEpMO-g$l9{m z7X9zgTjjiJbISM=%EcPr<4e=gXJcAp4;V|F6VUb*7fYpXPw!pV~4iw+qOTW zUF$Zj+f-IGZ`Hh2%NAwL%9=GTS6zpN1^IcoIZYZjYM7msmYJ5Bk)GTjxj|}5d{TT; zVnTFWw7n}LW8K{Ug;qLJnnV;wrAK*T6_@gt#{bk84-x65#id>tQR$`WUifel4nLXXXVKcI(r~KRY@mBlF3OP6cTtNkP$O6D#qIw03!UX%Q(_x*1rn zGW|+`YaJX-Pmgox><-05--IS{DY*$OU!++L@)8=BB?nPEOG+rtV6DM`py^@BU&iLA zr)36(4-bf;UiEj&@B`XQu7Z1aizdxI1vf9ZAUCgIyyW9i@{QvQZfST)XmN0nyWr+Z zftFivT)|a~A=Q*uDQu}7TUwi?HBBu~F7uSunm>;zt@l)mMro}}wpyk2vR7C z(`rQgkEyM&ptVtNy&couIXQKm7Ms>;@6?j3mQy|Lna$PSnRsj6-gWxaTko8B=Y+9i zMqfK(_|PGPs&46X%W3ejr=h*$YRGtMKCUTvcv6}&uF#Ka^OP6a(O&u^cd+c`HeE}*BM*`Qud^cBzQ zet)DVdlvRH^o%Yo+YRcRO*G0#YTT($UUB=3wDhA#k`w*vQHgocn6z#J(QVZTQ6ZW2 zl}#!$S*cHHna}a=wRw26(5AuV)pZf@YREn#!D942(;oUF8M%JfnnM`@pW$*UaO|EjhtH&!c}dgb5AC$(H-E!~sZPD4gf zi?!ZacO7FIhD2&Y9CDO&mFN@SxM+9Zzku&=clywF_PKOS>v+ zuWxDxbyQVUMa11LL1y8)>!DQ6T>m)1?wd?I_7wM2AT=b-2M=4Hit22JEb8HYiTS=g z{X>&|19d&jVo~p~^iHWs1)+u?Q5WWwvrIpWVz90AC5|Yg3Ek>vhsFe$OjKkgZDzUC zbHE5aJ=8ZiJ2W`RO!El{y*#Cit665rH{M?hwldpSG>Z>UNvW4FevN<-4aw*PEi5I? zV&101L0=icaWgJ6mIcTB{KAqVeEnzm2gil8rT`O00)nE0&7del?Qd%akBSXz6wRh+ zR%Brqm2k#?GhzPkH#)Z%!(EPgRdop*A$fYCo>z#2HuOScEI!pTi>&cdM%cP6XMAZ% z8>(M*2Ca`RfNUF|f1Ibrk@jb!_hPf4*vnIUg^p@`vK{lU`Liw;{m8$Sn;1kJGly)K za}w{CQ!KG^(*Jv!u6&|e$*S4^cXG#H`sY)rY}+x{U1fc0)5ZNQtF9xA;2JZ=^q`vq{PaBBap&L!oE-}a z7%WoHyab&Y>0 zS^OA%4r;$yUrCD#>I^X^b>7Tz?pJh-g7He6@KuNWU&TA~xHw~A}khYKr@ zi~Y4qYnj?2xw)rCT=QpbcU!r%TF8@${ry8?_Nkm*ccEW&|AKq(xoghsJ0^`Ed;Q2E zS6$M#YHgpjr=iHVIpxtnyZlm2Ybsgx_!mmL%M*A-169`?E!tX*TF-Lzwg-rgv1eY@ zrVLau-9j}BP<{!fCcG^?1#lN zu{|t;wRl*;jdd(6M}xeAdX?}UMdy{BGyW{*i1<1fL{U3d7?ItfZ_~z|ax$VT!eR&z z;&W7VUuW}OM2-##NeT%LGb|Rn4-BeL3;2Db*Sf8mS>|a0KiIBGTX)%Jl!W1K+|Zw` z*60}9R4Z{5J4%YjpV6$m)GYRK6xT6Mp;dUx&=$eXT}A%bUb!+?!?(=LFB?$P@b#)r zwMnZ?tw?U|Dc?1J)-K730ku6SH1u4J8!-5+|z5wTN=*?)r3l&^phu2Slh#aJ?!ds6O5IR^uJiPb~85s#AHL zRUc>Dyrzlk$AS#5CT?Gi(GzbUQM|#)ba_P7EeiZq^^$)#6n(HSETIeZ1xGd0F9czTu&!Pgr0|Zp2W( z&?LVg=EYc%DO4nr-4#i{v`oM5p~*Q}DQ)ZJC)47?g5#LD7Z%u|rFL0zbzg_4)|Zxi z^k_-fisZQHdicm)+BfS)GjGl_=5=A)CT-k}Z3a>2=UKVT|Ev56KG-rHyNxKtu zUbGBv5!yVsS>3H{cc(>}Sy1LR^wp~-SD99k+B&(FrG1yW&BBrSgSg6 zI%H(5YuzEV*Is$~#m$@6KC$ZYyY8GbYv#0ZW3IIufK|Kt>^cnv?u=902y_p2Jtlar z8iB6W32C;e0Gpa*mQ^c$rplsPnZ(nx$(UGA%v`ks?P#0o|J`G*bbwkg-psT}j_=Trugr}vsc9pcOdU%NW2Aj#M zkthpWHfiB@4ac_w=;17|#<$Xn3VjNT>gXmc3oi{V2`;YNH`H$3F>=dM*gM~A$Vv0G zW~oh+%RR24=Fi%$!4-g;?IosHBhMw^aidNChFqMrpx_|OGm;}Ar(Q0vCZrXomZEbF z9Ky=^?_8j^f(bw?Zv-?*BCB}~N3bL8fYFD=&d zd>nao1gL6t$hiVkgpm3d73u}7U|Wzgux3hTo!tmE{epI*u;$NWy_j;gi))EkB>6?- zrKo^^W9u(zA-kOZM+H^mlk3o>cvM+ZZ2Z%@RDQP(5$mtS|FpR)7gSrCUg5vajkTQZ z>B)|Ei*b5g^E98{wsrHS4NI3SzJJz?=~G8ud(F^G`<;eL?5P~LtfiH)MM!xGT@7|+ zv{q%4im1DWt44fed3OTa_1DN42fwR-$|KjV($?Habz#tl;e9K2#kW2Vo8`LI0uj2y zCnUBYHrxyg4vz2%%nXjmj__ge)0Fg(*O=^?AEpBM(7aW)p zoDjtpH6aM;^+$qi@9Q)|GbE{7p@WUzfX&m3#z5789#j@BiC}nr^U*u z);seAwcagNTb^3Kbn&d|)22+GbknG7uNg7yf7}h*)8&;bwb!HZUVw=JLUc@oYoJaY zQ3Q7o!4)M?OA+H}vkki^*?S1+Z9kvT%=Dtb&<3e&c-c59Bs9t|FtbrOqo1d- zASx?wRCs2f#6^aMMaIR&MuufJ4Cty>XlFdK9?>Pl-{)pCh_!;vvxA8&ghcxJW@ZOO z*RSIIii0seRzY&(bI)z$$HoFdrq0@_OolfcM_=@b3J&_HW|j(GpE!X}a{3=p32O6V zGdwgzOAH7#0zPikz)-v4I5dqVzW(;4+kvcM_NZ$R-W|=FG<63Ej%#NZhZltw1{YKh zx>F-p|IPfq7Fu3&#@gl8n%-BQR+d_tT;d4@)cjf7D^^aamPK6iVQLlH(<==j_p1ig z9T6OP&7d(?jbUQ#z&-;{L#b_f3frq*6Km}mUfD&h*>_u&wP5zft>4Tpty9acSq-}k z>(r`iCLfg`_oOpm%9XTJtlzXQj5tv_Df? zWYwcGali42t6{mM`YmG5CoRm+WfDMvEA%8K1kg)zh*?*hD1ct;T|!%ceyzfPQ%Jl5 z=ruKje^X&lb(-Zhl1grVUOp{f$s^uhIQG9!URA-F>m{#Sp{(*!al&Z{wNz=(K4rk* zsZge>+Waq=y>e-_232e?H~(ZZXDz2$OQokMciPR(nRWZh1^3Lq`>wfnOd36kiLyfm z530Jq&;6&tXP(Lir+Z-_syel6Gu3-Ic$$j#Bw5vTbPx0RKTasP_t;Jl_Pz{BP4+M7 zoYVG-GN1TBM|Ovt#s#4f0cP+2(2N1sY9Q591_|?2U_>jefQEK~4>1;>Jm35g)KC~4;I+Q8QAYwtPPMd8*d(PYPIhuh%GsTFR>yF3&HgX63Nc zsy>=S({Gh>KvKo}O zD@$h^7r&r@==`IS0PKOcglACtTuc&H~ z?q~Q~$*fkSsco?Q{1#SRQdr!tRcWunmIK?=qkZy_tTU5cwX;XsG^upAPo&gQ;3!q2 z!15dgd1DLn^}HMh!*SZu;HYzAW{dFVq0NGuy4o)##d?vHYenV9RnF90f_7S&NNb(iD!HYn0aNp5?FNi1^0dKA;-Zq`k|LHTDK0N5E+6}UOMsLhe#t2nUsc+c zdWm03_eyErcokFmuT!;h#s5p0qw>*e#S*PLnXFu^B6phevR$XU=i%jbyX#etFJJfY zx+RO~M3^%9_Uo>_X85q7L$2z3an(b89y$%K`&5pJQLBp6O`wLZcnw@}O#^jz0TAJ; zUGuZ&OyJQ~rvO7;*yu{dywneD-}rxA3{G#8Q5KZzNDOy`>dD7c>lok?5f+yf?^C^q zN^rbYpo@d0764W3Rsqo`qeSiGayim8|D-JbD@m z_^E8ZsRHgQ-=01_yZcX-S35?nLf3hE?SZJ?1>AN5_6@4nc&*pC4egq^hQYz%hT&&f z4$JZli?rwx^fgin5;DsY8pk(^Zrm|9CM_^H)U=oy${OEV5c9^F17yTCj!!F0%gfIw zu3t6od6v-jwb%#2$Hz?0Pw)+i3QEX{E6z-4k`kHOBr&U5s-J^r(r*`FXmJhW{ewb% z;&PMn(&L(>r&XrpG*7BW5q?B_XWcCK8cB9Ds(RSc2+3t_q+GQ&5*56{g7FO6Dp1Y7 zZ4l?Hwq5W{GpyIkw`R0eNvv;p3_JO;4y+?IJ2QaI%Xqy~mVM03 zMj=L+rm=rRY=ovo`5%4d|2Rc(f&TTntL>h4SHs3@Rl{0ixR2{MsX1y+}8+;w#URrhlPa4B&go)*cgA`!jR||nJs$7<@*Q4 zsKWu_5kW!Gk$!=JnUT?s)(PY4<)@y{J*WJMSoTA&9_g++u+7lK*!v6HrFZIaPfAwJ zAr!cBnWx;xVMw#p}{8=r|r$I<0%eo{nN`%=dYWhiZ zf>~&=(o$f+zEFo<(t?wM;!7iaLnFh2veW&JTG26BNu_w9I-p`RZ-0K$x&;&jQz)? zQ#FMDKCM;Gu2z_g|7%Oua$Bd;l&YRE`vfECc316wV)d%WA6wz7F}R%AX>eeta$&28 zw0bx&ReSKbu#
  • 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%0AJt4)ueW*o}6ja=7|!?$or)epdiZ%u*?>=j8Ei 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�x#&3O>Ic1W=|G383x@LWoCiKisn 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%0DT~?hrmE70 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 REoCKJ%K2<57qF#V_FvWq%#Q#7 literal 0 HcmV?d00001 diff --git a/UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Bold.ttf b/UI/Web/src/assets/fonts/Fira_Sans/FiraSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0fb896aec8baf0cbb5b6db8727626dc58cd08357 GIT binary patch literal 473492 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 z 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�>uel4y zS-B?qWJSTol1==|zS*hZA(gIFQJ8+IxzQW-+ zf?Jp46-z}q`RZN_1{pB`ucd8%Z&$NGB>JWDq9h?nL~;!1eX^2!TKZpp5q)QbU zLaCBOsMs^6RK1AH3tzgHjM=rxbf3mfDCZY}340p4ma`_j)~Ci_nP#=UT~hIth$#gK zLMhAfS(nlrK@F6bGFE&FNB{*}RVGq$8+*Gj>y67r#B1urn=ndti-ts+s0a0_dPIX! zB95^kLRDo1W5q2*#^lz{&0IY3^zVm9sJ=lD%B*6Kbf+wE?43i!xRzcPKeJ zEEGAoo|gQr$JW!56AlfV0gVjka$r3zVvm#KLXsR-kc3f%U}XqmOkrwG1XhF~281TV z@dU^)GGeb1qv>gp{4A!V2SayNw*eJy({UvAiMoy$Ufqz>B8#c+BUOImL`;lKRznDr z#UP>xx)w&nK*9)&l35XSHOvviL8MPKpeRe>IdV`)C3aMElZaRJY3pcd>uBp)F4wKh zg&cJkxA%6d&1O+sM*ub--rLYFQ!y_+iyC@paVygV#JOA#kZ-hZ%Boa7LZo=A9to;? z1n4v`THLd|ySYa;99Nn(yca0<39P@ABRhhAyQ;hx*P`C`p0>s9vs;? z7-E^rz9N!?mq;4GxPoaN@lK5Z@+mRI>LYTZm}oU@urGAlU7gFq+`I<3qti<+s4K6% zbADT6LpvIkt0W{S@^afcdc@0A?Q+SWmZsiDiPfjO7YcQ;(a4-G=(SOWfQ2mXX=`Y2 zYHMjxrJB0}iO_d(a~E9qd%NM*F7ni5DoYW_UujEf;drI`4i*n-C03Opl{kG#;vhRD z6jne$CoC~ZCP?G0sDvdE5eboqMm;Tg*(B;|>61kv#Igv4HbeSIn8<_n1L~mah&V_O zXoFU=Nh3-SWkgOEVK7uh2T+LEPOgrK7Rbm6s3DMu9sv796hSOEqzNLfq6(mbt?7c4 zye!IyXclb{&EJYTNa&kQ9}&-{5aN9z8mU-7CB$+=Iw6vmMJbUN(h8CMt*9kS2K17- z*%U*9-O$z5xwLn&Cqubux)Ky8Aq9!eRV`GdGELw!ViczXm{PeWQkChP_RbY}HA${a zFMtILQL>m3RW_b<#gPlEp}C1t)G-mSy2^M`DcTcBWr{?o@{`JBiFZ3|bGn-wgT>@E zVa2J-jn~vLA8&z(rP4=%cpF5-@){O_W8^ZztIJ8;98__!N>ph9slw=VR8}x&fQx!^ z0&EErzNkN|1fpUX_&|UpQY=9}xQXC%4`k0tD2q1mQt zS1%D-x>bIXe65q@E13u^<#fzR#>!mzmI6LhFwd1QI0#7eHI^iQyCnJdCdq#{Ns>7k zt90d?Nm(WQKCPXd3mfKjE@{q6m1juQmsa(Xzh093ev{<4mn6U6B>C+n$^SP={(DLC z15T13Uy}TRljP5rB){M!`Sm5qKRB6)=VGgx*WBK@H0l&NhbPI&llUn{e1=eRH9|%3 zBstv^{~=xOa|mg02^t(Z9Vf}@I7v>&Npdbul5=sAoQadGj8C`0~h*lGPm?`*nA{j{&!B=>~ z7g1<2k>h=W9QG6BIGdoWYl0kc6Xal}s|5vhG?k~%u%y+l1$?s3Di3hfOZ5i}3;s-U${LsFQYicE z1(EK?ehc7_hSPRaPXj(ys$O(22<9$ix-cc=NyQV`!PR^UK+X|>5Lq&b;MoCxs!(<# zOb%<^Iyo#alLf`_;gedaVnry}LrNtw-Pe#)P7OKb)R0q74LRl1kc&hOxk%KI>p=~< z9@LQQKn=ML)RdKq-;Kjh#QyPz))%3s<%$ISTBrEkN7MK~)A1`!pKFHk1+Uk1{O(AL zX7Ks;@0#x1?Ovzp_;&UWnkl{ljo+Cww7!Vns~PxS_JhcK$bAU#26uyI;;Y%uBISAa zb^LwXeHVYhixz4t7yaok`X|OCexXmtBYJD% z;pmZuzc%{rqHp+0J-*yurM2kO%*%FcDcj|Uo|TUr*?#1PqwRXxqOSnKpxQIGg#&s_W(z+lzZ(Z8zjv~?=Hpb$6?ekZ`k@3__A_r+%5SE`yo z=^kyRb}YW8el~s&^h)hUeEl_x{8o!gUaXNk zUW+pM;&&wQ+XWBc7YiPDp2lwyyo28n_}uwQeyx9)dn|rgPG3`xrv*6YGf_@EaxCKS(DMPpjd;Gm z^DUkq@%#>)@p!=JM|yaCJbU2Dr)L1d!FYDYGg33kh9g9s5>MgkYwkt=Ff(g5;CTYi zb9gXAYu>{1J|4`zd_F_?HJ&Yaz*R?KW{!g7K$_}9TGew@e}p?CZIYJ1VA_IN%Pw7Z z>Egxy-XdJIxplG#TQA1f`q$!1^k-`q{!i&k2Wq#9eEfpJW!lx+jal&r!JW@EZ;984 z{3Rc@w2H8+T-D!reba-ooUV^D9@cbyto9q^+i(G!Z~g&(GT+Cq@9Ov=xsCX1>mL68 zCgHthdfz{)WUeS{i?YalIO3+{ncyd`jnwxCH!(JW55z*=5pwet{6^EG`VRQDqaVO& z;OEt-XSE0?;{m^~o{a|_BOh?aYH-eKP;)i7XEnHIHMnOrxM#J<1IMgBUDH-(=(!W& zok%-ZV<@Ms!Yr@6pPok$K7|LIv=Usj5?r$q9J2~DzY@RRn}T3i3C>vsj#vebSP2f2 z54dP0xM&qPXceSN%0h^GC7#07SA$zuW9C@d;2QaWb5?_M zR)cd^gL77cb5?(bzP^I`(2rFk5f}AJ=TH`zDWee;tVH@akTHzh`#bNKv@dVudTI1Blg9Oy{Ou^+UH-bjLP%>DhEv#yq zq@cO4%zaBi_2;V)?JS$OTEP(%<<1`)(68s${FfA7!Oi)XQHhp<_Z5_Xb^eW%wk4oF zeyWaI>uSxvRpr)Ct*=?KvL3w#1iDCQMg1C;yI^F=SgIwgxo3F629=h7cm9Kv8=F^3 zX^-V&j>P|{fBA3Zze~9v=5JO|e=Gk>O8Y+lX9X=;S)eIs)UTrr1u5DKc=6zXYKsRK zSSq(5x1dnXOu@ZDujbueFqv}yf=i;=Z+^c3+$H`O3@;d^pw`n1VhW08zo4{WoJxyk zzo4pMUzPS(vmeb-1pU>VN3-AH1$~a7f*A#~m#iGU5&a9HXttsi5UrVri=*CWK_Rb2 zJRYsp-k!tesZ|@TJbYfQzZzv@UO~Hp(C#t?VdW8@*1t2C=-05e;8>LlXdRV(t>IlY zN6}n1$~2MR)mm`6!ox~AH-s(@AzDXsUn#g&rDaKrn+tANY0>OQbdI2C7BIh0P>JUX zUQtl{$py43=7l_7@NvOsDi>c*tPh}quNBnQI)^wmqIjWEND^-G$ih5@*ZqBAKtCx# zMCyWc(|DB|abn>vg(Z}hC@fb}wDb4Ey;WMzhCtGEwKjv|&7jvDR)|$A{IKsRXuhYQetY!WS(Tl?M@KL-Z!Cf=7XO?6 zM`-@|!VjqI_~sTW!CFZ&^c&faWXXaHn?6*zz2`4lvSj7L*$Z11R<#ff7GAuN_-f%3 zLE2nx_q$bzj>#QEwuKgqFFZ)4E&92GBuLvA?S@KQJXnQGR`ws#N<0}sQSRuDLP&Y> zzwpq)c?w!MeBmfcYc1?hP{*%@Jql_+sJ&G|iIK6Y07}p(+nv@eOIEgihBCWY~jYjF9=#wc)WrZy|L(B1uYp_c(Q_epDH|4K|Qkz&sR|4 zrG-}#bbVolpgRliSJ3>c3m;L??l0~BhJqGcC}=PK_j@d$RlmmypHgXsFBHC}W~Mz6 z(4}=;D~_+!voFz3-s7yjOlsoa*Le&9dx|F7qK(Tys%V{!of)l5fo z-ZQ&jzA6zxV^;SYfUyo@D%%wDZp5(>RKKxpe}xxu zcCs8?0fsj8}YCaNl;q9Q6271fD~xbJs; z_c{CA89Yte_x=2y&+~il{p@|eXRWo@UVHDg_gQD3d+v417A3js!GlFfeKqaD6%TqA z98DVN+Hy1rb5-6?ta=C|D09Xi!G~50P2Tx!lSXKSnNn;}BZJ)8^QEe!ahf*8tQ!xv zOnS(bTjY7f#BJVud-$R^w;sPRY3?NW)1=)GwN09)OO$O)^1Nww(mYqomZY^BB`y5o zI*leCn0Q#D_Op_fYBZx@YM#qAJ>K3)TA^u4t354Q7n3$<+VtxWV@ApQkpqux)9As{ z2i^Wl+MMLll6EHT(cGkpN8Gah`jR|6>43{UoaFZ3&BnZZ(GzE9%zhLzZTjSC?kGGK zdeogMPaNrZNo#rHNYV)pd9N+XX#-;c-~-_~mjX zG|heDNckF#9=$%zotNcj%FmZy6zUVFycYQ==|U1(q`A^V@}9bP>OPIiTk21go%N`# zv5$Q2lq1vJ8IW`}>aO0=>S?*UL^Kqwr_n=wqm48wU*uUjBQd{;OWP7n)98sK)9YiT zTBF`0j~&x!de`asnj38vb?qv@mYl6=4^E3_x!k;Hp+-}$c{Z2tEq7b=$mwXYTcY$a z*Q#jmDCW7mbEYJ_b>vh=2WuL}b(lsERCPS0k?woqg6Jq$t{^&IqwHlQ#^ehdSFa+4fP)^Irvz}8^OmyQO*gOgVDWiAMA@B)TsQ}^z|A&-aJ}q5d2Es7|V%z zwER)kG~t$SiJsJQPn?RLG3dO9ycsohZ1L&uDY!6<36ptWw|?h zp4k0_>*KypKEC$x4Xy=!k_YI~`chT$5KWu7$D7H?!;{Cjaubp#yWE?MIrewP$*zz! z&i)DZiGsx40=q%kC=}}iwoi}?R(~bsNycc)C3 zz;|HDugLv1agh1oz?VTEEEtxEObb$45Z^%!cMyM%Wj9fB4RJoXKW09al&ON%-$Ft4HMa)ONo~fuVVfp^H!8^MGY_6Ux$Y2q&H)}kfjz9k0%~atlPduu(}w?L4GnY z1|!%@v<2>@Oak)^=GaMt<`m)wi6152#M(CzcV*s;mVZ;Qor}GC%lb0uLs)7Eaf86^ zLMP>E!Rmcd+Sz{rJ&Tmnq=bmCveZ{d*-rg~greS-+SS|S{(##05-(x?Ds6j}cmwnG zq^u|2OuU&GJI|=Ml=wHK|AsgexF7U%Qtl+4P087ISI{3JeuQ`>@k-*?Bv)?|KS%m= z#L3J@h&IeY(eM=W6_i;)yiIbz8pr5DY0+#wN@orkUo45~g zAL3z>+jmg%cG7PrJt@!wwXfA01mizf(E}I-q2~tbFcu>CnaHuz3(Fj3H95## z?B-S<>|zIS2Wgj5q1|=d}FFv7{a$44U@C0nkL%pYw&LLeux{L&Gn2f%d z9CA}Vd^SQ#Lu!W95-CdsLDP0j#xe9vE<`E@ZK@sYzpMY=vfc6?xBaf=eNPG+wRT`X zO}qQRphGTK4O*blkgfd+`i&zlA5^7j{m%7QWxM-_%61Qm4$9E9{>%E$@4r%T|AYN2 zHEr0uL1Q!;Fm=EL7wy0MghpeBMzb^$Eq8Ay+kN-80sEu-G!3@67Tj0VZ=j|Pj}BZ` zwtFCI88X$gG>T|db5Yx3jiSZT-Wm;xrn&V-`$Y#whY5AWvFNDictO!g(J9EMm+kI% zxZly}Ow#5^6bLFJz~~ySCAu!UQ6sc+yly2dSnqPTM7O&Lv6DuAJE8}@wxPEMXl`6T zrwy<*ZOnv$^;|8LUjLzvtuF0Ylw&0=kDk#qzwgJH(fY#i=y}+Ft!%g7<7rjVi)Fi$ zowD8FR%>orRWj-oT5|p5G0E(sFHBCJnp`fr5j)LIX749wBri{1MOx;dl4Q0xxpnf^ zfVBz0f%aoTqZ=qyoHN=5P|7aeucm6W5&*M*i6OgWblAxcb1 zNohjVJk3dIOO%@mpG=unwtM&xqS-hqNU1=+km#sJY56IFmLe6UoI}1EsWcTmp0c3^ z>YD<8P8o_cA`K&ug4vZa(VI~z4|%nv%rLdhGqufQ9jG^Ly{T=5sco&P%}1M4_oZxO zJ9Yx?Av%y!k#g8YM>R@KOF5cyg0$1#<1)A1(rOrv6 zpSmb@8PLkKKB;R`*8y!z-IBUJbr;ayFZ7Y#kaz0A)Jhi}OFikLGpX=1TNlnVMGLLxV_xTr_Q}E0>Wr%SD-K3tZGXZMloG(_V5>e%dA%bxqshqLQ@N zUDPLyUJuPf(uTXVG2S|qHrdoxZfcurYFlh-TV-lnZ))3WYTNDAR#u+ju0HpudqTRl zA!pN$Xf$%nu+18kmEQ*smUr6zv_l%D?@5Oj%X{?2&zEX+Z@-~w8V#NE`FR?ZO&*HT zkoU;p_e{~~z9O%VwBujM)U9ckC^YpZGL!F0~bvfb&4=_#6aU&?(=H1aLIw_o}VG+$rFuJq=$>+mi0_4z&N z_m$s6V=tt;R*gM+Z*Q${a7ucvYfIjJ=)ZKNd-Ku@fMydFXhlIP9oK1ABjdhDJl?raz?7u)`iVeOkK99n{B@^GD`hZ3`?I+HYu~F57sr zSMRVB!%lnp(y@-nd*pC$jL-+uH4O-}lJD}2IR?!)XpupfvwW9ltTbqiL9Tbk_in~I z!`*1m7LC$Zcz$pT}#oo-LP+ zEtk_hTP~-2wp>p4Y`JV~xt#9Va@p8&*{k>7ei=$z0OYPdK>GZ!8>o@trWw@CL;c+m zgdENk@{XU=-Z}(smdDM=GpNu*zMPLTiZyrKv5ek&MFQ$)&|rgx88phE@gDMKt-o4~ z9G)>rYX)*xLaa2dPXf6u0&;y4$n{Ae*C&Bop9FG!5@?Oq4CKz48p!oi(A+r#ypTHk#s8T$-6Xi%j=#|%1Y&>4fy8+6e_-U{rmov7oQ=4MoT+?ylMmW=8Q*A^hx z79iIaAlDWk*A^hx79iIaAh+Je6LkG$yT=|VYdwN`M)e)(xYTIld>55Bwlx|X8C5U} zD>UAV%U;s7QKv`2+ecl7mfSJdHLWZHcyIIrv zl{R+k6)j^6psiGECOB0K(96sEXzqQHvicg8WqS1v%5Ln^ zZe}TLPSZBWA)^nPySn-e@-6lC`910PmES{+qm47PmeChSF3@Pq1h0pNM@P;r+ub-@ z=#4Xxh9iECHb$=rZP4ppzudd7Y=>)$KSqlid-e@!JVtXHmw1}}QS~h?8&U@Sd=F{t z_FCDH#sf6X?>~PO{IM)E;{n?+zGCUpHpYzkkSn9t=sM#1%J|>^ zPiSTy`CjtxAm79OCnJAV`R|Ept_OMz`*&z@v&^4w@hg%yYyTV3{PpF3GV;%yjVCvr zs#i1F1?Ig9?0W)lAf7@zg?I_^62bP9#K(w9x3MbmbJ*jE%b53<-1@1`MUTyUKWe9a1X%Bhm&Xbq^AYp!Q-(X>wjyOa zDKAmm&xB$>CX~QvQhrRzgQR?(lubej@NSd+eR9jlr6uZ`{VQnrhS1eN1P9n^>lDj= zQ*!HF;x)`)mOOx6Wt3w72e?yje~WbNIz#>w<}up2o%rvP+nbrEG3Wg-`#*_!=fIY) zXIpk>mg+3yYv+)X!?FGrEuY9djodF0Hx(RcLHq~Oe@jYJQvQ>;4e?uot+Arh`VMpK zs{^l-TwRjy#oJ8;+t^!YZwQ4gvQtR8Oc~wwOiGTI+?u6xvE0J_1LWHzw-a^F7Cle= zcj9)$?TA@>KzsFhp#&ZfZr}}a>DvK%bwGRdtHQ;-AJ`UXMoHe|wCQ!YuOsx9q%Wfe z-VL>BPoNnob*Nz*{cWybn{!94wsF4#_uEAOw}>l=udvl;h%XXf5^N>Vb9ndB#+?V0 z+ATV*_JOs~(@-dO9`p0ePci=$b3Azh?hlxMk9jxdywhoih=XFS^{R}WbssGs%W-T# zJe!y^F;GZ+PUwMb;*-P;iGN9)O8gs^{Rgq0S$`*fP3WppX1%K9ebDQ2_fEY-%3pQP z`+4jiE0^3VQl29BBb}47K(MudGK+Y}F++0oA-Qds-(%ee%6~B5j^`^Zt0gs@);Y^^ z)~LVpZsh>#Y(zX$`p23{Jp-jI?li+%>mKG=%!f(4thNDphUY!zuQFf3yn^`;n9ruR z<}B4mC{}>>q0)%Qk1;ka;iWS%D}gfS$j#u$-WIqY^xJqh^iI-;Q_`a3D^i#G8+D$70$Lf;$#B$UX zD`I`c3gS_wh&9WuXMe>G+RxYv?3wmL`+0kg{WbfPJr^s)hxSqXZ-FHHL?AivzWqty zgJ9>t5!@ZM2TVkI2x%G;o-7+M8)=@KHsEuivhQw&&!tE!kX9qDMH1d-B&<#Su+lIc z!{;&3cB%l%ss8ymKItZ`K>e_i^t*^ujdTrs8wqPqfAj=;OZ7*L&>we0`t?{jh2}P&GAsy z5F+UFt#3Eq<8~?VP`gD2EfdskCDIy0Tj!xTEgL;ryDft9s(LT)(9Fdo?#t>==$TCToI6i)$r(FKZUk;w(W61a(@_zMy?XEESZ6 zPZvR_i`bL3joXlI^xof8_lN-Ix9%D#MyGmaIYA2 z-9znz2GRPGIlY&+PZV1F6r?7Cig4V%IcaU7IoFiHNWc#;w(Uy|>TA$ILAh(;CF4ER zeyE2ut^I72ogp-$5rR6T!Rs;&ZJa?94SJ~kG`ECbcAju$q}wkPRFVg@lqFUGttNLf z5bQy|2k9u%iS`?i3w;}DJ4q96Mf(Hb9tP5KSJ6_1qtorrA%`borpWPS>T|h}nUp;x zdz8?!LqPS2gx1I)w9l1mW>CxQESCnmT~uh0)+btug;p}y)FHIqMy{VhgAE#H5VaIw z^s>hbt!wYng6w^UJDq45xGN2snLP)`^N|)An&z$pZ6j%d))=H|TY4|gSw-4KAUh|T zlaak0a=VB?%ib%fWD3x}?1R~ry()o@WuMGGBi`heIB$?old{#+a?RuBI6(D=t&RLgMWi($h=!!wtJ(L?1B$~C& zVpVR6;WqIQxXra@v;)X3;n7kIw~0a1Jft<}wnZuUw5z4S)0{ihpdy1x1?Bcd8t9dX zvyUZuW6W|#AdTw)|I3}I<$xaYO5{#6`eqn3kD8Z4ZiUFns+R|k(kOSeK^p`W=Yzgk zQ0Y-mPHNL*)CDry>vB&3on~1q~%^_*{kt#9aM)d3K)D;Y?ms`UPm0pbpbJ%ntMVMqUZu+o^AYaPcP+?g$c1HngdE^DkSPZJd)=U|2KlrdhPInXe1_b-{XmC=mUjf{xFGS>GM%3W^LCw!Y!H8aYILx(lJOE zBGM8KH^rbPf;vt^iCQ$4U~NQgO^IBC3Jfa34@+q+wP-9`DqNz09f!IIKI5Ws22C{R zAwjgtw|<7<&NgVCK??;*%%$7wBi6gr$ocwK8`@eyorWX9e_g9KYg)%`npTRw@3>QF zM0*UXAi|h+JZ#VbK|NpcXdRCNoe&zWqLz-QW0%5M2hkD#(}Xf^zx2g+>%I z$fwm~iAFW#(nxDogVvI?EYR|Z3W16R`E|(Zn7=Z=GXGeQCP4itHyCJ`AfKB*%9D$u zjR$R#k((k~qz|;d{OLe5sc#O@eBsKB&tF8^GEc4mKAOLVT7^OjR3aq=<)1X@j6vtA?_v$PYQw$O$-(tZ5M^u8sM!`SQT5v>a+>mtt=~Oy+N9`1GOpAc7yvm z(IKGy1|1!rhGTbW$UH6cyMf62TgAWy? z2$Ji(0(dg=TqNp?qZNTxN^WzYwl(EsWp%l}eM3Rxcod97d(TLTUhv6+c}NSzp9>}; zJw)0xp%Kj}m|d{2i`YlGf~A;qKswgbNNC+KCXiWyw3cYKK^uTJ3$1Ij&Z=`ggBp3L zV4FcZJ=8hPpq3sg*ke$IhxB>I*WBfDd>sV`Jh_6y2BD>}=tO5#IKPIvT+))M%Hi)!B8{F}v zO#+%iv<==@J`3^UG?q1+?u( z^ImG+XXGk@j*)f}=nUn~16>rF*jMNj)-Q|}W&mXhx3D!*c42;D*FsoT*oU++Kobla zU=T;4aJb?6$dr)l3LQrfO_s7gt#B&1<%TwkNGw=yXhel`L0e#Gi;1#p$U!eO8(Pn( z$MsR+D$rgsTKqaT39Z+bF4MX#?lN1WF5^6;X%a1UW4$6*xWnTX?l$OkgZ395!CVVM zt`?1D4+)p(c;P7*oi$~v47y~{6@#t|63uazMm%npL=S7>o{jL_8A0j*Dch%-IUk`+Fnnt>p`MQk6S8zdWN*~IE#-Xx(He| z(KSzV(L^9eXx-7z-RcYKhSBeqft1;!Nw=4}E$Frh5sIJ*f=YwkT6fFtmhaNK8g7X} zeGD34&=7-seZy};8zZ#tl{M;}Y~-dIw4htLu?om7;n5}=?o@+T8RT0q%jlbH5V;aF z=oOAFUv9Xo3|cR!+YT>IEINv#t?WP0y6qO!yEPDfvfC-3{p1QdWY7_VjvI8As0wnI zh^_!#7gQ8PiV!6Nr4V5Rb(AJ!S=7YPnj6%XD7S`O5ox8M^)+$>4H`-`0$h3yH9sUY zX;INMa_0eUFldHBK5aH>Yir0YByFjotpHkGQ%<78qRpgj1KKG_;=1B7NE3RU$1%nk zoIP08HxgCg=m64T8HJ(~LX-Hp=rpi@dK-kcK*MHmYty7ep^+;#$d~J9 zXoI_ta<$Z^iI!pH3L4*i666F;F=eM4G}9pTjn)@u{d|wx+xAfRMFuT1Xr+hZ%C7Nf z-PZ}~j!}u@ZWo%|LFm5ApuGm|6C@Fy?s1}nLhCLiI11hU@esK)!joMj#1mcn<7>(?rq587~~xxP=znYb8!R6MsB zo^%5@+oMsgE9FX%_dyy^JjCPr`uw&PmxDVMX)e($K|N3PNbC_2s{|D19FwYSAONM?sGwmMw)` z-yQ>d3?-L7bTh8paqj`&LM~{8LE{XXXwX9j`6XrxP41!fm`CnHpru4BfL0T&1=>Kg z6Q}~|fZQW36&pAA5ZX4O5$z$jFLKKDI$u&;(o)LSL_H3Bv>rzdI$_XhgU%U*{<=X6 z`>)5<8g+2ASX;=Hs3)kT5#-Vgt(ifzuOzD^ucXk>db7k}lWd$u$r8G#~Y}$#vpO#BuAB8;$4o%&4U= z)9b6adVN|pxcOd*o+W}xgQbz4M@my%w8|ith7w1NTpz<7V9*eQhWDHR>6f6d7L9d` z5iZf>o>N^^ZpzLwXs$sE3|cIRnte;x8}4$0j`ZB>wL_3DVQA|O+GNlbgQ&UZ4wTw$ z+WWfEeB7Y@1|2fUw~BH-PeIFBtp%vcpi4&c6;t-Qhe{I#^;(29lX6Yamga(FZ7SVn z5Y`Ttwt;eO!ObNq@Z`L81IK-l29i4sh-(ugnW2U@!XTeJjd6rw#2Kj?0B6F@LY^Wg=riuSLC<^_tmh4P*ojCaTw~QLnUK&0Jbb z!_6`%&!9qsiVgDh^}Y$MA8EsC)H}+^jW=j!uSv!#LAr!T8)dlT4VrI|Z^0C!Z@NJ~ zcaEXWH)ti%I@GwaX8-lt1==;zDuJ+8A{VsRpnV1%H0T)7NmJrH&_&X!fv8XR<$Grc zjmS30F{nOK6uB>#Nm^^<*+ilx-=MBUCCK|2+7O}%$mtus1r5ImZH%E!CYp*|mzV`a zPn2&g^j<7ne2+6rzCVs{kqhn=d`u`o{2C3u%lsnp7XwX*<-6f821<~(A^q*3eCKyL zxveSxb-}7yepL)Qzk@tGh+nyZw#LXi2K4Vl$#;ZD$hT>&5%L{yNPe05JILDyU&FW5 z8(kGHWF@Rq)vmTV+S+XXOJ|Q5Qe@AQi^Z>qP{5??k zeSGUS`%U26splbif+Vm&N(E*KC9sg%vX~cKk3q7KI*0LThAisYLCO(Q3izx2ZAr<} zmQ&k9@_pw3pFs&skzebw`cgifHm9@C(^*R@`*R+9GL@Fkqva{2A7np2LvAwrc`p0; zUG{T2`#GIfrSf~tY1E&|-cINDrqkJPskD&aZOrigfmW zn3TG-vmtR~)-{2(OkgV}kUO51|CW}IrzD?`u_jQywe-2VPCB2Gu|7|%pE>vfYy1K! zUtllYL!E<2A4JVNsreqZaS$a3QBpr;!e?2m+evTFoX@yeZxL6p)SH6U3b7nHd>%PG zM=clq>J!ng#!Ih)4(~+{pHVMT{@c=@pvX7zS4e-V<<#~(^W|cvs${-G`b}-2&FR$n zBdJ{-rsT`STLfEovyJ#RHE@4Y?h)-baQ08Up1!((-csTP*La~zQ zt9%N?T5jQgGpr=m^`gkwbExx~Kzo$czu>o&rT7$x`d`$O!F&hlY?t*lj`Ct!_%)8> zZ-{>*l6VRPb_PDjQbQ>@lr0)eONLT@u*g`S7cQO|68Y9*gLM~64WzcA^t93RrP0(d zlAd2dpC8Gdtl;R65V~ETGvb%z-p3j7I&mA$h|!!8W4ZE-rVXRH{*0!DqiN45;t4XQ z_HGme_15e@A>@MefA$9Gcs^eP8DY(6;WB=|XKeg4GG( zD*jfa)sB6b&GoPidv7^=uQBD@v96}n)`ogYN#}E5_$5PG@#@>#CAXyQiPVII zM3znDx|dE3e3}aK^1RnDYI}qEFyY#dQ06XDG(NG^N+^m?da3V`%jXC&n(}*< z4f$M7qd;BYCV|Vy69dagm-AG^0Dfx@PsRv$8*QFxuK=zWSd4t84N3JE`Q=GS-j2Kh zThx&Ax}o-sz|){NW?hW~!zh`IJdsZVHK08W@!TCWaQ=Q6y9C^T&nk7oZy#FL4=A&R z8n&=hFZxMOwl0sg0l-TwH+x`Okq?q_FO139%NjGYRb`U%GPyb>zcB4=^Vj5 z9KrbI`1_)b`4rb})KD#!t3OfCWm00q*O^~nsR;G+*-iK% z&e7Ih*78I4Ml$;$KuQXGBZa+@BK@GQxpX=2WD}=T+gr@{(9ZW*FQ1N8N2v2Q+T4IR zg{7L(k|=SM@)wEQQl>3OqSt^Pe=}C;CstphSO1RmC7f9=kiy?t zg$C*K#nkWudubo>e#&g5RSjv+You?YhqPzw@SGQFZ^w2eu^+C*IzZbe#ESwSfE#An z-?R1*axwPr%{1LD5Se@)6yWj3k5u&%#Q{y$jDBx_y}1T9ezFGolqWw5AWYriRv>%gs5L zf6ckPgmd{0&gCVX%hx%VTXQbA-`07SYt1M%o_Vy*zg=RoR2*Zihf%9msS}5pktu|DP`+b zt{FYB8Qa*5t*fSwHKUI;3;Yz?n$XjlaxB`qxp-GG?P*4jYRdCS6H;2b^arG@_>Aqa zPnwD6*bcd=%mbuHh%M$%GM~v>p5lynik3V{$!AG_R%1#&Mf?XBZbbjvM;7U2q4eCE8Ag_puZ)Jdrk7;|6o zDntEQ^ zS!%&t>(*uzbT8&UG_VwF5%jeHUFyM=D=Am*=v+gpSZD4-V=(T479 zQFpeeJNp@5HiCY}u2y&2+?+GwZPBC7lG|Fa)mpH6pC0%=>G|xdj?~tHG99V21Gyc9 ztG+JvV#fwPi5xZ~mx$;g=__#Id!WGU)N*QG6%hF~(pR91@BNs4_`g{D*V%8&h&Rx} zcbRV>SG3#q4&Ba%J6s1k(r>@R>#zFs z+s^dc0;s0?Kse z*j;DOT-Oxlh16EyT7D7Q3fPwKGVdJtIclj($>pRhCk_$o_45pIzRt<*NP9TDt!C7J zJALmXwltI6rj%^PQn%CQj>LJSH)N?s?89WPOO4o*Hf0*Ie}dGLDDvtO^6~=@Y6IjiYRs9{iKQ6NSe=A!bKJ25FDrZ&ZOhVDv0d#r zf?3?xYRhqK7Z9(`q78Y(1st{Eq752kezoIT-PWaGR^mPaW{~^}1oCe&&kA5%Y&}yx zrkx*Cz9qRW1*@yXGg-@1v}z{pd4lw>kUpLGNy;xHZb%#>4pL`5O5R2d^{632`?U`w zk!w-D9_3THuGV8K!lZ{u*Re`nt_D}76rw&^f6j>vu#C=m(Trbp68k?S{*d@GWiAr~ zst_u)d%Bvb=BWAVm|CQksg?M@?R9FS+Jb-F-lg`cefZDqO7KqNeFm|pep|5-F~pa# znb*IA{7L37UEdDe>-rw#!>|7U`Mt4#P-6I%l^CySW4Fh!QpZMK-;4a)*Rf+ByE_&{ zo`iq+wqk8!mgM5uv97UH~$IZ%CaJ7&mVgtJEaX ztX=^ngh>?No7)tA@kFKKw^@FG-)8w?c&7^TzvAojKj9nTcUs<6iQ)I~&+sYyH~41! z&6eB4ABV50%n1JGTs4o_k$`FuNr;41t4Q5QeU%kSj5JcYk!U1Ub&NEQG*+D>O(V@z zVI(usLUoO_ie#zcNNyxg^^W96I;+n`xE6r+VwY0LVJgd+uwt8FrtXt(fqX=uFY*kTL$Nz#9~An(hn#!x;Nto+)=HvF=--OGtE?{2{|@rD zvTGX~DAyLTN9B4K`i~=b0xgi&<*NU6sa;Ky+SQL3YyVCxLQZOK5;aFGQ9q>2&cK7f-QKhIRX#3aXnjp4Jc9((CBJ6ON_-hGtN*@$i#V8-bTCxY;{|o%* zd=P8L?^Oe=7bjF&_+t1&)g)3JDOSxOZQ=8FtVna*G#{UmP9jMhC`ne~Z|& zlUYm9n>d@PN!D)kW*w|0XeC#XhFnD&VHLTclDK{}=lanCzxmW%wM3aHP>)DSq-Ufw z(ks$Ca%ZGZq;F(EWME`aWN_r3$dJhABSRziMn)*HdnHoso|RseBt3_Ets(f_i*&1A zm7YhB;y-n~Ud8DZ$2ezM*cY&(NEvR*#3%a5LJVOc#<990l^~%k{#jn?vSR!ns@PZQ zZv&Z+k^DOMGh*C5irq*00OpgJe~06BEXKRFs72O+QOtQi z^E!XC548xL_uf&L;MU9sFrUPHEOTC+$HLUy8hI46Di7~MRg8D2mGn!|%ayBUt{MSpCr$?3YW7uBIA{@jN-N|zekgOyJ+8P}d%ac&k4Z-CQ;x7Va;|<;lUJknDb{NHgyLFS z;g^;+o$wGs;rfv-wtuzanGT`W{=33Ns`Q( z({Xcyb%BC@bNk#~bA(n)xy-VE$+jEU>)M)cam?Pm1@BhmMBVGP`~Ftqq&w^zY59lf zA)ckBr_f&?qBl85-JV0=;a!0qbYf?9pGl6GN_yuk^~icq!*Xh>Mii9e{M`A4^Sbj} z=b-aD=MCquQ|Y|v9C3c{9CeO4A3N8a>*3qN4Z?}xhT%rxjBw*{X1GF_h*`QgRkCE=yvWr)JtLHo~D9n|m(<)D_=RRlHt7L7VesfK9PEEPb@X5-4?>G0F|{n%&1&*1uOet5pBiMIbI$u-)=RxN|6?CRLQ&n^4 zap!SW*O}?eL|@NxWIL|uIsw`)|GavM? zI$s5SfwKVg=bYz2U+64UdCv3B^QyhG$oU#!7^sysYkU z);ep|?ap_d?*gxL)&albyaK%5Sr7cG^D6KLX9KYKQ2e`K9wqmG2yI4ybJU zR+PTgiN4j!IpiDyS3ImEJ**x*EQKDHLl0|259>$|t49w@p@-$r!y3`UT835FRvF=7 zIH;P06T%6qaX1tX0oMsffW`k>(*Ii0|60=LTGHoQ!q19SB-}mR9rDHDV#sR`doui_ zY8w7>82cvlu!i)W7RnB7m8+6aRh=0)k9C&0i&>nA8J&og09PnDt^(eQvqmC6K_Oa$ zPs;wQ>lPV#d9^nl!a04`R|A=JhFRLJ9Z06swfD2R(vS z9G{2KKSxB9r&0H_(M_PE0m{otezTX~D>vhQYT7Nd|C91!8CqaG;b!7qTzoohQ||3EKZmcG+H9mSQ>QF=H_ zYiYk$cQg$zwk{?+Iyb(eHtnG`Q1>VPOu@W?rrK6}*4|QE9K-WGw(CYe@hShR zmm3Y-H4tmXv)9B9iV<-wk!x=idmSqj;$XowU$L{^@vU0tuQ`}ERWd?&ZZIxcoJprw9t`L24hKPS*EI9*Y4d2T1 z%W0{ZJth`y<(r!PV$yHWE$1Y8TZj-QBBprI`4XauN1bWTV~8ip5ltY5KamK@M?|ZKV6~ebpDdXS9|c7p*mA zwAKtg{3S$;60;?sryoVch2BOCE%93`^m)0e$0#n5QCtH?amkG0G8n(*Gji+1m@S{t zS|`S71&q_u7^kH(LMvc|md*&xVT6{&2+d)Hmcoz zn*|x0-ND!_o3U9AItd3ImhuDw!=l);I2w8WuMrhrMbO^f6kYd)_xL6EptEYe~SXJzzcl^&j zy_!&m>~a1Y>zTCSEcz2Gw7g_xK|3UFk`^69i^R4@9v^*M@6)uIezzcPA`pyhJrk~7vh_{Tp` z0+AMw_`ml)9s7HnCPL|H$Vdz+zIR^lJH@UG1;-b0wsUvEIiJO6F5-&nGJH|$;|#&4 zL?C)MhJE6VW_)e#OqF%v3U-T6vF7(c#f}VilP|$a>=25c_)@fjo_Zs_ww!nDjf=FF zv7>mR>q(*oHC>9Ixn4Q_>6L~YJomqT$xL@kNe{l~&J(V9F5TtJ5u-!5b)UX9z8Uh2?^waM7I-gQGcQ-5vFt&SyXbk9EyS5d6hXp!7Uq%L6Z4gsSeE@_)FkMs(Q zW3xU~`E);f$^>oabx$GA1Xy+(`C zYlP8jm~pFE*#>)rvdh?racdIe)m1F=}gwR*hn-a@eXmY*hoc>JGN56KC? zz-T;^BUz8pctiF}Q%2(*8I3n*G~SWXcymVMo!Dzh?yjlqmv)NVFHMcxFHMcxFHMcx zFHMcxFAXpn&tf#5#%SDTG#+3yp2cW9jeDf68IwmClV>v~&x_k5ZOzC$!pJcaXL8|W99P-poq-izzRy#q&Z zbSue!PG3-Gfmb>-IQ|_t?$Q6*XTn1N{m*1;@&niEEDxpx^MXYQ#R*e=EeQ)nE@5fH z#)Q{H1$7pn_dPF^iZ=AiW&Z_tDoyP&zRO<-A>-dy4%lfkQwDpWN&w3W$ zd;F@kzLxdTR*@zBY$XZ zwSHu6vwn>4NbbP5B!7>>70`wR9k z`(AsveV;wT9*J-BkG99yWAW5^nLXaV-=1JUU{AEaXiu^y+Yj4Q>}mEQdx`x`dyV}= zd#n8;dz<}Zd%L~I-fthWPuhRNzX85upMeLyZ(j}M1dav%7`Pbt*m>A_@`nA8pE`S- zz0R+2@1hRwtt`Ynl|{IhvJm%B7UAB>BFy_m&T5<`E#|h97^`q*;W%_FX_a98EVc$* z1zifd6m;P$V%7^dJ4&fE(9=Lq13e9OIH*JJJ3XVyz$pW#44g7>CW12&J3EtN=bhz9 zFCwi#`UcWUq;DdvLi!fcYNT%?twH)Ec0L?Hs*6+)sXkIFQW{bVq?SmnkvbsdA)#Ct z<-&hJ`UtU}W&c#pkCIw9jB@{|1l)w!s*i*a5b-!8` zdV>5+*qaG^GhuJ0>31plWpKU>&X>XYGC1?mg8AZKsA)OUi%2VwzJat72~To4tB~-0 zQ3qBy-$p`w507pWc+b_K(!NNGqdkXj3D=T0wK5a7 zWMY==1K)<{Md5i-L`Y(_Sp2-20*NW;-P!1Yr;%=)N!s^BVjd*sLE`2!3i@MJ&eQPm z5M3%=pFIoD0(MR1@QYNE%80pmUc&cKQ*kLR|T*wYJIEqJOqsUP8Uo0^CcjqHWWfn;+?O@!1$XD?>K%_I{cnOI9QlQqZd zi{3;^&cZLqZ;)W#;u{56e=g#DQOfgjV>OHKxoR#x=i*GUM(x12jQ8O!&oJnx7|!53 z^dT#XZ_i8WWA#D##=!@I<-xB67YCOHR|Z!He;NE;@Q=ac3CRhm30VnuB@9d$n=mEe z{n{(4w^9a=t7z~8>|X_gFUPI~*CJ`k6^?)HRZx$etPWgB@O;N{>@iD@?|dUqq%Sz` z7&#oHf9?wbl#C?2rHT{&uI8zP;LlWI!Z-x`C)+Bqqy&mV(lh!#qg7eUg?|t@izNg`=CENw>d$GOP-gnct$U`f6Qlhq$ zrtBpBuzeU~)hARploo0dY8`49S`vD>&hR>4MBJS1Z4NUO|mJ1IwKkofXbEoR!WuomI}aoYl^^oi)yD&Sqzqv(Nb?96)p#3fB$S3)c^) zhFgSNhFga_AddWYcuja?_z&TaA`e9##r%9YcF1`IX*$yE*jCK5tB9;9othRc+ zu(PYgt8)uF4O4f>lM1+N{tkD_&S0PI40cx!W52yRb^-7Ga-|P^1)t|&MI!LuxLbp7 zlEzM{Ab0TUp|tEveT=<3`ILQh2S@V#gwwH;_>`UH(?}OFns|f=JAe^|Aoi(LVhI~%fBFFE#**o*G>(cGgm=vC=k z+4;N(BvKz~9iZt^Jn!Dil~EK~?C&GLf~4PaFXf6ma>6&Z{P!Oi^ep;QTO2#C?L~i8 zp}#BLqg(CsaU5J3*$Edt$Gx`8?j4RRF+$S!g5|ylW&)6mB6`m69k+he>&jmAcqo4w zeS6IuUtrlQ(1bM)S}@B0U0<+H@77AIWL=O}Bc_Xez;?bT_XgaSSH#}Nz8$5dHE0=l z_|)Itu0$UkitQ6VkoN!Mq8%&48u;c8k)v)a7_V|*BV?C1LRczsB%;{C3q`P4mz{sm8V(`8lB zHt10hEd7j6zcl5rI^p~wb4YZ^di62nF0eP`h%<{vdX8Z;(yLW;efn4I11;;dMc<|H zj=;mYM;~b`aV~oueRdSobF5!1F?Uk6IuuI_aMdor`7V5)tit!gU>(5c4EzwlJ1Vb zNYsAC{-Pm%mjNl!n| zknWu)S51u%S*!lFmp>2wwemNXs@;woB{W5^2QK#JoJ0Z`LwUKLst-(#@!~3G2rl5A zsaursWijqm81*acTQfc!0nkMbcV*=4SPjV&@CKR{Wz-fTpq=axi$j4gx)%vC{S zKlf+3rpe5P{=a%9<(%V5b8VM%-dUt7oOR54VI-tZITxSx);{11v3G>8S9U~jI76b1 zX4Ub^{!jVz`|JPn7X9B?6BM69_nM|_xOF`>IW><&ho;EyBYc{dJpcahy)ys3;x{dw zR*Ncay1~xaTFd}RGCS7A=3<6PB)LAe0lEHm-`3b-(S(SUYXkAaINrHbQE6Os&sh2@tOIem6V*E!A&%Z*Gmp)VD(_GB}L&DHc0b>O~G{Joe z;nZ9ca3t3nCwQH;RoY_8;tByAxzdo>nooJMPWeWtzM_~!K5-GZ4 ztVcR-yrETQg!H+Lg6ww570pF>7NnSDjOCeEecj3HD0t5?Ip%f6W!VkTvdHC}8#i9w z4x6#XjJ!vw{prQEwdpmFwRfN{>eGJh9f_n%zgcavQq+fpczG0`dS^9_tD^Aq`k1KF z^zH#9&VkkvpAy;QEbLMQ=(DnpCPLU1IEP>B@LyV+K2Ah*ff&Mjl7O{ikJuN6uETPK zotORIe2VW$@??!be|x1c*Dm@;9#v$JZo=Wp5MSPC^2?&6du8F#bPc-YHE1=gHyrMC zK#Ta5tWk2s^+);C68_$o9K)v>&p_rV)+1oO`hd>89QSDxuAW*0=onSx=h;eqGzVoj zLB|R7-Epk);>T}+hW!TQvg5J_5s-X`c1>&#ay_H4V*pJRQYWtS525_WvKqR(ZwKZ2 zo;J#U#3|QWJh?0gWn{17xZYc$J^M)Wc0b-ieVDP7LBeNEiYx{B{7{h!w}y}-1m`KX8IQQ68KF%N_!df%Us5}#$EqwuD2W)w8hL7 zA5nw5y0F(-r`C&_Yx#*+->p6|E?3;Lac2Nn#a~-q1 zB)(TJRPPL9_@Rz$o1}^j4C~p zy`eo-G=Q#4fnURh_~Y6fw@fX0P5mr+yk392XwOmRtikImpQ7vFx}&d0{73;M*u(r} z3I3XZF5w<)-_$emT}mI1i<2VUW2}Z>?ZbP&TUV{$uWpGqLSEmwE5ad93Ut@o zFn-z}^g88#``R6ISjDG6u+q3IoNEUoGMv4|i)1bI+M@S=^tiIu*bg`Oc6^WfR@Fo} z2jjT|&hAU-0ewY!02XgVWXc^!_)T1!{L*flj>sp^{D@TL4yJ3n+{-+R7BON(E%GZf z_$?lN-7Fpptj{sH<`i#5uJ2ubfu^CeFyxC6WUS%JGqL3iu*e}K1z;^ zzuY&$naI_TyZjn~Pf3*Z*LH>ByZ+(E>M(Q;Q-{6pfw zBh<1T*BgRFC$20|lZ<%Wy)L#n;`V|2^gc`aGYxat^o`p`p1j**IO{_%>T!?76D4Zc zD#z#zIYt{@w)Cs`*#%93HPRRF!M6|K>@KV71$jDHdP2(5-oHwD#0e*GbRImT%dJuO zgm+zr`y0LlYI3DTmuG|bsiQiXW1f_7;;#XD%yKm(s(76yEu(hm_G-VO4qewx>ekWJ zE#y%u3hnw1j=KhETToYxmFY&!x<)@oi3|D&NX})quG2461Nm*gRauenrTjWj<6n`? zwXm<&UElu;TW(dCujAiAHG9$5^yzAq7O~A&;JF{l(|l<26~Em;-pXy_1j?AmDqdFC zUh^!jY5!GT+tQntk6Ul!t`2S}d$VzHR|ZdS{P?=o>lHZ-eWBxO(UOT>O*zZRthy}o z6`vAQ$^A&Kb09?G>jy?no(}L1xhw4zo(sLTNXN{wOCoES_?z4@JfrWs$!MA$muUJN z(m&vPJfGp*ChI*lvAjljy3e2c+9ExYC@c5Mc_l9P<5;dl*hjh-1jnw*-9$~57C}b0 zR$6`#ULmWOTtT=ikk)kb+|}YTd8GSR=U$;kwB&}B3^lXAJ+T^}9L3sWh;zPN1DR3x zY=p%)e+UPC%>4x|<;@mP52)^%0wiY@qe<5-ak<0a;P?PO@!Np7 zN|v%mQ0lZiK?ZyR=jscxkBNLU${mC^?g#Jp?%fc%rWUy!5{E&$l4nlTgCl%fkH^v; zIo^k39p}q#$9}o{floQp9soL^ngDNrZiyUV2WXXu8xJG@fj$Oht%t}zLC<09c#Y&; z1<6&Frs`{6`3ArNKT?DpToEB9SMPsAZ+wVabo9czthDVkXnSC%-obHu5m(smJkV=w zyl2sSbiLw(^mf7V5J-`cMU!7gal(v@65w8I%20z)+#ZrK7!?*|CCp1(ZKKl^mc`CjZJuDbuMd^{g^)#xFQ$9|P->W{r0 z70tn@iPi4)6?)6JydI>*BgNxSGv=4?eev4J(+UnsGl}15PpQHzV^5eG;J1)6nsHth zo$s-?WsgmCxPHy^y%(9eTEKf>bfJeOB4C_>BUzuS8Aph>LK{}QbD&?QEWfeG8pNLW zxiWkR`!7S1di|>iSCbw!cO9dCv63sHZpjU~jVI><>Q2!6;vXJ*;kk&HRJmGuYiAGMesbGvc7_M&%oxuW~(&VHQ3$i73>%6XMHX>AUMeC8yp%OX$=UD z4oJz8XRJqq^MmuP^5BBtLhFg(lHd|+ zX7GjJ*R7}UY{j>%*}*lzHP+nV%fXkeXM*1izGBS_z8ZYh`fBjC;A_@`;P-;NtmlHe zgS)M71@{DBw^j!$f`_b^gO$NItxXB{C){ssPWWQN7p)&8R3}`qwj^8))w6ySY7mNA z6`_<+s&ycg5o&B53^ffkwGM@D58ZCP5xOJvq;=TY>Fl)I;2ZwC?6%HsXSdzXscNc#&|obIqn(+@yqP; z+yB{k+jv&76Z*IS@1}fGF`&BO-9U9!-4MwZ;TMM*U!?TZ4ykE)Tk0{4tHbAB z9Q9?q>nc1GglB1-f*qrs^Ab--c&>R)X?P_|0wbo3+Tlt6ssqmi74e4M%OjyRLc--=cT$)aDO? zx5Bp^_|{L5@4&xUG*G|AKUpNI|HQiie(%2$^f%R?fKTBaRPW$7{~O|&&UaO+I*WG$ z^&Z|1{`KNRdJz*hsO#|B6nJe!C0li^x+)F-i%}1h+pNYa z-D+app%Sg;Rx9AvR%_M3YGbtn&a$#phSlC`51eClRE@2C{KkC~tCQ79HM9yWjG)!o zDpJj??iPMO5&x~x1Gogge}B8x(<%k-g=YyeWuB-8GEY(pYOLyt?ppgFIW?-QJS^ETIFy^aEMZ>9cp`oyccJJ zBZH${WzZFLDSUKrjKaqT$GSe!Hyx*Zjt`F4u_px5`vvQQb*>;-AFOvpYQ3LO{7Jz{ zia#YdMd4F}Q+4cV!D%{5?O7#1J2+eMp9;=#wbrT?qgJgld@lH$(p(-~t`c4mT&5wc~EB&Lvql)=S@Dt_vSn!xsUq26iu9UwBe&Kps&*G}AXK{ggmN#5cxFy`; zyzrgy9mTvG%J)n7kMJK->%14f=X!-(!>vvRRU_vHM84cYltwAJ@5n?!6u2M?qtNw= z^ifPYO1s`NzM63rGUHj`s-nWE(A7!DRHQV;QL%C;i=_IBdPn6--zVy$_=>1PX{w?s zsfhYUeHHE(_0!(|QGe}K?cwk;XSen-l26_EpnL9y$1#X>sL!X|mh~8~B{n{?{ zYqROO)~M&YS^dNq<%+F z)JuD5S0FRHTAS?^cm-}TeNZ8NP)2>wa92dX6VdM!(eISd?-Y3rUW1#d-e-cFM~~C4 z9%qItrGF`kXL^ggB?>R~mMXl=+fCu+-g39UeEoE|wO*&!srcQ! z!xcWlJ3`?jy(5+8DDODM9Pb_PE|5Zgy}~DYr?~a>T#>2d6+Y8DPwCJ1&UaT!BmWJB zzv+F;9p!!7`?g!*eaHKbV(#+pa<@nif49Qll}7Yh?;h_S^^*5`_qryjB} zA0P4_a@Tnedk-u8i1%Z6jQj~b>W=e%;{8Nv9`hbk_@~}aRr1HZUn=~B_k`k~^qy4y zzw& zz2|j}FL*DiJTG}KDdtb!pWOA{%ihbn4}bRl=C1Hw_x`S!H@r6#e$#tX;Vs@4h2Qet zQuuA}ZH3>F-t~I#UGH7x_7CqL3cu&Qr}(YDb0_<9?dq=ZQ+~?b;0J!Bn6%t^td|b5 z&~1>vxFUs%{bJWC8v!NmG}#F#RZK6xmpk1r^Lx89{BplSF_nI$_R4;M!qtAY!Zm(B zh5P&cm8RCORm=c?fWmctox%hCA7_uJ`NRIDeGpBpdwkQtVzUO9Yb@ zp5pK2&XhHQ748;U6xdJU{r&wFf1rP$wg>qKDdu4RV4Z8NzgF8r{KFM(H;Jg{H^ToKjA;2_$U2M z?h;u*_><1{vXsgv`hW5N;->n4_5UjM@+&byn&uZO=}frT-8u>Wb7A^51=B>Q=?vmin^tw3$kj`bz3Y z3jbK%bU&YZH1%_Zf024ZX`W0ysjK)^>Q@TOeuUzmPHk5B52-)7rKy)wFDv}#)Zg92 z)ElWcl=98gn+k79>F%Z8Nxh@+yFp*~nV>qTb{7RT@(uf$pkJVS81xSYx!Z!lf$m{2 zBpBj$4~7O~-PE8lnCz|$<^}WIN@h-%2lIpZZdI@_Sm=^h*?p@tSA#4q*+lhv!aMuQ9H9DKR8M=A)5mot(17*#2jcL^PbtkiNT3V zWAmQX!O6kN3ft@_V)oN3I6XLB<=GHyaPyf1Eey^I&T?sHLJ>2elHk+9rZdM6xKI8|t2DiF3 zdI$QF&TF%xh*?oPv!aEX4}DWHHXkZxKIAhKYS&EYes@stK=7b+-y4IC%B_1Qlwl@x zpk_ipQoPN9Rx<~Rm;=oV9uFQ@{4axFy0yU*!4vMV;K|_EZbR^N@U+_}_)VZ*H~3xf zJJ%WfKKQ*`5o`+nsJ+hx&uQ=T!Sn8#;Dz7?#k?52sFW`SFDd+T@Up^x4*u*W2Y(6v z>h=#_30_gmtHGtP+Ug)`#LqGK0`Y;uy+=eg+1NVtgAH}4@w6-$Vq<9$!avh-@ z^(kBw7P-B`;;>lZ(y-KB5cUdtxiiDEu(#VkEDy^S?h{sMZ)I5NI>V~4%B_$EfNI6m zgf+^uU)ax04*Q1#6jK)tRQf^TAjJ$0hbV`k;ZPklEFA6*4@ZO}mA*dITZb$Nj8=F| zI7WLL!Ui2XHXQ5r2^+(43O9vKNUfK;jZDXI?Lj4vGy(rmneQ| zxKyQG7A|u~g}a5zwYMYe(B96lQ+IFoaCfEIBizGX9PSzJsrbFZy_9A}xLV=8!+jLq zH{4g@{X>l`;Q`?RnhhTq9;iHR-n?^oaCorFzb0Jc7KLlW!`+Fp3)H3U(c#f<_wbnT z7+EJcHe9b5{khuk6X7S^jp0e*Ns2i+JlTCRJS9{w7oHZLrts26|pM!3OU7@irP zsTln!pR+<)lnKuc&sECv!t<2o{P28*F9SE>Z0%>o%iDK zV#Qw?Ug}N>FAFczQJ)JxruX1~YSBFw6}$~ zDdm^K+ZFSb@GCmY9pP6M{#y7oZT~C$y3&6m{D$Jc8Gg%64Zj_JTSt8-yi3=3clceU z`CfRB>lfY|-mCEU!|!YFec^oy-yhzu>wO@6P~nZ?My3Bj_ygU~ABGR9%nyeTyQ{)S z!bi0CN8yikmPf-!b?i^V$5fu5hL0=$XW=gt|3vsJ-QlOgr&u@R{(pO8L9+ z_wGyK=5Vvl@`vybihnkIR_Xs3{!yiUK72v(FNQBF{-y9G-NQeHf70HU!h|V+sWhsIYGgH_e^l$Ds4l8=2OAos zob9ctl((jc_oayUr8T@Sweh|b@xIg+O^%wC{sg@jl}6`9nk`4?N9VisvO95s+dsN6 zx==Bni9X|wias03Yie{+bdlR28&?;*^P)?lOWXy~rO~B|xh%TOogRHI`kca-N0;l^ zE21lP>{ZcKt|7WQy4rmzx+c0-G1o=cxk=IW(e*m^hUf;x+!)>Hc8zX|Zc@zWqt7em z3(+m^is*~cZHoC)bh~1{5`9HwxFhQ#pJs`kKQ375$gHCHi{wb*1@6^bLi- z8GTFPZ%5zO8NU;K$Bl^YitcjDqPwHJmHxZYcimyp_oDB)^P_vBdzA9t=w5er^!@1j z+IwGgpN_gex?k}RL=U)=qX#3+|D%o3M%|MiL_cuXL_dsvs5B2nzgPUG=y{duh3GvU zyEX0H1$u2tyDQQK=~8WbrK{YT>AvY|_o;MEx?X!nrDrN;R(h6Ol%Ad5#hsXLOSdUJ zCp|~ux#_v?%JjVSJcZlS?e3H5`RN4;FHA2~8vVH&)4Qg3Rm|e_Vs~_UNqULWEKM&{ z%x>xB?&fqyy2DLOccwetR9Owtd@Q|3dJngIde8KpZftt5^j_|)^oq3RX6e=GeUxV3 z^u9{7UwS{q@1NdZXE`8!koF#&KG>C~*QD1dyf(eoeLj6iS~Iuwq3J^vJ}iB>!bhZK zt1NwF`bc+b`l$3#I<_mVo-loM`e+xWk4Yb+G{>fo*I77Odig8Eh_Wd>9^gk>37oa=&rt-epgqzRbFB))k~|B2Nm-Y(}H!w{W9hyW>6-`1a2`l z4nHlhB9fJH^A&R>HV#K(S8>4RHe25SL>OaVM-H zR$>jY3Tud!SVOGB8sZnRhWG`nA1U9ynVq_CkvbFsO&6E+uTU=96HY%U&x z&Ba@>x!4Dri_PFi5f&DE7hG9zrTo=gB|Bi_%+`)_yQSb3x1!*S1z%Lmtp&HbF|xk% zE5*Ml>srGKwiIkp`nP2>Y+S*6vKlt7@Q}ho+?le@bEsQicv#_K3Lhm)JsX^_c~l_F zF)wAF(-iWPVohvK-8=d>-LI{wv-JOd(F0sdBus> zXS^!A;_<2yODUCw{>1ljKc4M3VAO5hq;$tfR z4!OaPDewPbHd)S4&-Sro&5*5ivHD<7Tbv-Q;j3m_K4A=P#fF} z(Vln(fc;i&Aq{I^sAX2ejJLMhnXrwP;@|eEPL_2*5WDr>Mm`NbkDL+~p7p8R&uc7S?Kcl08&x*5 zPNFiha>_jC8dI!XwMx1|du-j5Js*2I)|&aPz1L`^0r!*=RIoqC{3fONh+pv?%O1oE zN!EwtVv;-4oo?Gzl<)U!bN4jIPIt#-bKm}Z+ce^oyVtl|AJn}@JNwL%OmsKo&q4QR zlm6dvp8J*Xam~Nn_3rEL??SuZ&+2MyWA$3^I`8^_$L2{)g@ybkcqaI*aE(6+y?9TULrQpo z-stsyJ~^DC_wX6vPT@?wS$Br3!h`iTaHVGQ*K5{(ljiAPioUGb_ct`({;p=y_i4Vo zG5VqAyk+U$>GE`+bVa%{U1hUh&3Z?t$D|w5W7Cc4ap|V?`1FMI#Pp=}WZA}TPPe36 z(^J#a($mv3(mSPRrccx?O*0(LCvMApDf4B`6Mm%e@)nJdZx_6WRXX2w@WcW=vlGRI zT(3V*&+hBm8lREU6I|eYcmiJx!AT0AB5uHk74XeguELjlmuq{icfBmG-6(FrmsQ+v zX=_Y??|t8UKwHD^eNcNJyxs?Y_d(S?aC6U|qii+mWlr0ELb^S0?Lbd;qQX=B`OcS3 z+@;#?CT!XVoAzb(_Hcy_Sx$iq`{2L6p4G2ipeH5X*#Cq72j%d*|Gd~j!>xRM%8 zwzoCkp0l=k(%R}-YisXXzCCem?LErp4a(=O$&Vh;`;y0-lFvJmueu-$vApy6%=>+2 zt|?}UDdvBEY(1O#P>Pw5&rB%Aj3>p6C&gUHXO^R8BbLQjxDNQY4*0iD__q?+wi0n| zySP1J*jB=@RXJN-(3^Dyf$P#=ADFZfn6%yD&>}drG#pyYm=(g6mB5k}QLDx}W66r( z$BN;{O5n$e;l~ESkFA0qD~1j01rOE%4^{>P)*A+_Hw;)M+*cQ@R~LNObkF#%1@K*6 z@LdbwySiYy7Ql3EfazKQuhj*wbpX6p7rfS5c&#~}@mgK*TBE4VUGQ4-^LVXB)$a$D zW}|qmI(V&t@LF{+TBpNkb-`$z4x=?4M(cDKtu9){C>X85w2e_PT0>|dqhPcK!)OhG z(dvTHIvqx9HeA*QxU5E)tD$gKLt(3i!cz@}q1pg9H568AsM=V{9S-|66UJ!-jMI^D zN=L#b9SMUJb4O!gjpoA_b-@>nf-mZVBkF<|>VgrP4j0r23p5V?XB^DWIGCUDw9m0H zKjYzi#>4hZhUb|K&$9uZ=S+B>4e&hEY0n$rd8Whj%z)?F37%&L49`p$p6M_=Ghley zV0CterCAL>vl@P8Z&;Uu;8o_riW~+jau|HYI+%)ea1`rcCr*TySPcuYGt9#tFb^r1 zhYpyBJ>VRw;2h$07sW6PrLYRS!zvWRDx_c)ir^Ef;1eSFgkt!F5I&(8CZQZAp(EH3 zY>=f`TTM{~ldu8~p%=VC6}&+)j6pGsL2tN%-Qfy+Sb`KR!S3(_9dH6wumPp80lUKk z>;(^yfd@#j7NQvJKLz$5g8G+%`lmqs7l8EF(tCD+^v?w8p998UOMlu0qTdCg-wdKZ zoxZgTM1LkIelz%eEy(?Nkozur-Z^0QLqX_w1&^Nr62A)={092sE-?7%VDMd_?=wN) z=YY63gSB^owKs#cPY(@ip9!Wu6EwXR?0f;ec^BCEOtAAgVCQw9=3SuX(?QB-f|PfG zln(d|py17*;GK*a3qZkFgL%&d z?Op?(y$(EkJ-GEc5bHJI({n+l4+EKA2O7N&?0Ge)^C!TY=YlsM4bprfxbj>O<#pi4 z>%fn91{Gcd2D};!cyAEjxuCr3!E}!R(_I6OyAB+84M^=8FxoYsvk~ZQ2k2}E=ximp zYzHXpN>JEhP}treuPeY@dncHyp{)g=tsS7Py}?!sK~)PuRXadcdxNTWfu~Mqlp-~Qly z`+@WA55hMOgs&ZJuN`df46waJ!S)t`?HvlXw+L+SP_Vs4V0(vx?JWY^Tf&TOEZE)> zu)QjKp)0@dqcR#yU^*9DSS1d`XqJg-0AP@3?Dast@iEIgnz;Q{3YaK2gK zd}o00%>&^(1B7om2wyu0-*OPXb`ZWZ!1m4n)jITx?RbASjpAaBD;Sc%{<192(w**qFO*eM zb+2vDmgS$^d&7ldRLHQ}H}bSy*$nlD%5vb%o%SvPNq*RKmH4*a_oyB-!?9ZN! zSs~5F#+aJCWyU$`YI-OqR1597{Rirw?w-n$E0?ThXK!3=bs+aEzS~ce+VIC`RM$wW zaQywZ*s^mrFFP`>joCV>D>9YV79H^`eVfJL8ttQH&Q`{d!L4{dHdHwt1q9?pati zrUH^pp*V={EY?oNcScxyvd5l=<(9jXLNmeMll@i`v2h&#{{P6f`oms_#={pt=(#66 zqk42nujrmVW!A2?-mm*}zrHQz1uPY8vfsoQ(r?dhlTh|&<8z7?%ckt-`e_{fo^rTf zDUwfI3zD>V+INiYlb_{eG1L@&KOWo6k_TS%xbUGqI-_!pHFdh4PiuU~Zl<>1)4pd_ zzHey%U)5im&dW5ih1#AYn<`SmD#m=J#^sXUG)|K{@jq!dv6?GMy?xs4V{#eqD3I&Z z;yN9-0re(|H~pCPY1)H5RI?fo$J+k*S=y+R9GPtmcC7t(w}$TXDmB&&EhbKn>Y9Gi zo^5g@?JCi}b_Pg`@z|f%g+ncRLdHWmOio9QLn_u(Uw}%kS?oYq&U=m7VtjGMo z&r%_x&MhZRy=s4hyc%tv+YYmct*E&{+Sw0HbFRm+7&|0+8nLc9&UMg^o`m#X2U3P= zJ8FlY4Lgk8HZpE8D~PV&c4z)?)%@qwHZ(6b<)nS2*WSqZVpeAE)*f+kQklQJ^~XwU z+V5|ujmXQY+Re?@ZuD=h=}zr2UAQslrYY7uf$TDDKisA;Tf077^6gV4_nGk^-iwaf zW(3w=Y|OE5>3WTQwO{t9?|2SPj2*}I%kzR}3W<`|Qt9)d+cCK&BN0dbOB=>7W|AsX z{^QsaL)w@40Z4wUx6`MPUQfryskIef${stq%zBID zy45cj&l>NuZM-i(rhDIxL-ZIElD@o-dBx~BWim&p=`Jzj(i_?q>sd{3bCqtot08qp zq5Mys%JPC#Ml)5`r*kZOZf2Gw6%%Zs?A1x*nCNfg{oK8mbiV0sC&er!Hm>RhaXfe7IP@2oAY%i z{D6?=16Gq%v+Sey;^*Vit9)7O3S5oi)h1NSEVZfa%`b$7ZDt+c<=3>jMKic~luMzX$Jd?QRm;tK+ewzYow56) zV|%QA=-%^xeW?5+m2iTq&r9Es7uH=#KJj>*{U!S^ShOCJi-_kP*`L(}+Qi^@f3jt& z=#KhOAv^O_{deaT=bo(D***_@vU&ZMe#M`-=4oGU)ri7zd$+e=t!>MtB$P!qy7S8J z&wj@_G1vT;-;}d??f9EM$==5K7y_XHy@{b17N6axkgWsc4PIlL*&m7LFB%2yVA5L8 zZvXEn59xSq6w!w{LH7)rxV(+Z@G5EYdohk7QGRUxQJl3qg7cfj+r&1MO7VD7Dzi-S zOIo2>)bs3~?&G!%#kik(p!nYA*C;EU`VDHK^-^)Eb&dAP_CuO~a!hxf zW4G?*wuoY$4;5-9>9*T!U*hd!wmWE>h^?D+_GI3nJ4?AO$+rC>aUg=aew(#*&#@?> zSq`(Kvw2zi{7*LCzPrzopW>s2-T_^) z-YotY3THKeQYb7NH<}IRmx&z6C0ECjWAnaf?a5I|56xc9HRAT5eb!FM2b9^$98iD!?~8}uvL@V4LfcHJGhKXK!iB^_s1p)zdK>ZOPqI+?}~JhuYjM`)k|p z{QS4w*Zn)|gD@MTnxOo1S7Ws(9{*(1I!=?^gLouWz0rR2cKE2C5NY*{mBk#<1sS(GpSv+qMBK>a7R1-X4mjm`be^;tUpcbYN$ zO|#!EaV{Dq4gE`URj-um`LlBYZ1u-w*`o4Ui?^}$_gXt2mpO}an00hxt<(eL@*`}& z;*m@xPM)LET2I4M(^+#*FMDxu4%vLNvH9QG6uR%$=a^0BEkeBPjUawgF}_AUu=d#O z-*8wfyQ!McDd`#>*UpTdj@}4tulAVgXrsnWvp#HP@3x4?Vj;^d{^Xu$HiB;*XSyl* zl2=aKKIQnXY!{p4mz23jc0Fra-jVdsxskT}7+pipc9M4tsZ{^s`J+V z`)+TO%MSYC$;-pMf4>{2 zEIQ7%LTTbTv@jbz$LF~JTR2u2Pg2G#3uNam)VVSm&0b<(a(8lfP5JfsT!_qJw;pV{bsRo7$nD8r14md0HwRt|3_b=P=ldp7d7tG~Rv z+OvgsmrnVb?}2BiX?f}66y(2MY~H@^j0g!idsJtCAxUw+cxRrJ&hdEsz82rjBvuyX z#d2;``+8XYiOm+wKbCT^Jk*-)Sw5~G@%=4NzT?cd*(!Zr4djg}c`76GZyxK8&#%kb`BwhenCsK*N#)iVbRT7*?pocQ?~X#$U~0mS_I~6z-yML}E9Whg z6)TTb{lmPIy_4N&t>?ecjqxt>KIfXfE4*vm4DSZ-1~*%)`oHOR(W?HtT$|SL-z$4s z4|-3yg{-~bn^pJwXubW5ZeLl1+9JDFZ+q{#Q&=;W+E5N-B``p^2$dBgn|{6Bg1W*f$9uvOOHSXoth(reWE>doG`;Mw3gZ<5(f z@tVzIiq~T6tG!lRS?x{Ln(EiQ>A~y4>)uYm8^J%knZef3dGpNPi8o*Cs6%goY@8H& zi);n8w^VDV%e`e`MOfi=*s5u-Gpr8#dAo-L!U5i1;lOaHw;~)Kj_~%8C6WejKiM5= z^bRz;Bi=!_YT7$k>!qi8YqdIh7w?F0PB_;)I&2RYddF&A^kQ$FRz!DrCu;rk9^R>1 z`MlCQT`QmW_Rch0Al@fs5#a*wEL*kfeah?~c<0#KUGLMfd2qRRZgg{Wn|Fa$+uq?_ zqSdxv^DeV>w%+AtZ@|04>%E{ zS-s!dic0TywwBWSy=kMpO}3WO`)^xC>1{T3viApDH|RZU>ju3)N)MBwR@JLkEp)}Q zrM9aZ?k(|_YP-x^rh2xUx0_O#MYWMAOj0OJs!^DvP?%Ix7gN;5Ky~pP7kZ!eWb?;6 z*E?6?^Stwv^ZBx(mX_M&0>xaY`kGOFy+}6VF7_@__)_muSLj`)8k|uLzC!jWuk^0e zQCE3aDduYLYFFZ2qne$eW{;(27pZ1{$JL`$8H`4y7>!B^w%1Bk*B^9)(Wvx7qf&-O zrI&24{YbVfe=G}ZwdhsK(W}&6b_?WzPzYgJfU8;)M3FP7G-P_6XE(pnYTmA+_K`eI|P3I$6IHrA@p zvGk=)_N7f0t4$WU2GlHdvZYq)YS6UwL(|eQMhsSL`3AUZ4(}X#-KnjKpTzKy)&-*i0LUTBZb>X#>&BWU!ew5arBplrw|S z%nZU>S|5}%gRquXEd9&{Zm55uf1!)~&-fQ9e6fGAN_dHXnZlp*Kc_NWE{keIWl`-) zUBy-YRc?rXwXCZRm+IzP#b4)N=LY%L``5c+QsCU7_^`D!nF6AAC&7#yGbSWXWq^i)R^u>x)E$WovG9MMnMvd8z8iM_(PyAMA*$YbTi0N{t&SQft56|Im4PT#Mxs<{Q2#qz7MVtbBXpG6gQ`KhB5P2x z2Q}P!WNpn7)NphxwJ2B`P_WdaVCjYRr{O4AMq>AAxb@UZ-!8jP4N|krmo26R;X;)` zy|%Vy>uCr&mLlm`c2mmbvh~z}j-?JA%V_J(l}5d};?Ys4_;Xf4|vPqp#?TzM>XoMUiaL+~I1`R}91!O*Q(85IZx~*psP7K@p;$ z2vJQGVJoHGtbv%)@P zZG8rt6~kFgUdw9ojQacAP(AL4a1pF`xnyt4@99@L+@Wi??0K|zX;2l#q|5V==W>r_j}Rr*VFI!qTjDUr#Ow? zzYLw?G{%75=oF_h5|l9#^kyWeVI=6qNHCg_U?pnB5vUahqWoRSc(4!SK_}zEa>j#w z7!Q^+9_+(-upEu>K8y;>85Qod9xGC zn=2VDW?^}=63d$_88fCbW>jH$b0woiC8NbkMvF=;Z?0stsA9CJWVEP4p}1|{V*l$14C-t5HkW~YCUEN|9ed2=P|=9MTcYZyg3 z8Aa+DMLHQp1~Q6tGKx%K6zOCXnZPL0$tW^`QKT9DWgTNlGh@k0#**gTSQ3vDSIc6i zS>7CqB69>|z(~e`5sU%#C^APd64WyiOhS=4iZNgk%Ii)>f?4P?>*@U`q03x?<;_^F zxF5ZFBUYzTIuEIa^ZVGaHJEc*A^*bwZbXFmWNf(O&TccL|{p_lKZm#;x_*g{`l zkK(X~9)A`+{v2!wcA`FPp|9^mgLnWo1Uu>Ro9XduP$JHz-`|IRe>r;aDfIp;QH6Ih z1{}y3u#z!gC1XG*n#D=j5bQ*`cn~%OI~f&5pkJ(EY^Y~!sKJI{Co0BSj1aT2A=rrx z!IdZ)Td*P6iLSAR(V~UXqMp%WRya(f#T;x1u0*9imoZ}{W5z7Tj80UK2WaFNC#!!p za?HVo;K7U^jp!h27)53=ip*vdDPk1qL=9QPSW?eeG6x%iohTz`p^U6S8M!aY$OEt; z*oi)}hH<5Zaitx7^wt%r}1eVu28L_4^ zVs$cN)uSVw3E?v1WLr^C=r*VM65xHxF=)k2$YC5 z*dW^jP2rv>2qVVV8WeYWTT!eyf7z)DqSPd&dM>qr>;b3%x8LWm?qb3}Kns6*?!ttmHm!c+YKuy?ynlOc$ zFhEUMftoNxM>r21VQuE{%;9b?)P%KI4eLNtxHp=@S~P_NP!ranCY*W~N9bV%ERC8lg_>}9!KnqOxxLU1`e+B|p&hJ4 zJ6M5sa5mb(I<$keXa_6M4pyKYoQHO>4((tav%MNDW2|J(SA%_wPUrWz!*qm|JJpPE z1Kl#AUFLb{F+(EtZE70R%9RV(HiX;|ZbQk+g!tLI1zTwo+W~u1DPB{`LRLf!`p9V4 zM>xRnxEz+3u-1wJ!3RyYl}keH*uEg-R%`e5`!$u&7|nPEg{^SXv9?dw5c@zDexCdp z2awD8BNQ!{RCgsoA&otaqgi<*gj;3FYUIqCn%P7Xdac;M$d@-Y0x7 zZMIeL%57s_>Li$O`nF2mkbd(JW~;MaS3Ui+zGF4rQ#$(2_yC^0ty80}lRFH8?af}b zLRlU(J}9@{KE8YXV79K1=kwWBFv`o?3#$`y+1Rh?s97Hb31*4ey|YJ#hZ) zJ>>aipR(~FtOe2cQ@S&zP*A^O=gzK4qNXJGKYO3@pYBI0=OVZ0Bc=cMCGNR?cboHM z@0IStHdh`eRDGjX<=>m0S!C~2&)EOPUp@Pm9T#Noj-x+Htkx1;6Q|#LYxX#KnT+q2 zdFZ>rVp*kh$JR^veo;O+Z&w^GFHWgns-eb#a)-?h;FHPzr?a_|j~IHT`6b~^@jVw` zr&b^5U|ao8YP-eSC)mFK8@-_vjTeph?9aYepZ_1o5OoTK~sj2L%&2DSz*VP&;OHZF(dXwPXgb$FAV z!9G3iq1D4~uanfN?0(IpOciZ4({iDg*0-(MS4~wYu8DSk`6O3mwJ>-7WKS{%Xk_1# zB>o6rDq#hTckYdAnr*fb^s$+hwsz*Hw3gyg?b)R8bF#hin0lXAv|c4nrGJ0;$vxCTcKQXaqkoNU5~2Y{3Ul^imGh8+cwV~{qEV@Sc-TJFrlaP zEBCK^qp)J0V@1nTTYnL!(H*ndm)V!Lw2vud-&VqFRBG#~lGVaWm2K7P8RAcJH@N?~ zIPOjM*T4RqeNx#rmMA%rRkfBcXW#O#pMfI><&L-KNK47Z5Qv|3(jVpeKHHVN3)tLM zJ-B|`IBso7ex&j>;ob9A)yJd__vjaQP=hSL)ux+ z^)_xF&+8sPX=l@0q&%3%=Vfbat8;yIauxPFIj3?-<_e5uHpZDXXzQ2l4PBw^Cz;n# zudIe8A4+Zc(kmIlknKsfdwRN-zu{Myc9Qh)`DL~KAjvs*zpLXI+v-jj&SdLYtsOqg zeMu}%SZT7y61LIzHMLP$$yQ23p3Lg}MqSsd>apyabJwOjX1PDFeP|}MD)a%HxozFr zGgne|V>8)%p#H39Ivpv?&)UAEJd=@-W3gIfdo4Yw-qu(0+*yxm_tDCd-`^%_`HE*B zuTv9LSL2+r>+s?fihU^?(zows%cq<2l?ON3E%x6`^>Jxg|7>x?gu@ zs?=(?HnmUcP@_P2Bdm!~z>Mge^^^QE0{kLp59^%!?htVJ}o*JI+)rT9xPkLj*bHnqzM%i<`$ZHBO2`}*`n|C2^iaZKk>ouG8MsIp} zQ}_jMhS_cOW`$o4zv9gfzZ!nkn-hLL{FXO2{9gDyt?QD1A8(A zMc%RUgtEjtA-ycUhqpexGQF>NnrsLj;GHF}C5L&RG9M-0d1g=0J6|42PVg=;&m-Q& z@;P#YcS-ue^hWPH@-6b;-reRs#QUY5$1QpuFS}Cz&+@bvVUu+L-t|iHu2<;4?!WGe zn+pY?Kd!<-!4dq>Li1SiIQ$uC&dsu3i!o%fb z&zFzA2A4{WO^tOys!{&-Qu4Rg;!5?@r@6Y+botl|Q%h9?Qux@bz{g&QkG)cC!Fs8^ zQhT`yJncoQAFEuk{Ozrl54?Tkb+1@n_YPJ~S|i_k0lxP#_})w7d(Wc|6;Ou?s6z$R zp#thqf$Gq?t~Pa^YErRk(xuv(*S!+zQ>p6H_f*b%QV+;K@Pn#brK(#$)Ar}`w-?Ia z-jl8jPkVjkY40h;o2R|rc-rfOr#(-WYu|KL)WS+E*H+29UZJZFih?rvt?eE3Rak#o zL!&>1`v(K%9d}SLNd9aG2l9K2r@dO)xUHAZ+fl(N#gCTPy#aXLtCL@@wX$n{NO*{> zVVifZ5bs>ISSt0bmTQHI`Q<9XBUh6woT59dV72s{F6c1aac-X4M!&VB*rk>iyP0G!DX!Xa3Rt@$|J!>Z_ zkJ^cR^L|~vvQpSOt-{vn0BbWk%6wwg%GT*4x)$?vRf?ypTI`;BYDK?PjQO~#!LL=V zwI!8vbNB~s&7)O1{G&WtRff-n&nbr&7HF?|Br3rdQHU?1QnkZnt_)v971;Q!!p7$Sd=Zu6i>Owu zbd@W>-sb@P50%R2&;c&Q&rm6ThEnn~beJo}!%*x=s1$3U1MnnNiua%teuGl@4eE>E zpc4EBmC0k!4a!YzTW2x9L8bT&D#LE*0Bh&6d7&j2tcz`@<4*X%>`$94!|!DoelN%1_p%I+m(}>X zETio;U@y8a{w=Gq8r_$+*B8&0{b_Htw733PkRFC-%L%l!iCB}4Th}10{tgR|2#;`u zw5y4D^`wpYUX4|Uy_!>=%od`oe4~D)s4EUv3O>FM ze0&Lfd;u(b2`u|GSoXoN>?N@5Lt)v6z_Jg8Wgh~|F5g@7zBLV&y#$th8Z3JWEc-P0 z^%D5?Y4GbM@axmy*Gu5n7sIa)g|L)P^4u3*@g zlrh?8SdA=E5xR5hz4{i0ll=X~aG>PCy;a32x83q?srMya=NrZ%*cHWT;_qxJy5p0* z#=DbJ--adFy~vh0#$_yp-N798xb3+=+_(LZCIFn_OzmG3Z-QU;qbJIH}@2dH6 zI|_r7=icP4M(U0ysCqU%=q>N5!X94I^OSd_?7shn?_3@I;B$BL7TaTlAAIEd@6FcW z_fOGt&&PM>p85XsUmt%B``~ka)H@UB_Q6Me@ZJwD&p+Gyapb){cJt59`eF8e93}fO z=h-$*7OUDezUS|}R3EY(+VLNJP1eK9+t!fG{h0?ck7j<7`KfIC|2*>xt;~BuHvON< zyrb25?`iz+RZv#YyP#Yn{&0=%%>^w5tp!sxlCP6>{WD}$|H1=UI{rN!V z0hd;Ok1G6=%uf{lY38S{5WfLM_zfu5Iey_vSOHk7b3LKGPiCHUMfeaX)_LF2-gh(a zx>9B)IqGp#-samuGu(hC7;i&~v6+WTh1n1)cAix7a3J(AQ z9sp9zI6S>Y9)mBcA+Epvrt7_Ou>4UCal_nDJW_>jtedF#N&2gIlid`BXX!6=EA=-F zA5|mqQB~v)atCX#d8*2|weARokJO*$Op9lw>eIwp;R3Hf z>bhdDSm6=g2sa&XRuSH;hTzRA?M?D@Md(Q~=t(m8v?@eT(twhr0S!riG$h4nNE*

    qzN5J1v-!>bRgyEKq}CIG@t+(gzBR&x{C>D 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 W(|9pYLavTT!op6A~G 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

    ML!8x2)SAo&t0_>-t_fCJ46Mc_ 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

    ER?H!1nC#^cGD#W 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�JOK6+F^YS2;^ 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 `1XpKO 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%0DA)|R@5k!Y>4Bfyr1kz*% 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Ξf@h!1W~68QpF&G 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%0AI~ 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

    Xui#8HhmO;bp#D`B%$ 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 z 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�COPQ)T(~^bcTbV%ahuaw8InBPV64aKjhP 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

  • diff --git a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts index c87bf8378..4a8e36dd0 100644 --- a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts +++ b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts @@ -1,8 +1,7 @@ import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core'; -import { BehaviorSubject, fromEvent, Subject } from 'rxjs'; +import { BehaviorSubject, fromEvent, ReplaySubject, Subject } from 'rxjs'; import { debounceTime, takeUntil } from 'rxjs/operators'; -import { CircularArray } from 'src/app/shared/data-structures/circular-array'; -import { ReaderService } from 'src/app/_services/reader.service'; +import { ReaderService } from '../../_services/reader.service'; import { PAGING_DIRECTION } from '../_models/reader-enums'; import { WebtoonImage } from '../_models/webtoon-image'; @@ -20,7 +19,7 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { /** * Number of pages to prefetch ahead of position */ - @Input() buffferPages: number = 5; + @Input() bufferPages: number = 5; /** * Total number of pages */ @@ -30,6 +29,8 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { */ @Input() urlProvider!: (page: number) => string; @Output() pageNumberChange: EventEmitter = new EventEmitter(); + + @Input() goToPage: ReplaySubject = new ReplaySubject(); /** * Stores and emits all the src urls @@ -38,9 +39,9 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { /** * Responsible for calculating current page on screen and uses hooks to trigger prefetching. - * Note: threshold will fire differently due to size of images. 1 requires full image on screen. 0 means 1px on screen. + * Note: threshold will fire differently due to size of images. 1 requires full image on screen. 0 means 1px on screen. We use 0.01 as 0 does not work currently. */ - intersectionObserver: IntersectionObserver = new IntersectionObserver((entries) => this.handleIntersection(entries), { threshold: [0] }); + intersectionObserver: IntersectionObserver = new IntersectionObserver((entries) => this.handleIntersection(entries), { threshold: 0.01 }); /** * Direction we are scrolling. Controls calculations for prefetching */ @@ -53,19 +54,10 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { * Temp variable to keep track of when the scrollTo() finishes, so we can start capturing scroll events again */ currentPageElem: Element | null = null; - /** - * The min page number that has been prefetched - */ - minPrefetchedWebtoonImage: number = Number.MAX_SAFE_INTEGER; - /** - * The max page number that has been prefetched - */ - maxPrefetchedWebtoonImage: number = Number.MIN_SAFE_INTEGER; /** * The minimum width of images in webtoon. On image loading, this is checked and updated. All images will get this assigned to them for rendering. */ webtoonImageWidth: number = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; - /** * Used to tell if a scrollTo() operation is in progress */ @@ -74,24 +66,22 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { * Whether all prefetched images have loaded on the screen (not neccesarily in viewport) */ allImagesLoaded: boolean = false; - + /** + * Denotes each page that has been loaded or not. If pruning is implemented, the key will be deleted. + */ + imagesLoaded: {[key: number]: number} = {}; /** * Debug mode. Will show extra information */ - debug: boolean = true; + debug: boolean = false; - /** - * Timer to help detect when a scroll end event has occured (not used) - */ - scrollEndTimer: any; + get minPageLoaded() { + return Math.min(...Object.keys(this.imagesLoaded).map(key => parseInt(key, 10))); + } - - /** - * Each pages height mapped to page number as key (not used) - */ - pageHeights:{[key: number]: number} = {}; - - buffer: CircularArray = new CircularArray([], 0); + get maxPageLoaded() { + return Math.max(...Object.keys(this.imagesLoaded).map(key => parseInt(key, 10))); + } @@ -100,40 +90,10 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { constructor(private readerService: ReaderService, private renderer: Renderer2) { } ngOnChanges(changes: SimpleChanges): void { - let shouldInit = false; - console.log('Changes: ', changes); - if (changes.hasOwnProperty('totalPages') && changes['totalPages'].currentValue === 0) { - this.debugLog('Swallowing variable change due to totalPages being 0'); - return; - } - if (changes.hasOwnProperty('totalPages') && changes['totalPages'].previousValue != changes['totalPages'].currentValue) { this.totalPages = changes['totalPages'].currentValue; - shouldInit = true; - } - if (changes.hasOwnProperty('pageNum') && changes['pageNum'].previousValue != changes['pageNum'].currentValue) { - // Manually update pageNum as we are getting notified from a parent component, hence we shouldn't invoke update - this.setPageNum(changes['pageNum'].currentValue); - if (Math.abs(changes['pageNum'].currentValue - changes['pageNum'].previousValue) > 2) { - // Go to page has occured - shouldInit = true; - } - } - - if (shouldInit) { this.initWebtoonReader(); } - - // This should only execute on initial load or from a gotopage update - const currentImage = document.querySelector('img#page-' + this.pageNum); - if (currentImage !== null && this.isElementVisible(currentImage)) { - - if ((changes.hasOwnProperty('pageNum') && Math.abs(changes['pageNum'].previousValue - changes['pageNum'].currentValue) <= 0) || !shouldInit) { - return; - } - this.debugLog('Scrolling to page', this.pageNum); - this.scrollToCurrentPage(); - } } ngOnDestroy(): void { @@ -146,24 +106,36 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { fromEvent(window, 'scroll') .pipe(debounceTime(20), takeUntil(this.onDestroy)) .subscribe((event) => this.handleScrollEvent(event)); + + if (this.goToPage) { + this.goToPage.pipe(takeUntil(this.onDestroy)).subscribe(page => { + this.debugLog('[GoToPage] jump has occured from ' + this.pageNum + ' to ' + page); + const isSamePage = this.pageNum === page; + if (isSamePage) { return; } + + if (this.pageNum < page) { + this.scrollingDirection = PAGING_DIRECTION.FORWARD; + } else { + this.scrollingDirection = PAGING_DIRECTION.BACKWARDS; + } + + this.setPageNum(page, true); + }); + } } + /** + * On scroll in document, calculate if the user/javascript has scrolled to the current image element (and it's visible), update that scrolling has ended completely, + * and calculate the direction the scrolling is occuring. This is used for prefetching. + * @param event Scroll Event + */ handleScrollEvent(event?: any) { const verticalOffset = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); - - clearTimeout(this.scrollEndTimer); - this.scrollEndTimer = setTimeout(() => this.handleScrollEnd(), 150); - - if (this.debug && this.isScrolling) { - this.debugLog('verticalOffset: ', verticalOffset); - this.debugLog('scroll to element offset: ', this.currentPageElem?.getBoundingClientRect().top); - } - - if (this.currentPageElem != null && this.isElementVisible(this.currentPageElem)) { - this.debugLog('Image is visible from scroll, isScrolling is now false'); + if (this.isScrolling && this.currentPageElem != null && this.isElementVisible(this.currentPageElem)) { + this.debugLog('[Scroll] Image is visible from scroll, isScrolling is now false'); this.isScrolling = false; } @@ -175,58 +147,36 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { this.prevScrollPosition = verticalOffset; } - // ! This will fire twice from an automatic scroll - handleScrollEnd() { - //console.log('!!! Scroll End Event !!!'); - } - - /** * Is any part of the element visible in the scrollport. Does not take into account * style properites, just scroll port visibility. - * Note: use && to ensure the whole images is visible * @param elem * @returns */ isElementVisible(elem: Element) { if (elem === null || elem === undefined) { return false; } - const docViewTop = window.pageYOffset; - const docViewBottom = docViewTop + window.innerHeight; + // NOTE: This will say an element is visible if it is 1 px offscreen on top + var rect = elem.getBoundingClientRect(); - const elemTop = elem.getBoundingClientRect().top; - const elemBottom = elemTop + elem.getBoundingClientRect().height; - - return ((elemBottom <= docViewBottom) || (elemTop >= docViewTop)); + return (rect.bottom >= 0 && + rect.right >= 0 && + rect.top <= (window.innerHeight || document.documentElement.clientHeight) && + rect.left <= (window.innerWidth || document.documentElement.clientWidth) + ); } initWebtoonReader() { - - this.minPrefetchedWebtoonImage = this.pageNum; - this.maxPrefetchedWebtoonImage = Number.MIN_SAFE_INTEGER; + this.imagesLoaded = {}; this.webtoonImages.next([]); - - - - const prefetchStart = Math.max(this.pageNum - this.buffferPages, 0); - const prefetchMax = Math.min(this.pageNum + this.buffferPages, this.totalPages); + const prefetchStart = Math.max(this.pageNum - this.bufferPages, 0); + const prefetchMax = Math.min(this.pageNum + this.bufferPages, this.totalPages); this.debugLog('[INIT] Prefetching pages ' + prefetchStart + ' to ' + prefetchMax + '. Current page: ', this.pageNum); for(let i = prefetchStart; i < prefetchMax; i++) { - this.prefetchWebtoonImage(i); + this.loadWebtoonImage(i); } - - const images = []; - for (let i = prefetchStart; i < prefetchMax; i++) { - images.push(new Image()); - } - this.buffer = new CircularArray(images, this.buffferPages); - - this.minPrefetchedWebtoonImage = prefetchStart; - this.maxPrefetchedWebtoonImage = prefetchMax; - - this.debugLog('Buffer: ', this.buffer.arr.map(img => this.readerService.imageUrlToPageNum(img.src))); } /** @@ -236,15 +186,17 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { */ onImageLoad(event: any) { const imagePage = this.readerService.imageUrlToPageNum(event.target.src); - this.debugLog('Image loaded: ', imagePage); + this.debugLog('[Image Load] Image loaded: ', imagePage); + + if (!this.imagesLoaded.hasOwnProperty(imagePage)) { + this.imagesLoaded[imagePage] = imagePage; + } if (event.target.width < this.webtoonImageWidth) { this.webtoonImageWidth = event.target.width; } - this.pageHeights[imagePage] = event.target.getBoundingClientRect().height; - this.renderer.setAttribute(event.target, 'width', this.webtoonImageWidth + ''); this.renderer.setAttribute(event.target, 'height', event.target.height + ''); @@ -255,59 +207,99 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { .filter((img: any) => !img.complete) .map((img: any) => new Promise(resolve => { img.onload = img.onerror = resolve; }))) .then(() => { - this.debugLog('! Loaded current page !', this.pageNum); + this.debugLog('[Image Load] ! Loaded current page !', this.pageNum); + this.currentPageElem = document.querySelector('img#page-' + this.pageNum); + + if (this.currentPageElem && !this.isElementVisible(this.currentPageElem)) { + this.scrollToCurrentPage(); + } + this.allImagesLoaded = true; }); } } handleIntersection(entries: IntersectionObserverEntry[]) { - if (!this.allImagesLoaded || this.isScrolling) { - this.debugLog('Images are not loaded (or performing scrolling action), skipping any scroll calculations'); + this.debugLog('[Intersection] Images are not loaded (or performing scrolling action), skipping any scroll calculations'); return; } - entries.forEach(entry => { const imagePage = parseInt(entry.target.attributes.getNamedItem('page')?.value + '', 10); this.debugLog('[Intersection] Page ' + imagePage + ' is visible: ', entry.isIntersecting); if (entry.isIntersecting) { this.debugLog('[Intersection] ! Page ' + imagePage + ' just entered screen'); this.setPageNum(imagePage); - this.prefetchWebtoonImages(); } }); } - setPageNum(pageNum: number) { + /** + * Set the page number, invoke prefetching and optionally scroll to the new page. + * @param pageNum Page number to set to. Will trigger the pageNumberChange event emitter. + * @param scrollToPage Optional (default false) parameter to trigger scrolling to the newly set page + */ + setPageNum(pageNum: number, scrollToPage: boolean = false) { this.pageNum = pageNum; this.pageNumberChange.emit(this.pageNum); - //TODO: Perform check here to see if prefetching or DOM removal is needed + this.prefetchWebtoonImages(); + // TODO: We can prune DOM based on our buffer + // Note: Can i test if we can put this dom pruning async, so user doesn't feel it? (don't forget to unobserve image when purging) + // I can feel a noticable scroll spike from this code (commenting out pruning until rest of the bugs are sorted) + // const images = document.querySelectorAll('img').forEach(img => { + // const imagePageNum = this.readerService.imageUrlToPageNum(img.src); + // if (imagePageNum < this.pageNum - this.bufferPages) { // this.minPrefetchedWebtoonImage + // console.log('Image ' + imagePageNum + ' is outside minimum range, pruning from DOM'); + // } else if (imagePageNum > this.pageNum + 1 + this.bufferPages) { // this.maxPrefetchedWebtoonImage + // console.log('Image ' + imagePageNum + ' is outside maximum range, pruning from DOM'); + // } + // // NOTE: Max and Mins don't update as we scroll! + // }); + + + if (scrollToPage) { + const currentImage = document.querySelector('img#page-' + this.pageNum); + if (currentImage !== null && !this.isElementVisible(currentImage)) { + this.debugLog('[GoToPage] Scrolling to page', this.pageNum); + this.scrollToCurrentPage(); + } + } } isScrollingForwards() { return this.scrollingDirection === PAGING_DIRECTION.FORWARD; } + /** + * Performs the scroll for the current page element. Updates any state variables needed. + */ scrollToCurrentPage() { this.currentPageElem = document.querySelector('img#page-' + this.pageNum); if (!this.currentPageElem) { return; } + //if (this.isElementVisible(this.currentPageElem)) { return; } // Update prevScrollPosition, so the next scroll event properly calculates direction this.prevScrollPosition = this.currentPageElem.getBoundingClientRect().top; this.isScrolling = true; setTimeout(() => { if (this.currentPageElem) { + this.debugLog('[Scroll] Scrolling to page ', this.pageNum); this.currentPageElem.scrollIntoView({behavior: 'smooth'}); } }, 600); } - prefetchWebtoonImage(page: number) { + loadWebtoonImage(page: number) { let data = this.webtoonImages.value; + if (this.imagesLoaded.hasOwnProperty(page)) { + this.debugLog('\t[PREFETCH] Skipping prefetch of ', page); + return; + } + this.debugLog('\t[PREFETCH] Prefetching ', page); + data = data.concat({src: this.urlProvider(page), page}); data.sort((a: WebtoonImage, b: WebtoonImage) => { @@ -316,32 +308,8 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { else return 0; }); - if (page < this.minPrefetchedWebtoonImage) { - this.minPrefetchedWebtoonImage = page; - } - if (page > this.maxPrefetchedWebtoonImage) { - this.maxPrefetchedWebtoonImage = page; - } this.allImagesLoaded = false; - this.webtoonImages.next(data); - - let index = 1; - - this.buffer.applyFor((item, i) => { - const offsetIndex = this.pageNum + index; - const urlPageNum = this.readerService.imageUrlToPageNum(item.src); - if (urlPageNum === offsetIndex) { - index += 1; - return; - } - if (offsetIndex < this.totalPages - 1) { - item.src = this.urlProvider(offsetIndex); - index += 1; - } - }, this.buffer.size() - 3); - - } attachIntersectionObserverElem(elem: HTMLImageElement) { @@ -349,27 +317,23 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { this.intersectionObserver.observe(elem); this.debugLog('Attached Intersection Observer to page', this.readerService.imageUrlToPageNum(elem.src)); } else { - console.error('Could not attach observer on elem'); + console.error('Could not attach observer on elem'); // This never happens } } - prefetchWebtoonImages() { + calculatePrefetchIndecies() { let startingIndex = 0; let endingIndex = 0; if (this.isScrollingForwards()) { - startingIndex = Math.min(this.maxPrefetchedWebtoonImage + 1, this.totalPages); - endingIndex = Math.min(this.maxPrefetchedWebtoonImage + 1 + this.buffferPages, this.totalPages); + startingIndex = Math.min(Math.max(this.pageNum - this.bufferPages, 0), this.totalPages); + endingIndex = Math.min(Math.max(this.pageNum + this.bufferPages, 0), this.totalPages); if (startingIndex === this.totalPages) { - return; + return [0, 0]; } } else { - startingIndex = Math.max(this.minPrefetchedWebtoonImage - 1, 0) ; - endingIndex = Math.max(this.minPrefetchedWebtoonImage - 1 - this.buffferPages, 0); - - if (startingIndex <= 0) { - return; - } + startingIndex = Math.max(this.pageNum - this.bufferPages, 0); + endingIndex = Math.max(this.pageNum + this.bufferPages, 0); } @@ -378,20 +342,33 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { startingIndex = endingIndex; endingIndex = temp; } - this.debugLog('[Prefetch] prefetching pages: ' + startingIndex + ' to ' + endingIndex); - this.debugLog(' [Prefetch] page num: ', this.pageNum); + + return [startingIndex, endingIndex]; + } + + range(size: number, startAt: number = 0): ReadonlyArray { + return [...Array(size).keys()].map(i => i + startAt); + } + + prefetchWebtoonImages() { + let [startingIndex, endingIndex] = this.calculatePrefetchIndecies(); + if (startingIndex === 0 && endingIndex === 0) { return; } + + // NOTE: This code isn't required now that we buffer around our current page. There will never be a request that is outside our bounds // If a request comes in to prefetch over current page +/- bufferPages (+ 1 due to requesting from next/prev page), then deny it - this.debugLog(' [Prefetch] Caps: ' + (this.pageNum - (this.buffferPages + 1)) + ' - ' + (this.pageNum + (this.buffferPages + 1))); - if (this.isScrollingForwards() && startingIndex > this.pageNum + (this.buffferPages + 1)) { - this.debugLog('[Prefetch] A request that is too far outside buffer range has been declined', this.pageNum); - return; - } - if (!this.isScrollingForwards() && endingIndex < (this.pageNum - (this.buffferPages + 1))) { - this.debugLog('[Prefetch] A request that is too far outside buffer range has been declined', this.pageNum); - return; - } + // if (this.isScrollingForwards() && startingIndex > this.pageNum + (this.bufferPages + 1)) { + // this.debugLog('\t[PREFETCH] A request that is too far outside buffer range has been declined', this.pageNum); + // return; + // } + // if (!this.isScrollingForwards() && endingIndex < (this.pageNum - (this.bufferPages + 1))) { + // this.debugLog('\t[PREFETCH] A request that is too far outside buffer range has been declined', this.pageNum); + // return; + // } + + this.debugLog('\t[PREFETCH] prefetching pages: ' + startingIndex + ' to ' + endingIndex); + for(let i = startingIndex; i < endingIndex; i++) { - this.prefetchWebtoonImage(i); + this.loadWebtoonImage(i); } Promise.all(Array.from(document.querySelectorAll('img')) diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.html b/UI/Web/src/app/manga-reader/manga-reader.component.html index 281a443b2..7f5f31994 100644 --- a/UI/Web/src/app/manga-reader/manga-reader.component.html +++ b/UI/Web/src/app/manga-reader/manga-reader.component.html @@ -25,7 +25,7 @@ ondragstart="return false;" onselectstart="return false;">
    - +
    diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.ts b/UI/Web/src/app/manga-reader/manga-reader.component.ts index f1cacaa39..4eeb8f059 100644 --- a/UI/Web/src/app/manga-reader/manga-reader.component.ts +++ b/UI/Web/src/app/manga-reader/manga-reader.component.ts @@ -10,7 +10,7 @@ import { NavService } from '../_services/nav.service'; import { ReadingDirection } from '../_models/preferences/reading-direction'; import { ScalingOption } from '../_models/preferences/scaling-option'; import { PageSplitOption } from '../_models/preferences/page-split-option'; -import { forkJoin, Subject } from 'rxjs'; +import { forkJoin, ReplaySubject, Subject } from 'rxjs'; import { ToastrService } from 'ngx-toastr'; import { KEY_CODES } from '../shared/_services/utility.service'; import { CircularArray } from '../shared/data-structures/circular-array'; @@ -103,7 +103,11 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { * @see Stack */ continuousChaptersStack: Stack = new Stack(); - + + /** + * An event emiter when a page change occurs. Used soley by the webtoon reader. + */ + goToPageEvent: ReplaySubject = new ReplaySubject(); /** * If the menu is open/visible. @@ -308,6 +312,8 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { this.readerService.resetOverrideStyles(); this.navService.showNavBar(); this.onDestroy.next(); + this.onDestroy.complete(); + this.goToPageEvent.complete(); } @HostListener('window:keyup', ['$event']) @@ -798,6 +804,7 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { this.setPageNum(page); this.refreshSlider.emit(); + this.goToPageEvent.next(page); this.render(); } @@ -896,19 +903,8 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { } handleWebtoonPageChange(updatedPageNum: number) { - console.log('[MangaReader] Handling Page Change'); - - this.pageNum = updatedPageNum; - + this.setPageNum(updatedPageNum); this.readerService.bookmark(this.seriesId, this.volumeId, this.chapterId, this.pageNum).pipe(take(1)).subscribe(() => {/* No operation */}); - if (this.pageNum >= this.maxPages - 10) { - // Tell server to cache the next chapter - if (this.nextChapterId > 0 && !this.nextChapterPrefetched) { - this.readerService.getChapterInfo(this.nextChapterId).pipe(take(1)).subscribe(res => { - this.nextChapterPrefetched = true; - }); - } - } } saveSettings() { diff --git a/UI/Web/src/app/shared/_services/download.service.ts b/UI/Web/src/app/shared/_services/download.service.ts index 29701597d..8e32ffca4 100644 --- a/UI/Web/src/app/shared/_services/download.service.ts +++ b/UI/Web/src/app/shared/_services/download.service.ts @@ -1,4 +1,4 @@ -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Series } from 'src/app/_models/series'; import { environment } from 'src/environments/environment'; @@ -35,15 +35,15 @@ export class DownloadService { } private downloadSeriesAPI(seriesId: number) { - return this.httpClient.get(this.baseUrl + 'download/series?seriesId=' + seriesId, {responseType: 'blob' as 'text'}); + return this.httpClient.get(this.baseUrl + 'download/series?seriesId=' + seriesId, {observe: 'response', responseType: 'blob' as 'text'}); } private downloadVolumeAPI(volumeId: number) { - return this.httpClient.get(this.baseUrl + 'download/volume?volumeId=' + volumeId, {responseType: 'blob' as 'text'}); + return this.httpClient.get(this.baseUrl + 'download/volume?volumeId=' + volumeId, {observe: 'response', responseType: 'blob' as 'text'}); } private downloadChapterAPI(chapterId: number) { - return this.httpClient.get(this.baseUrl + 'download/chapter?chapterId=' + chapterId, {responseType: 'blob' as 'text'}); + return this.httpClient.get(this.baseUrl + 'download/chapter?chapterId=' + chapterId, {observe: 'response', responseType: 'blob' as 'text'}); } downloadSeries(series: Series) { @@ -51,9 +51,10 @@ export class DownloadService { if (size >= this.SIZE_WARNING && !await this.confirmService.confirm('The series is ' + this.humanFileSize(size) + '. Are you sure you want to continue?')) { return; } - this.downloadSeriesAPI(series.id).subscribe(res => { - const filename = series.name + '.zip'; - this.preformSave(res, filename); + this.downloadSeriesAPI(series.id).subscribe(resp => { + //const filename = series.name + '.zip'; + //this.preformSave(res, filename); + this.preformSave(resp.body || '', this.getFilenameFromHeader(resp.headers, series.name)); }); }); } @@ -63,9 +64,8 @@ export class DownloadService { if (size >= this.SIZE_WARNING && !await this.confirmService.confirm('The chapter is ' + this.humanFileSize(size) + '. Are you sure you want to continue?')) { return; } - this.downloadChapterAPI(chapter.id).subscribe(res => { - const filename = seriesName + ' - Chapter ' + chapter.number + '.zip'; - this.preformSave(res, filename); + this.downloadChapterAPI(chapter.id).subscribe((resp: HttpResponse) => { + this.preformSave(resp.body || '', this.getFilenameFromHeader(resp.headers, seriesName + ' - Chapter ' + chapter.number)); }); }); } @@ -75,9 +75,8 @@ export class DownloadService { if (size >= this.SIZE_WARNING && !await this.confirmService.confirm('The chapter is ' + this.humanFileSize(size) + '. Are you sure you want to continue?')) { return; } - this.downloadVolumeAPI(volume.id).subscribe(res => { - const filename = seriesName + ' - Volume ' + volume.name + '.zip'; - this.preformSave(res, filename); + this.downloadVolumeAPI(volume.id).subscribe(resp => { + this.preformSave(resp.body || '', this.getFilenameFromHeader(resp.headers, seriesName + ' - Volume ' + volume.name)); }); }); } @@ -88,6 +87,23 @@ export class DownloadService { this.toastr.success('File downloaded successfully: ' + filename); } + /** + * Attempts to parse out the filename from Content-Disposition header. + * If it fails, will default to defaultName and add the correct extension. If no extension is found in header, will use zip. + * @param headers + * @param defaultName + * @returns + */ + private getFilenameFromHeader(headers: HttpHeaders, defaultName: string) { + const tokens = (headers.get('content-disposition') || '').split(';'); + let filename = tokens[1].replace('filename=', '').replace('"', '').trim(); + if (filename.startsWith('download_') || filename.startsWith('kavita_download_')) { + const ext = filename.substring(filename.lastIndexOf('.'), filename.length); + return defaultName + ext; + } + return filename; + } + /** * Format bytes as human-readable text. * diff --git a/UI/Web/src/app/user-login/user-login.component.ts b/UI/Web/src/app/user-login/user-login.component.ts index 9a9c44c07..b72344514 100644 --- a/UI/Web/src/app/user-login/user-login.component.ts +++ b/UI/Web/src/app/user-login/user-login.component.ts @@ -42,7 +42,15 @@ export class UserLoginComponent implements OnInit { this.accountService.login(this.model).subscribe(() => { this.loginForm.reset(); this.navService.showNavBar(); - this.router.navigateByUrl('/library'); + + // Check if user came here from another url, else send to library route + const pageResume = localStorage.getItem('kavita--auth-intersection-url'); + if (pageResume && pageResume !== '/no-connection') { + localStorage.setItem('kavita--auth-intersection-url', ''); + this.router.navigateByUrl(pageResume); + } else { + this.router.navigateByUrl('/library'); + } }, err => { this.toastr.error(err.error); }); From b9a06d3586b78339abe56e4d561611e7867727ca Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Tue, 20 Jul 2021 10:22:04 -0500 Subject: [PATCH 08/23] More Webtoon Fixes (#406) * Fixed an issue where "blank" images could occur at the end of a webtoon if the users scrolls up and down when near the last page, due to a gap in checking if prefetch range is within totalPages bound. * Fixed goto first/last page not triggering webtoon reader to move. Disabled reading direction when in webtoon reader. * Added some DOM Purging, images that are +/- bufferPages (5) from you will no longer reside in DOM. This helps on low end phones. --- .../infinite-scroller.component.html | 2 +- .../infinite-scroller.component.ts | 54 +++++-------------- .../manga-reader/manga-reader.component.html | 2 +- .../manga-reader/manga-reader.component.ts | 1 + 4 files changed, 17 insertions(+), 42 deletions(-) diff --git a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html index d3e5f78fe..92be7cb04 100644 --- a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html +++ b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.html @@ -10,6 +10,6 @@ - image + image diff --git a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts index 4a8e36dd0..5e6973ecd 100644 --- a/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts +++ b/UI/Web/src/app/manga-reader/infinite-scroller/infinite-scroller.component.ts @@ -76,11 +76,11 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { debug: boolean = false; get minPageLoaded() { - return Math.min(...Object.keys(this.imagesLoaded).map(key => parseInt(key, 10))); + return Math.min(...Object.values(this.imagesLoaded)); } get maxPageLoaded() { - return Math.max(...Object.keys(this.imagesLoaded).map(key => parseInt(key, 10))); + return Math.max(...Object.values(this.imagesLoaded)); } @@ -171,10 +171,10 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { this.imagesLoaded = {}; this.webtoonImages.next([]); - const prefetchStart = Math.max(this.pageNum - this.bufferPages, 0); - const prefetchMax = Math.min(this.pageNum + this.bufferPages, this.totalPages); - this.debugLog('[INIT] Prefetching pages ' + prefetchStart + ' to ' + prefetchMax + '. Current page: ', this.pageNum); - for(let i = prefetchStart; i < prefetchMax; i++) { + const [startingIndex, endingIndex] = this.calculatePrefetchIndecies(); + + this.debugLog('[INIT] Prefetching pages ' + startingIndex + ' to ' + endingIndex + '. Current page: ', this.pageNum); + for(let i = startingIndex; i <= endingIndex; i++) { this.loadWebtoonImage(i); } } @@ -188,11 +188,6 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { const imagePage = this.readerService.imageUrlToPageNum(event.target.src); this.debugLog('[Image Load] Image loaded: ', imagePage); - if (!this.imagesLoaded.hasOwnProperty(imagePage)) { - this.imagesLoaded[imagePage] = imagePage; - } - - if (event.target.width < this.webtoonImageWidth) { this.webtoonImageWidth = event.target.width; } @@ -245,19 +240,6 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { this.pageNumberChange.emit(this.pageNum); this.prefetchWebtoonImages(); - // TODO: We can prune DOM based on our buffer - // Note: Can i test if we can put this dom pruning async, so user doesn't feel it? (don't forget to unobserve image when purging) - // I can feel a noticable scroll spike from this code (commenting out pruning until rest of the bugs are sorted) - // const images = document.querySelectorAll('img').forEach(img => { - // const imagePageNum = this.readerService.imageUrlToPageNum(img.src); - // if (imagePageNum < this.pageNum - this.bufferPages) { // this.minPrefetchedWebtoonImage - // console.log('Image ' + imagePageNum + ' is outside minimum range, pruning from DOM'); - // } else if (imagePageNum > this.pageNum + 1 + this.bufferPages) { // this.maxPrefetchedWebtoonImage - // console.log('Image ' + imagePageNum + ' is outside maximum range, pruning from DOM'); - // } - // // NOTE: Max and Mins don't update as we scroll! - // }); - if (scrollToPage) { const currentImage = document.querySelector('img#page-' + this.pageNum); @@ -278,7 +260,7 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { scrollToCurrentPage() { this.currentPageElem = document.querySelector('img#page-' + this.pageNum); if (!this.currentPageElem) { return; } - //if (this.isElementVisible(this.currentPageElem)) { return; } + // Update prevScrollPosition, so the next scroll event properly calculates direction this.prevScrollPosition = this.currentPageElem.getBoundingClientRect().top; this.isScrolling = true; @@ -310,6 +292,10 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { this.allImagesLoaded = false; this.webtoonImages.next(data); + + if (!this.imagesLoaded.hasOwnProperty(page)) { + this.imagesLoaded[page] = page; + } } attachIntersectionObserverElem(elem: HTMLImageElement) { @@ -332,8 +318,8 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { return [0, 0]; } } else { - startingIndex = Math.max(this.pageNum - this.bufferPages, 0); - endingIndex = Math.max(this.pageNum + this.bufferPages, 0); + startingIndex = Math.min(Math.max(this.pageNum - this.bufferPages, 0), this.totalPages); + endingIndex = Math.min(Math.max(this.pageNum + this.bufferPages, 0), this.totalPages); } @@ -351,22 +337,10 @@ export class InfiniteScrollerComponent implements OnInit, OnChanges, OnDestroy { } prefetchWebtoonImages() { - let [startingIndex, endingIndex] = this.calculatePrefetchIndecies(); + const [startingIndex, endingIndex] = this.calculatePrefetchIndecies(); if (startingIndex === 0 && endingIndex === 0) { return; } - // NOTE: This code isn't required now that we buffer around our current page. There will never be a request that is outside our bounds - // If a request comes in to prefetch over current page +/- bufferPages (+ 1 due to requesting from next/prev page), then deny it - // if (this.isScrollingForwards() && startingIndex > this.pageNum + (this.bufferPages + 1)) { - // this.debugLog('\t[PREFETCH] A request that is too far outside buffer range has been declined', this.pageNum); - // return; - // } - // if (!this.isScrollingForwards() && endingIndex < (this.pageNum - (this.bufferPages + 1))) { - // this.debugLog('\t[PREFETCH] A request that is too far outside buffer range has been declined', this.pageNum); - // return; - // } - this.debugLog('\t[PREFETCH] prefetching pages: ' + startingIndex + ' to ' + endingIndex); - for(let i = startingIndex; i < endingIndex; i++) { this.loadWebtoonImage(i); } diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.html b/UI/Web/src/app/manga-reader/manga-reader.component.html index 7f5f31994..1a0cb3f61 100644 --- a/UI/Web/src/app/manga-reader/manga-reader.component.html +++ b/UI/Web/src/app/manga-reader/manga-reader.component.html @@ -56,7 +56,7 @@
    - diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.ts b/UI/Web/src/app/manga-reader/manga-reader.component.ts index 4eeb8f059..9009b903a 100644 --- a/UI/Web/src/app/manga-reader/manga-reader.component.ts +++ b/UI/Web/src/app/manga-reader/manga-reader.component.ts @@ -849,6 +849,7 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { } this.setPageNum(page); + this.goToPageEvent.next(page); this.render(); } From b11bb0e3b563ff97edf64a88887d7d6e143a0ef9 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Tue, 20 Jul 2021 11:32:37 -0500 Subject: [PATCH 09/23] Extra Stat collection (#407) * Cleaned up error interceptor to avoid sending auth errors (when a 500 occurs) to sentry as auth errors aren't issues. * Added extra stat collection * Fixed a bad gitignore which ignored anything in a stats directory --- .gitignore | 4 +-- API/Controllers/ServerController.cs | 4 +-- API/Controllers/StatsController.cs | 2 +- API/DTOs/{ => Stats}/ClientInfoDto.cs | 13 ++++---- API/DTOs/{ => Stats}/ServerInfoDto.cs | 6 ++-- API/DTOs/{ => Stats}/UsageInfoDto.cs | 4 +-- API/DTOs/{ => Stats}/UsageStatisticsDto.cs | 4 +-- API/Interfaces/Services/IStatsService.cs | 4 +-- API/Services/Clients/StatsApiClient.cs | 2 +- API/Services/{ => Tasks}/StatsService.cs | 8 +++-- API/Startup.cs | 1 + .../app/_interceptors/error.interceptor.ts | 9 +++--- .../app/_models/{ => stats}/client-info.ts | 1 + .../_models/{ => stats}/details-version.ts | 0 UI/Web/src/app/_services/stats.service.ts | 32 ++++++++++++++++--- UI/Web/src/app/home/home.component.ts | 5 +-- .../series-detail.component.scss | 1 + UI/Web/src/app/shared/utils/clientUtils.ts | 21 ------------ 18 files changed, 64 insertions(+), 57 deletions(-) rename API/DTOs/{ => Stats}/ClientInfoDto.cs (66%) rename API/DTOs/{ => Stats}/ServerInfoDto.cs (73%) rename API/DTOs/{ => Stats}/UsageInfoDto.cs (95%) rename API/DTOs/{ => Stats}/UsageStatisticsDto.cs (96%) rename API/Services/{ => Tasks}/StatsService.cs (96%) rename UI/Web/src/app/_models/{ => stats}/client-info.ts (89%) rename UI/Web/src/app/_models/{ => stats}/details-version.ts (100%) delete mode 100644 UI/Web/src/app/shared/utils/clientUtils.ts diff --git a/.gitignore b/.gitignore index 2e5f40f53..756e09822 100644 --- a/.gitignore +++ b/.gitignore @@ -491,11 +491,11 @@ appsettings.json /API/kavita.db-wal /API/Hangfire.db /API/Hangfire-log.db -cache/ +API/cache/ /API/wwwroot/ /API/cache/ /API/temp/ _temp/ _output/ -stats/ +API/stats/ UI/Web/dist/ diff --git a/API/Controllers/ServerController.cs b/API/Controllers/ServerController.cs index b93a1178b..2fd460f79 100644 --- a/API/Controllers/ServerController.cs +++ b/API/Controllers/ServerController.cs @@ -1,10 +1,10 @@ using System; using System.IO; using System.Threading.Tasks; -using API.DTOs; +using API.DTOs.Stats; using API.Extensions; using API.Interfaces.Services; -using API.Services; +using API.Services.Tasks; using Kavita.Common; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/API/Controllers/StatsController.cs b/API/Controllers/StatsController.cs index f35552eec..d219db790 100644 --- a/API/Controllers/StatsController.cs +++ b/API/Controllers/StatsController.cs @@ -1,6 +1,6 @@ using System; using System.Threading.Tasks; -using API.DTOs; +using API.DTOs.Stats; using API.Interfaces.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/API/DTOs/ClientInfoDto.cs b/API/DTOs/Stats/ClientInfoDto.cs similarity index 66% rename from API/DTOs/ClientInfoDto.cs rename to API/DTOs/Stats/ClientInfoDto.cs index 7070e64d7..f2be3b41f 100644 --- a/API/DTOs/ClientInfoDto.cs +++ b/API/DTOs/Stats/ClientInfoDto.cs @@ -1,6 +1,6 @@ using System; -namespace API.DTOs +namespace API.DTOs.Stats { public class ClientInfoDto { @@ -16,13 +16,14 @@ namespace API.DTOs public DetailsVersion Os { get; set; } public DateTime? CollectedAt { get; set; } + public bool UsingDarkTheme { get; set; } public bool IsTheSameDevice(ClientInfoDto clientInfoDto) { - return (clientInfoDto.ScreenResolution ?? "").Equals(ScreenResolution) && - (clientInfoDto.PlatformType ?? "").Equals(PlatformType) && - (clientInfoDto.Browser?.Name ?? "").Equals(Browser?.Name) && - (clientInfoDto.Os?.Name ?? "").Equals(Os?.Name) && + return (clientInfoDto.ScreenResolution ?? string.Empty).Equals(ScreenResolution) && + (clientInfoDto.PlatformType ?? string.Empty).Equals(PlatformType) && + (clientInfoDto.Browser?.Name ?? string.Empty).Equals(Browser?.Name) && + (clientInfoDto.Os?.Name ?? string.Empty).Equals(Os?.Name) && clientInfoDto.CollectedAt.GetValueOrDefault().ToString("yyyy-MM-dd") .Equals(CollectedAt.GetValueOrDefault().ToString("yyyy-MM-dd")); } @@ -33,4 +34,4 @@ namespace API.DTOs public string Name { get; set; } public string Version { get; set; } } -} \ No newline at end of file +} diff --git a/API/DTOs/ServerInfoDto.cs b/API/DTOs/Stats/ServerInfoDto.cs similarity index 73% rename from API/DTOs/ServerInfoDto.cs rename to API/DTOs/Stats/ServerInfoDto.cs index 0f4a86d64..2aecebecc 100644 --- a/API/DTOs/ServerInfoDto.cs +++ b/API/DTOs/Stats/ServerInfoDto.cs @@ -1,4 +1,4 @@ -namespace API.DTOs +namespace API.DTOs.Stats { public class ServerInfoDto { @@ -8,5 +8,7 @@ public string KavitaVersion { get; set; } public string BuildBranch { get; set; } public string Culture { get; set; } + public bool IsDocker { get; set; } + public int NumOfCores { get; set; } } -} \ No newline at end of file +} diff --git a/API/DTOs/UsageInfoDto.cs b/API/DTOs/Stats/UsageInfoDto.cs similarity index 95% rename from API/DTOs/UsageInfoDto.cs rename to API/DTOs/Stats/UsageInfoDto.cs index ba4b06b41..64aaeefee 100644 --- a/API/DTOs/UsageInfoDto.cs +++ b/API/DTOs/Stats/UsageInfoDto.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using API.Entities.Enums; -namespace API.DTOs +namespace API.DTOs.Stats { public class UsageInfoDto { @@ -21,4 +21,4 @@ namespace API.DTOs public LibraryType Type { get; set; } public int Count { get; set; } } -} \ No newline at end of file +} diff --git a/API/DTOs/UsageStatisticsDto.cs b/API/DTOs/Stats/UsageStatisticsDto.cs similarity index 96% rename from API/DTOs/UsageStatisticsDto.cs rename to API/DTOs/Stats/UsageStatisticsDto.cs index 1180401c3..08e15dc3b 100644 --- a/API/DTOs/UsageStatisticsDto.cs +++ b/API/DTOs/Stats/UsageStatisticsDto.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; -namespace API.DTOs +namespace API.DTOs.Stats { public class UsageStatisticsDto { @@ -30,4 +30,4 @@ namespace API.DTOs ClientsInfo.Add(clientInfoDto); } } -} \ No newline at end of file +} diff --git a/API/Interfaces/Services/IStatsService.cs b/API/Interfaces/Services/IStatsService.cs index f91a4e522..f30222385 100644 --- a/API/Interfaces/Services/IStatsService.cs +++ b/API/Interfaces/Services/IStatsService.cs @@ -1,5 +1,5 @@ using System.Threading.Tasks; -using API.DTOs; +using API.DTOs.Stats; namespace API.Interfaces.Services { @@ -10,4 +10,4 @@ namespace API.Interfaces.Services Task CollectRelevantData(); Task CollectAndSendStatsData(); } -} \ No newline at end of file +} diff --git a/API/Services/Clients/StatsApiClient.cs b/API/Services/Clients/StatsApiClient.cs index 478852db5..e6845178d 100644 --- a/API/Services/Clients/StatsApiClient.cs +++ b/API/Services/Clients/StatsApiClient.cs @@ -2,7 +2,7 @@ using System.Net.Http; using System.Net.Http.Json; using System.Threading.Tasks; -using API.DTOs; +using API.DTOs.Stats; using Microsoft.Extensions.Logging; namespace API.Services.Clients diff --git a/API/Services/StatsService.cs b/API/Services/Tasks/StatsService.cs similarity index 96% rename from API/Services/StatsService.cs rename to API/Services/Tasks/StatsService.cs index 0e4748845..fc5e7b256 100644 --- a/API/Services/StatsService.cs +++ b/API/Services/Tasks/StatsService.cs @@ -6,7 +6,7 @@ using System.Text.Json; using System.Threading; using System.Threading.Tasks; using API.Data; -using API.DTOs; +using API.DTOs.Stats; using API.Interfaces; using API.Interfaces.Services; using API.Services.Clients; @@ -15,7 +15,7 @@ using Kavita.Common.EnvironmentInfo; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace API.Services +namespace API.Services.Tasks { public class StatsService : IStatsService { @@ -142,7 +142,9 @@ namespace API.Services RunTimeVersion = RuntimeInformation.FrameworkDescription, KavitaVersion = BuildInfo.Version.ToString(), Culture = Thread.CurrentThread.CurrentCulture.Name, - BuildBranch = BuildInfo.Branch + BuildBranch = BuildInfo.Branch, + IsDocker = new OsInfo(Array.Empty()).IsDocker, + NumOfCores = Environment.ProcessorCount }; return serverInfo; diff --git a/API/Startup.cs b/API/Startup.cs index e443ae5d8..fea6d0603 100644 --- a/API/Startup.cs +++ b/API/Startup.cs @@ -7,6 +7,7 @@ using API.Services; using API.Services.HostedServices; using Hangfire; using Hangfire.MemoryStorage; +using Kavita.Common; using Kavita.Common.EnvironmentInfo; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/UI/Web/src/app/_interceptors/error.interceptor.ts b/UI/Web/src/app/_interceptors/error.interceptor.ts index 9f8645a39..20c48fd8a 100644 --- a/UI/Web/src/app/_interceptors/error.interceptor.ts +++ b/UI/Web/src/app/_interceptors/error.interceptor.ts @@ -25,10 +25,6 @@ export class ErrorInterceptor implements HttpInterceptor { if (error === undefined || error === null) { return throwError(error); } - - if (!environment.production) { - console.error('error:', error); - } switch (error.status) { case 400: @@ -99,12 +95,15 @@ export class ErrorInterceptor implements HttpInterceptor { } private handleServerException(error: any) { - console.error('500 error:', error); const err = error.error; if (err.hasOwnProperty('message') && err.message.trim() !== '') { + if (err.message != 'User is not authenticated') { + console.log('500 error: ', error); + } this.toastr.error(err.message); } else { this.toastr.error('There was an unknown critical error.'); + console.error('500 error:', error); } } diff --git a/UI/Web/src/app/_models/client-info.ts b/UI/Web/src/app/_models/stats/client-info.ts similarity index 89% rename from UI/Web/src/app/_models/client-info.ts rename to UI/Web/src/app/_models/stats/client-info.ts index c4a5cd6b1..67916b8cf 100644 --- a/UI/Web/src/app/_models/client-info.ts +++ b/UI/Web/src/app/_models/stats/client-info.ts @@ -7,6 +7,7 @@ export interface ClientInfo { platformType: string, kavitaUiVersion: string, screenResolution: string; + usingDarkTheme: boolean; collectedAt?: Date; } diff --git a/UI/Web/src/app/_models/details-version.ts b/UI/Web/src/app/_models/stats/details-version.ts similarity index 100% rename from UI/Web/src/app/_models/details-version.ts rename to UI/Web/src/app/_models/stats/details-version.ts diff --git a/UI/Web/src/app/_services/stats.service.ts b/UI/Web/src/app/_services/stats.service.ts index 56d56d633..1c9d19133 100644 --- a/UI/Web/src/app/_services/stats.service.ts +++ b/UI/Web/src/app/_services/stats.service.ts @@ -1,7 +1,13 @@ import { HttpClient } from "@angular/common/http"; import { Injectable } from "@angular/core"; +import * as Bowser from "bowser"; +import { take } from "rxjs/operators"; import { environment } from "src/environments/environment"; -import { ClientInfo } from "../_models/client-info"; +import { ClientInfo } from "../_models/stats/client-info"; +import { DetailsVersion } from "../_models/stats/details-version"; +import { NavService } from "./nav.service"; +import { version } from '../../../package.json'; + @Injectable({ providedIn: 'root' @@ -10,9 +16,27 @@ export class StatsService { baseUrl = environment.apiUrl; - constructor(private httpClient: HttpClient) { } + constructor(private httpClient: HttpClient, private navService: NavService) { } - public sendClientInfo(clientInfo: ClientInfo) { - return this.httpClient.post(this.baseUrl + 'stats/client-info', clientInfo); + public async sendClientInfo() { + const data = await this.getInfo(); + this.httpClient.post(this.baseUrl + 'stats/client-info', data); + } + + private async getInfo(): Promise { + const screenResolution = `${window.screen.width} x ${window.screen.height}`; + + const browser = Bowser.getParser(window.navigator.userAgent); + + const usingDarkTheme = await this.navService.darkMode$.pipe(take(1)).toPromise(); + + return { + os: browser.getOS() as DetailsVersion, + browser: browser.getBrowser() as DetailsVersion, + platformType: browser.getPlatformType(), + kavitaUiVersion: version, + screenResolution, + usingDarkTheme + }; } } \ No newline at end of file diff --git a/UI/Web/src/app/home/home.component.ts b/UI/Web/src/app/home/home.component.ts index 4de69832b..a33a7358e 100644 --- a/UI/Web/src/app/home/home.component.ts +++ b/UI/Web/src/app/home/home.component.ts @@ -5,7 +5,6 @@ import { take } from 'rxjs/operators'; import { MemberService } from '../_services/member.service'; import { AccountService } from '../_services/account.service'; import { StatsService } from '../_services/stats.service'; -import * as ClientUtils from "../shared/utils/clientUtils"; @Component({ selector: 'app-home', @@ -35,9 +34,7 @@ export class HomeComponent implements OnInit { this.accountService.currentUser$.pipe(take(1)).subscribe(user => { - this.statsService.sendClientInfo(ClientUtils.getClientInfo()) - .pipe(take(1)) - .subscribe(resp => {/* No Operation */}); + this.statsService.sendClientInfo(); if (user) { this.router.navigateByUrl('/library'); diff --git a/UI/Web/src/app/series-detail/series-detail.component.scss b/UI/Web/src/app/series-detail/series-detail.component.scss index d154833cf..a20fa48be 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.scss +++ b/UI/Web/src/app/series-detail/series-detail.component.scss @@ -8,6 +8,7 @@ .poster { width: 100%; + max-height: 230px; } .rating-star { diff --git a/UI/Web/src/app/shared/utils/clientUtils.ts b/UI/Web/src/app/shared/utils/clientUtils.ts deleted file mode 100644 index 7170df442..000000000 --- a/UI/Web/src/app/shared/utils/clientUtils.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as Bowser from "bowser"; -import { version } from '../../../../package.json'; -import { ClientInfo } from "src/app/_models/client-info"; -import { DetailsVersion } from "src/app/_models/details-version"; - -const getClientInfo = (): ClientInfo => { - - const screenResolution = `${window.screen.width} x ${window.screen.height}`; - - const browser = Bowser.getParser(window.navigator.userAgent); - - return { - os: browser.getOS() as DetailsVersion, - browser: browser.getBrowser() as DetailsVersion, - platformType: browser.getPlatformType(), - kavitaUiVersion: version, - screenResolution - }; -} - -export { getClientInfo }; \ No newline at end of file From 27be13a201bfef8655b6a994950c7c2e22984911 Mon Sep 17 00:00:00 2001 From: Robbie Davis Date: Tue, 20 Jul 2021 13:26:02 -0400 Subject: [PATCH 10/23] Fixing poster image (#409) - Removing width to prevent stretching - Adding alignment to center image within container --- UI/Web/src/app/series-detail/series-detail.component.html | 2 +- UI/Web/src/app/series-detail/series-detail.component.scss | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/UI/Web/src/app/series-detail/series-detail.component.html b/UI/Web/src/app/series-detail/series-detail.component.html index 77cb67133..0b81a6d15 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.html +++ b/UI/Web/src/app/series-detail/series-detail.component.html @@ -1,6 +1,6 @@
    -
    +
    diff --git a/UI/Web/src/app/series-detail/series-detail.component.scss b/UI/Web/src/app/series-detail/series-detail.component.scss index a20fa48be..fe7aa5684 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.scss +++ b/UI/Web/src/app/series-detail/series-detail.component.scss @@ -6,8 +6,11 @@ } +.image-center { + text-align: center; +} + .poster { - width: 100%; max-height: 230px; } From c2d84ed0eb08a239d3ec7455b0f6c31a0001a8f9 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Tue, 20 Jul 2021 12:34:29 -0500 Subject: [PATCH 11/23] UI Stat issue (#410) * Fixed an issue on stats not sending from the UI --- UI/Web/src/app/_services/stats.service.ts | 7 +++---- UI/Web/src/app/app.component.ts | 7 ++++++- UI/Web/src/app/home/home.component.ts | 6 +----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/UI/Web/src/app/_services/stats.service.ts b/UI/Web/src/app/_services/stats.service.ts index 1c9d19133..37afc1d15 100644 --- a/UI/Web/src/app/_services/stats.service.ts +++ b/UI/Web/src/app/_services/stats.service.ts @@ -18,12 +18,11 @@ export class StatsService { constructor(private httpClient: HttpClient, private navService: NavService) { } - public async sendClientInfo() { - const data = await this.getInfo(); - this.httpClient.post(this.baseUrl + 'stats/client-info', data); + public sendClientInfo(data: ClientInfo) { + return this.httpClient.post(this.baseUrl + 'stats/client-info', data); } - private async getInfo(): Promise { + public async getInfo(): Promise { const screenResolution = `${window.screen.width} x ${window.screen.height}`; const browser = Bowser.getParser(window.navigator.userAgent); diff --git a/UI/Web/src/app/app.component.ts b/UI/Web/src/app/app.component.ts index 3e9952e6e..bdec0812f 100644 --- a/UI/Web/src/app/app.component.ts +++ b/UI/Web/src/app/app.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { AccountService } from './_services/account.service'; import { NavService } from './_services/nav.service'; +import { StatsService } from './_services/stats.service'; @Component({ selector: 'app-root', @@ -9,10 +10,14 @@ import { NavService } from './_services/nav.service'; }) export class AppComponent implements OnInit { - constructor(private accountService: AccountService, public navService: NavService) { } + constructor(private accountService: AccountService, public navService: NavService, private statsService: StatsService) { } ngOnInit(): void { this.setCurrentUser(); + + this.statsService.getInfo().then(data => { + this.statsService.sendClientInfo(data).subscribe(() => {/* No Operation */}); + }); } diff --git a/UI/Web/src/app/home/home.component.ts b/UI/Web/src/app/home/home.component.ts index a33a7358e..ff9c4f354 100644 --- a/UI/Web/src/app/home/home.component.ts +++ b/UI/Web/src/app/home/home.component.ts @@ -4,7 +4,6 @@ import { Router } from '@angular/router'; import { take } from 'rxjs/operators'; import { MemberService } from '../_services/member.service'; import { AccountService } from '../_services/account.service'; -import { StatsService } from '../_services/stats.service'; @Component({ selector: 'app-home', @@ -20,7 +19,7 @@ export class HomeComponent implements OnInit { password: new FormControl('', [Validators.required]) }); - constructor(public accountService: AccountService, private memberService: MemberService, private router: Router, private statsService: StatsService) { + constructor(public accountService: AccountService, private memberService: MemberService, private router: Router) { } ngOnInit(): void { @@ -33,9 +32,6 @@ export class HomeComponent implements OnInit { } this.accountService.currentUser$.pipe(take(1)).subscribe(user => { - - this.statsService.sendClientInfo(); - if (user) { this.router.navigateByUrl('/library'); } else { From e226c2b074898ed0af42a202df16ff03ee9e9a20 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Tue, 20 Jul 2021 13:48:14 -0500 Subject: [PATCH 12/23] Fixed a bug where collections wouldn't update after updating collection tags from series detail (#411) --- .../src/app/series-detail/series-detail.component.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/UI/Web/src/app/series-detail/series-detail.component.ts b/UI/Web/src/app/series-detail/series-detail.component.ts index dcfd9b5e2..af72632b4 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.ts +++ b/UI/Web/src/app/series-detail/series-detail.component.ts @@ -103,15 +103,19 @@ export class SeriesDetailComponent implements OnInit { const seriesId = parseInt(routeId, 10); this.libraryId = parseInt(libraryId, 10); - this.seriesService.getMetadata(seriesId).subscribe(metadata => { - this.seriesMetadata = metadata; - }); + this.loadSeriesMetadata(seriesId); this.libraryService.getLibraryType(this.libraryId).subscribe(type => { this.libraryType = type; this.loadSeries(seriesId); }); } + loadSeriesMetadata(seriesId: number) { + this.seriesService.getMetadata(seriesId).subscribe(metadata => { + this.seriesMetadata = metadata; + }); + } + handleSeriesActionCallback(action: Action, series: Series) { this.actionInProgress = true; switch(action) { @@ -371,6 +375,7 @@ export class SeriesDetailComponent implements OnInit { window.scrollTo(0, 0); if (closeResult.success) { this.loadSeries(this.series.id); + this.loadSeriesMetadata(this.series.id); } }); } From ef5b22b5852963c24735d497d8a85468266456d9 Mon Sep 17 00:00:00 2001 From: Robbie Davis Date: Tue, 20 Jul 2021 21:36:40 -0400 Subject: [PATCH 13/23] Fixing up a sizing issue while keeping a restriction on height for webtoons (#412) - increased the max-height to incorporate a percentage width for responsive scaling. - Removed image-centering. No longer needed. --- UI/Web/src/app/series-detail/series-detail.component.html | 2 +- UI/Web/src/app/series-detail/series-detail.component.scss | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/UI/Web/src/app/series-detail/series-detail.component.html b/UI/Web/src/app/series-detail/series-detail.component.html index 0b81a6d15..77cb67133 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.html +++ b/UI/Web/src/app/series-detail/series-detail.component.html @@ -1,6 +1,6 @@
    -
    +
    diff --git a/UI/Web/src/app/series-detail/series-detail.component.scss b/UI/Web/src/app/series-detail/series-detail.component.scss index fe7aa5684..8b3da7c30 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.scss +++ b/UI/Web/src/app/series-detail/series-detail.component.scss @@ -6,12 +6,9 @@ } -.image-center { - text-align: center; -} - .poster { - max-height: 230px; + width: 100%; + max-height: 481px; } .rating-star { From b8165b311cbe07d88e7179d78a211177b35d0d22 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Tue, 20 Jul 2021 21:39:44 -0500 Subject: [PATCH 14/23] Misc Polishing (#413) * Ensure that after we assign a role to a user, we show it immediately * Cached libraryType api as that is not going to change in a viewing session. Moved some components around to tighten bundles. * Cleaned up more TODOs * Refactored Configuration to use getter and setters so that the interface is a lot cleaner. Updated HashUtil to use JWT Secret instead of Machine name (as docker machine name is random each boot). --- API/Controllers/SettingsController.cs | 34 +- API/Data/Seed.cs | 17 +- .../ApplicationServiceExtensions.cs | 2 +- API/Program.cs | 219 +++++------ API/Startup.cs | 2 +- Kavita.Common/Configuration.cs | 366 ++++++++++++------ Kavita.Common/HashUtil.cs | 2 +- Kavita.Common/Kavita.Common.csproj | 1 + .../edit-series-modal.component.html | 1 - UI/Web/src/app/_models/in-progress-chapter.ts | 1 - UI/Web/src/app/_services/library.service.ts | 16 +- .../directory-picker.component.ts | 2 - .../edit-rbs-modal.component.ts | 6 +- .../manage-library.component.ts | 2 +- .../manage-settings.component.html | 8 +- .../manage-users/manage-users.component.ts | 5 + UI/Web/src/app/app.module.ts | 4 + .../library-card/library-card.component.html | 0 .../library-card/library-card.component.scss | 0 .../library-card/library-card.component.ts | 0 .../manga-reader/manga-reader.component.html | 2 +- .../register-member.component.html | 0 .../register-member.component.scss | 0 .../register-member.component.ts | 0 .../series-card/series-card.component.html | 0 .../series-card/series-card.component.scss | 0 .../series-card/series-card.component.ts | 8 +- UI/Web/src/app/shared/shared.module.ts | 10 +- .../src/app/typeahead/typeahead.component.ts | 7 - 29 files changed, 408 insertions(+), 307 deletions(-) rename UI/Web/src/app/{shared => }/library-card/library-card.component.html (100%) rename UI/Web/src/app/{shared => }/library-card/library-card.component.scss (100%) rename UI/Web/src/app/{shared => }/library-card/library-card.component.ts (100%) rename UI/Web/src/app/{shared => }/register-member/register-member.component.html (100%) rename UI/Web/src/app/{shared => }/register-member/register-member.component.scss (100%) rename UI/Web/src/app/{shared => }/register-member/register-member.component.ts (100%) rename UI/Web/src/app/{shared => }/series-card/series-card.component.html (100%) rename UI/Web/src/app/{shared => }/series-card/series-card.component.scss (100%) rename UI/Web/src/app/{shared => }/series-card/series-card.component.ts (92%) diff --git a/API/Controllers/SettingsController.cs b/API/Controllers/SettingsController.cs index 2ead0916c..df275bb67 100644 --- a/API/Controllers/SettingsController.cs +++ b/API/Controllers/SettingsController.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using API.Data; using API.DTOs; using API.Entities.Enums; using API.Extensions; @@ -13,7 +12,6 @@ using Kavita.Common; using Kavita.Common.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace API.Controllers @@ -24,26 +22,24 @@ namespace API.Controllers private readonly ILogger _logger; private readonly IUnitOfWork _unitOfWork; private readonly ITaskScheduler _taskScheduler; - private readonly IConfiguration _configuration; - public SettingsController(ILogger logger, IUnitOfWork unitOfWork, ITaskScheduler taskScheduler, IConfiguration configuration) + public SettingsController(ILogger logger, IUnitOfWork unitOfWork, ITaskScheduler taskScheduler) { _logger = logger; _unitOfWork = unitOfWork; _taskScheduler = taskScheduler; - _configuration = configuration; } - [HttpGet("")] + [HttpGet] public async Task> GetSettings() { var settingsDto = await _unitOfWork.SettingsRepository.GetSettingsDtoAsync(); - settingsDto.Port = Configuration.GetPort(Program.GetAppSettingFilename()); - settingsDto.LoggingLevel = Configuration.GetLogLevel(Program.GetAppSettingFilename()); + settingsDto.Port = Configuration.Port; + settingsDto.LoggingLevel = Configuration.LogLevel; return Ok(settingsDto); } - [HttpPost("")] + [HttpPost] public async Task> UpdateSettings(ServerSettingDto updateSettingsDto) { _logger.LogInformation("{UserName} is updating Server Settings", User.GetUsername()); @@ -61,9 +57,6 @@ namespace API.Controllers // We do not allow CacheDirectory changes, so we will ignore. var currentSettings = await _unitOfWork.SettingsRepository.GetSettingsAsync(); - var logLevelOptions = new LogLevelOptions(); - _configuration.GetSection("Logging:LogLevel").Bind(logLevelOptions); - foreach (var setting in currentSettings) { if (setting.Key == ServerSettingKey.TaskBackup && updateSettingsDto.TaskBackup != setting.Value) @@ -78,24 +71,24 @@ namespace API.Controllers _unitOfWork.SettingsRepository.Update(setting); } - if (setting.Key == ServerSettingKey.Port && updateSettingsDto.Port + "" != setting.Value) + if (setting.Key == ServerSettingKey.Port && updateSettingsDto.Port + string.Empty != setting.Value) { - setting.Value = updateSettingsDto.Port + ""; + setting.Value = updateSettingsDto.Port + string.Empty; // Port is managed in appSetting.json - Configuration.UpdatePort(Program.GetAppSettingFilename(), updateSettingsDto.Port); + Configuration.Port = updateSettingsDto.Port; _unitOfWork.SettingsRepository.Update(setting); } - if (setting.Key == ServerSettingKey.LoggingLevel && updateSettingsDto.LoggingLevel + "" != setting.Value) + if (setting.Key == ServerSettingKey.LoggingLevel && updateSettingsDto.LoggingLevel + string.Empty != setting.Value) { - setting.Value = updateSettingsDto.LoggingLevel + ""; - Configuration.UpdateLogLevel(Program.GetAppSettingFilename(), updateSettingsDto.LoggingLevel); + setting.Value = updateSettingsDto.LoggingLevel + string.Empty; + Configuration.LogLevel = updateSettingsDto.LoggingLevel; _unitOfWork.SettingsRepository.Update(setting); } - if (setting.Key == ServerSettingKey.AllowStatCollection && updateSettingsDto.AllowStatCollection + "" != setting.Value) + if (setting.Key == ServerSettingKey.AllowStatCollection && updateSettingsDto.AllowStatCollection + string.Empty != setting.Value) { - setting.Value = updateSettingsDto.AllowStatCollection + ""; + setting.Value = updateSettingsDto.AllowStatCollection + string.Empty; _unitOfWork.SettingsRepository.Update(setting); if (!updateSettingsDto.AllowStatCollection) { @@ -108,7 +101,6 @@ namespace API.Controllers } } - _configuration.GetSection("Logging:LogLevel:Default").Value = updateSettingsDto.LoggingLevel + ""; if (!_unitOfWork.HasChanges()) return Ok("Nothing was updated"); if (!_unitOfWork.HasChanges() || !await _unitOfWork.CommitAsync()) diff --git a/API/Data/Seed.cs b/API/Data/Seed.cs index 2c7eb373b..7185b403d 100644 --- a/API/Data/Seed.cs +++ b/API/Data/Seed.cs @@ -29,7 +29,7 @@ namespace API.Data var exists = await roleManager.RoleExistsAsync(role.Name); if (!exists) { - await roleManager.CreateAsync(role); + await roleManager.CreateAsync(role); } } } @@ -37,7 +37,7 @@ namespace API.Data public static async Task SeedSettings(DataContext context) { await context.Database.EnsureCreatedAsync(); - + IList defaultSettings = new List() { new() {Key = ServerSettingKey.CacheDirectory, Value = CacheService.CacheDirectory}, @@ -46,7 +46,7 @@ namespace API.Data new () {Key = ServerSettingKey.TaskBackup, Value = "weekly"}, new () {Key = ServerSettingKey.BackupDirectory, Value = Path.GetFullPath(Path.Join(Directory.GetCurrentDirectory(), "backups/"))}, new () {Key = ServerSettingKey.Port, Value = "5000"}, // Not used from DB, but DB is sync with appSettings.json - new () {Key = ServerSettingKey.AllowStatCollection, Value = "true"}, + new () {Key = ServerSettingKey.AllowStatCollection, Value = "true"}, }; foreach (var defaultSetting in defaultSettings) @@ -61,14 +61,13 @@ namespace API.Data await context.SaveChangesAsync(); // Port and LoggingLevel are managed in appSettings.json. Update the DB values to match - var configFile = Program.GetAppSettingFilename(); context.ServerSetting.FirstOrDefault(s => s.Key == ServerSettingKey.Port).Value = - Configuration.GetPort(configFile) + ""; + Configuration.Port + string.Empty; context.ServerSetting.FirstOrDefault(s => s.Key == ServerSettingKey.LoggingLevel).Value = - Configuration.GetLogLevel(configFile); - + Configuration.LogLevel + string.Empty; + await context.SaveChangesAsync(); - + } } -} \ No newline at end of file +} diff --git a/API/Extensions/ApplicationServiceExtensions.cs b/API/Extensions/ApplicationServiceExtensions.cs index 0a43db49e..f33b72809 100644 --- a/API/Extensions/ApplicationServiceExtensions.cs +++ b/API/Extensions/ApplicationServiceExtensions.cs @@ -43,7 +43,7 @@ namespace API.Extensions services.AddDbContext(options => { options.UseSqlite(config.GetConnectionString("DefaultConnection")); - options.EnableSensitiveDataLogging(env.IsDevelopment() || Configuration.GetLogLevel(Program.GetAppSettingFilename()).Equals("Debug")); + options.EnableSensitiveDataLogging(env.IsDevelopment() || Configuration.LogLevel.Equals("Debug")); }); } diff --git a/API/Program.cs b/API/Program.cs index 238036960..a3b0e6773 100644 --- a/API/Program.cs +++ b/API/Program.cs @@ -18,132 +18,117 @@ using Sentry; namespace API { - public class Program - { - private static int _httpPort; + public class Program + { + private static readonly int HttpPort = Configuration.Port; - protected Program() - { - } + protected Program() + { + } - public static string GetAppSettingFilename() - { - var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - var isDevelopment = environment == Environments.Development; - return "appsettings" + (isDevelopment ? ".Development" : "") + ".json"; - } + public static async Task Main(string[] args) + { + Console.OutputEncoding = System.Text.Encoding.UTF8; - public static async Task Main(string[] args) - { - Console.OutputEncoding = System.Text.Encoding.UTF8; + // Before anything, check if JWT has been generated properly or if user still has default + if (!Configuration.CheckIfJwtTokenSet() && + Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != Environments.Development) + { + Console.WriteLine("Generating JWT TokenKey for encrypting user sessions..."); + var rBytes = new byte[128]; + using (var crypto = new RNGCryptoServiceProvider()) crypto.GetBytes(rBytes); + Configuration.JwtToken = Convert.ToBase64String(rBytes).Replace("/", string.Empty); + } - // Before anything, check if JWT has been generated properly or if user still has default - if (!Configuration.CheckIfJwtTokenSet(GetAppSettingFilename()) && Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != Environments.Development) + var host = CreateHostBuilder(args).Build(); + + using var scope = host.Services.CreateScope(); + var services = scope.ServiceProvider; + + try + { + var context = services.GetRequiredService(); + var roleManager = services.GetRequiredService>(); + // Apply all migrations on startup + await context.Database.MigrateAsync(); + await Seed.SeedRoles(roleManager); + await Seed.SeedSettings(context); + } + catch (Exception ex) + { + var logger = services.GetRequiredService>(); + logger.LogError(ex, "An error occurred during migration"); + } + + await host.RunAsync(); + } + + private static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => { - Console.WriteLine("Generating JWT TokenKey for encrypting user sessions..."); - var rBytes = new byte[128]; - using (var crypto = new RNGCryptoServiceProvider()) crypto.GetBytes(rBytes); - var base64 = Convert.ToBase64String(rBytes).Replace("/", ""); - Configuration.UpdateJwtToken(GetAppSettingFilename(), base64); - } + webBuilder.UseKestrel((opts) => + { + opts.ListenAnyIP(HttpPort, options => { options.Protocols = HttpProtocols.Http1AndHttp2; }); + }); - // Get HttpPort from Config - _httpPort = Configuration.GetPort(GetAppSettingFilename()); + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + if (environment != Environments.Development) + { + webBuilder.UseSentry(options => + { + options.Dsn = "https://40f4e7b49c094172a6f99d61efb2740f@o641015.ingest.sentry.io/5757423"; + options.MaxBreadcrumbs = 200; + options.AttachStacktrace = true; + options.Debug = false; + options.SendDefaultPii = false; + options.DiagnosticLevel = SentryLevel.Debug; + options.ShutdownTimeout = TimeSpan.FromSeconds(5); + options.Release = BuildInfo.Version.ToString(); + options.AddExceptionFilterForType(); + options.AddExceptionFilterForType(); + options.AddExceptionFilterForType(); + options.AddExceptionFilterForType(); - - var host = CreateHostBuilder(args).Build(); - - using var scope = host.Services.CreateScope(); - var services = scope.ServiceProvider; - - try - { - var context = services.GetRequiredService(); - var roleManager = services.GetRequiredService>(); - // Apply all migrations on startup - await context.Database.MigrateAsync(); - await Seed.SeedRoles(roleManager); - await Seed.SeedSettings(context); - } - catch (Exception ex) - { - var logger = services.GetRequiredService >(); - logger.LogError(ex, "An error occurred during migration"); - } - - await host.RunAsync(); - } - - private static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseKestrel((opts) => - { - opts.ListenAnyIP(_httpPort, options => + options.BeforeSend = sentryEvent => + { + if (sentryEvent.Exception != null + && sentryEvent.Exception.Message.StartsWith("[GetCoverImage]") + && sentryEvent.Exception.Message.StartsWith("[BookService]") + && sentryEvent.Exception.Message.StartsWith("[ExtractArchive]") + && sentryEvent.Exception.Message.StartsWith("[GetSummaryInfo]") + && sentryEvent.Exception.Message.StartsWith("[GetSummaryInfo]") + && sentryEvent.Exception.Message.StartsWith("[GetNumberOfPagesFromArchive]") + && sentryEvent.Exception.Message.Contains("EPUB parsing error") + && sentryEvent.Exception.Message.Contains("Unsupported EPUB version") + && sentryEvent.Exception.Message.Contains("Incorrect EPUB") + && sentryEvent.Exception.Message.Contains("Access is Denied")) { - options.Protocols = HttpProtocols.Http1AndHttp2; - }); - }); + return null; // Don't send this event to Sentry + } - var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - if (environment != Environments.Development) - { - webBuilder.UseSentry(options => + sentryEvent.ServerName = null; // Never send Server Name to Sentry + return sentryEvent; + }; + + options.ConfigureScope(scope => + { + scope.User = new User() { - options.Dsn = "https://40f4e7b49c094172a6f99d61efb2740f@o641015.ingest.sentry.io/5757423"; - options.MaxBreadcrumbs = 200; - options.AttachStacktrace = true; - options.Debug = false; - options.SendDefaultPii = false; - options.DiagnosticLevel = SentryLevel.Debug; - options.ShutdownTimeout = TimeSpan.FromSeconds(5); - options.Release = BuildInfo.Version.ToString(); - options.AddExceptionFilterForType(); - options.AddExceptionFilterForType(); - options.AddExceptionFilterForType(); - options.AddExceptionFilterForType(); + Id = HashUtil.AnonymousToken() + }; + scope.Contexts.App.Name = BuildInfo.AppName; + scope.Contexts.App.Version = BuildInfo.Version.ToString(); + scope.Contexts.App.StartTime = DateTime.UtcNow; + scope.Contexts.App.Hash = HashUtil.AnonymousToken(); + scope.Contexts.App.Build = BuildInfo.Release; + scope.SetTag("culture", Thread.CurrentThread.CurrentCulture.Name); + scope.SetTag("branch", BuildInfo.Branch); + }); + }); + } - options.BeforeSend = sentryEvent => - { - if (sentryEvent.Exception != null - && sentryEvent.Exception.Message.StartsWith("[GetCoverImage]") - && sentryEvent.Exception.Message.StartsWith("[BookService]") - && sentryEvent.Exception.Message.StartsWith("[ExtractArchive]") - && sentryEvent.Exception.Message.StartsWith("[GetSummaryInfo]") - && sentryEvent.Exception.Message.StartsWith("[GetSummaryInfo]") - && sentryEvent.Exception.Message.StartsWith("[GetNumberOfPagesFromArchive]") - && sentryEvent.Exception.Message.Contains("EPUB parsing error") - && sentryEvent.Exception.Message.Contains("Unsupported EPUB version") - && sentryEvent.Exception.Message.Contains("Incorrect EPUB") - && sentryEvent.Exception.Message.Contains("Access is Denied")) - { - return null; // Don't send this event to Sentry - } - - sentryEvent.ServerName = null; // Never send Server Name to Sentry - return sentryEvent; - }; - - options.ConfigureScope(scope => - { - scope.User = new User() - { - Id = HashUtil.AnonymousToken() - }; - scope.Contexts.App.Name = BuildInfo.AppName; - scope.Contexts.App.Version = BuildInfo.Version.ToString(); - scope.Contexts.App.StartTime = DateTime.UtcNow; - scope.Contexts.App.Hash = HashUtil.AnonymousToken(); - scope.Contexts.App.Build = BuildInfo.Release; - scope.SetTag("culture", Thread.CurrentThread.CurrentCulture.Name); - scope.SetTag("branch", BuildInfo.Branch); - }); - - }); - } - - webBuilder.UseStartup(); - }); - } + webBuilder.UseStartup(); + }); + } } diff --git a/API/Startup.cs b/API/Startup.cs index fea6d0603..61a104c1c 100644 --- a/API/Startup.cs +++ b/API/Startup.cs @@ -146,7 +146,7 @@ namespace API }); } - private void OnShutdown() + private static void OnShutdown() { Console.WriteLine("Server is shutting down. Please allow a few seconds to stop any background jobs..."); TaskScheduler.Client.Dispose(); diff --git a/Kavita.Common/Configuration.cs b/Kavita.Common/Configuration.cs index 755e57743..57e96b234 100644 --- a/Kavita.Common/Configuration.cs +++ b/Kavita.Common/Configuration.cs @@ -2,133 +2,259 @@ using System.IO; using System.Text.Json; using Kavita.Common.EnvironmentInfo; +using Microsoft.Extensions.Hosting; namespace Kavita.Common { - public static class Configuration - { - #region JWT Token - public static bool CheckIfJwtTokenSet(string filePath) - { - try { - var json = File.ReadAllText(filePath); - var jsonObj = JsonSerializer.Deserialize(json); - const string key = "TokenKey"; - - if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) - { - return tokenElement.GetString() != "super secret unguessable key"; - } + public static class Configuration + { + private static string AppSettingsFilename = GetAppSettingFilename(); + public static string Branch + { + get => GetBranch(GetAppSettingFilename()); + set => SetBranch(GetAppSettingFilename(), value); + } - return false; - - } - catch (Exception ex) { - Console.WriteLine("Error writing app settings: " + ex.Message); + public static int Port + { + get => GetPort(GetAppSettingFilename()); + set => SetPort(GetAppSettingFilename(), value); + } + + public static string JwtToken + { + get => GetJwtToken(GetAppSettingFilename()); + set => SetJwtToken(GetAppSettingFilename(), value); + } + + public static string LogLevel + { + get => GetLogLevel(GetAppSettingFilename()); + set => SetLogLevel(GetAppSettingFilename(), value); + } + + private static string GetAppSettingFilename() + { + if (!string.IsNullOrEmpty(AppSettingsFilename)) + { + return AppSettingsFilename; + } + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + var isDevelopment = environment == Environments.Development; + return "appsettings" + (isDevelopment ? ".Development" : "") + ".json"; + } + + #region JWT Token + + private static string GetJwtToken(string filePath) + { + try + { + var json = File.ReadAllText(filePath); + var jsonObj = JsonSerializer.Deserialize(json); + const string key = "TokenKey"; + + if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) + { + return tokenElement.GetString(); } + return string.Empty; + } + catch (Exception ex) + { + Console.WriteLine("Error reading app settings: " + ex.Message); + } + + return string.Empty; + } + + private static bool SetJwtToken(string filePath, string token) + { + try + { + var currentToken = GetJwtToken(filePath); + var json = File.ReadAllText(filePath) + .Replace("\"TokenKey\": \"" + currentToken, "\"TokenKey\": \"" + token); + File.WriteAllText(filePath, json); + return true; + } + catch (Exception) + { return false; - } - public static bool UpdateJwtToken(string filePath, string token) - { - try - { - var json = File.ReadAllText(filePath).Replace("super secret unguessable key", token); - File.WriteAllText(filePath, json); - return true; - } - catch (Exception) - { - return false; - } - } - #endregion - #region Port - public static bool UpdatePort(string filePath, int port) - { - if (new OsInfo(Array.Empty()).IsDocker) - { - return true; - } - - try - { - var currentPort = GetPort(filePath); - var json = File.ReadAllText(filePath).Replace("\"Port\": " + currentPort, "\"Port\": " + port); - File.WriteAllText(filePath, json); - return true; - } - catch (Exception) - { - return false; - } - } - public static int GetPort(string filePath) - { - const int defaultPort = 5000; - if (new OsInfo(Array.Empty()).IsDocker) - { - return defaultPort; - } - - try { - var json = File.ReadAllText(filePath); - var jsonObj = JsonSerializer.Deserialize(json); - const string key = "Port"; - - if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) - { - return tokenElement.GetInt32(); - } - } - catch (Exception ex) { - Console.WriteLine("Error writing app settings: " + ex.Message); - } + } + } + public static bool CheckIfJwtTokenSet() + { + //string filePath + try + { + return GetJwtToken(GetAppSettingFilename()) != "super secret unguessable key"; + } + catch (Exception ex) + { + Console.WriteLine("Error writing app settings: " + ex.Message); + } + + return false; + } + + public static bool UpdateJwtToken(string token) + { + try + { + var filePath = GetAppSettingFilename(); + var json = File.ReadAllText(filePath).Replace("super secret unguessable key", token); + File.WriteAllText(GetAppSettingFilename(), json); + return true; + } + catch (Exception) + { + return false; + } + } + + #endregion + + #region Port + + public static bool SetPort(string filePath, int port) + { + if (new OsInfo(Array.Empty()).IsDocker) + { + return true; + } + + try + { + var currentPort = GetPort(filePath); + var json = File.ReadAllText(filePath).Replace("\"Port\": " + currentPort, "\"Port\": " + port); + File.WriteAllText(filePath, json); + return true; + } + catch (Exception) + { + return false; + } + } + + public static int GetPort(string filePath) + { + Console.WriteLine(GetAppSettingFilename()); + const int defaultPort = 5000; + if (new OsInfo(Array.Empty()).IsDocker) + { return defaultPort; - } - #endregion - #region LogLevel - public static bool UpdateLogLevel(string filePath, string logLevel) - { - try - { - var currentLevel = GetLogLevel(filePath); - var json = File.ReadAllText(filePath).Replace($"\"Default\": \"{currentLevel}\"", $"\"Default\": \"{logLevel}\""); - File.WriteAllText(filePath, json); - return true; - } - catch (Exception) - { - return false; - } - } - public static string GetLogLevel(string filePath) - { - try { - var json = File.ReadAllText(filePath); - var jsonObj = JsonSerializer.Deserialize(json); - if (jsonObj.TryGetProperty("Logging", out JsonElement tokenElement)) - { - foreach (var property in tokenElement.EnumerateObject()) - { - if (!property.Name.Equals("LogLevel")) continue; - foreach (var logProperty in property.Value.EnumerateObject()) - { - if (logProperty.Name.Equals("Default")) - { - return logProperty.Value.GetString(); - } - } - } - } - } - catch (Exception ex) { - Console.WriteLine("Error writing app settings: " + ex.Message); - } + } - return "Information"; - } - #endregion - } -} \ No newline at end of file + try + { + var json = File.ReadAllText(filePath); + var jsonObj = JsonSerializer.Deserialize(json); + const string key = "Port"; + + if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) + { + return tokenElement.GetInt32(); + } + } + catch (Exception ex) + { + Console.WriteLine("Error writing app settings: " + ex.Message); + } + + return defaultPort; + } + + #endregion + + #region LogLevel + + public static bool SetLogLevel(string filePath, string logLevel) + { + try + { + var currentLevel = GetLogLevel(filePath); + var json = File.ReadAllText(filePath) + .Replace($"\"Default\": \"{currentLevel}\"", $"\"Default\": \"{logLevel}\""); + File.WriteAllText(filePath, json); + return true; + } + catch (Exception) + { + return false; + } + } + + public static string GetLogLevel(string filePath) + { + try + { + var json = File.ReadAllText(filePath); + var jsonObj = JsonSerializer.Deserialize(json); + if (jsonObj.TryGetProperty("Logging", out JsonElement tokenElement)) + { + foreach (var property in tokenElement.EnumerateObject()) + { + if (!property.Name.Equals("LogLevel")) continue; + foreach (var logProperty in property.Value.EnumerateObject()) + { + if (logProperty.Name.Equals("Default")) + { + return logProperty.Value.GetString(); + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine("Error writing app settings: " + ex.Message); + } + + return "Information"; + } + + #endregion + + public static string GetBranch(string filePath) + { + const string defaultBranch = "main"; + + try + { + var json = File.ReadAllText(filePath); + var jsonObj = JsonSerializer.Deserialize(json); + const string key = "Branch"; + + if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) + { + return tokenElement.GetString(); + } + } + catch (Exception ex) + { + Console.WriteLine("Error reading app settings: " + ex.Message); + } + + return defaultBranch; + } + + public static bool SetBranch(string filePath, string updatedBranch) + { + try + { + var currentBranch = GetBranch(filePath); + var json = File.ReadAllText(filePath) + .Replace("\"Branch\": " + currentBranch, "\"Branch\": " + updatedBranch); + File.WriteAllText(filePath, json); + return true; + } + catch (Exception) + { + return false; + } + } + } +} diff --git a/Kavita.Common/HashUtil.cs b/Kavita.Common/HashUtil.cs index b83068f5f..0ae9efab8 100644 --- a/Kavita.Common/HashUtil.cs +++ b/Kavita.Common/HashUtil.cs @@ -34,7 +34,7 @@ namespace Kavita.Common /// public static string AnonymousToken() { - var seed = $"{Environment.ProcessorCount}_{Environment.OSVersion.Platform}_{Environment.MachineName}_{Environment.UserName}"; + var seed = $"{Environment.ProcessorCount}_{Environment.OSVersion.Platform}_{Configuration.JwtToken}_{Environment.UserName}"; return CalculateCrc(seed); } } diff --git a/Kavita.Common/Kavita.Common.csproj b/Kavita.Common/Kavita.Common.csproj index b19d8551f..b933425c0 100644 --- a/Kavita.Common/Kavita.Common.csproj +++ b/Kavita.Common/Kavita.Common.csproj @@ -10,6 +10,7 @@ + diff --git a/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html index 614880bb3..fe11d2451 100644 --- a/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html +++ b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html @@ -160,7 +160,6 @@
    diff --git a/UI/Web/src/app/_models/in-progress-chapter.ts b/UI/Web/src/app/_models/in-progress-chapter.ts index 1fd6133d2..57e75b0ed 100644 --- a/UI/Web/src/app/_models/in-progress-chapter.ts +++ b/UI/Web/src/app/_models/in-progress-chapter.ts @@ -1,4 +1,3 @@ -//TODO: Refactor this name to something better export interface InProgressChapter { id: number; range: string; diff --git a/UI/Web/src/app/_services/library.service.ts b/UI/Web/src/app/_services/library.service.ts index cfba02d99..d77871f91 100644 --- a/UI/Web/src/app/_services/library.service.ts +++ b/UI/Web/src/app/_services/library.service.ts @@ -14,7 +14,8 @@ export class LibraryService { baseUrl = environment.apiUrl; - libraryNames: {[key:number]: string} | undefined = undefined; + private libraryNames: {[key:number]: string} | undefined = undefined; + private libraryTypes: {[key: number]: LibraryType} | undefined = undefined; constructor(private httpClient: HttpClient) {} @@ -75,8 +76,17 @@ export class LibraryService { } getLibraryType(libraryId: number) { - // TODO: Cache this in browser - return this.httpClient.get(this.baseUrl + 'library/type?libraryId=' + libraryId); + if (this.libraryTypes != undefined && this.libraryTypes.hasOwnProperty(libraryId)) { + return of(this.libraryTypes[libraryId]); + } + return this.httpClient.get(this.baseUrl + 'library/type?libraryId=' + libraryId).pipe(map(l => { + if (this.libraryTypes === undefined) { + this.libraryTypes = {}; + } + + this.libraryTypes[libraryId] = l; + return this.libraryTypes[libraryId]; + })); } search(term: string) { diff --git a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts index fc5a5d2ee..85fa530bb 100644 --- a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts +++ b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts @@ -42,7 +42,6 @@ export class DirectoryPickerComponent implements OnInit { } goBack() { - // BUG: When Going back to initial listing, this code gets stuck on first drive this.routeStack.pop(); const stackPeek = this.routeStack.peek(); if (stackPeek !== undefined) { @@ -53,7 +52,6 @@ export class DirectoryPickerComponent implements OnInit { this.currentRoot = ''; this.loadChildren(this.currentRoot); } - } loadChildren(path: string) { diff --git a/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts b/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts index ee659adf6..ff6346152 100644 --- a/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts +++ b/UI/Web/src/app/admin/_modals/edit-rbs-modal/edit-rbs-modal.component.ts @@ -30,7 +30,7 @@ export class EditRbsModalComponent implements OnInit { } close() { - this.modal.close(false); + this.modal.close(undefined); } save() { @@ -42,8 +42,10 @@ export class EditRbsModalComponent implements OnInit { this.memberService.updateMemberRoles(this.member?.username, selectedRoles).subscribe(() => { if (this.member) { this.member.roles = selectedRoles; + this.modal.close(this.member); + return; } - this.modal.close(true); + this.modal.close(undefined); }); } diff --git a/UI/Web/src/app/admin/manage-library/manage-library.component.ts b/UI/Web/src/app/admin/manage-library/manage-library.component.ts index f0aae12e9..3825d25c8 100644 --- a/UI/Web/src/app/admin/manage-library/manage-library.component.ts +++ b/UI/Web/src/app/admin/manage-library/manage-library.component.ts @@ -69,7 +69,7 @@ export class ManageLibraryComponent implements OnInit, OnDestroy { this.libraryService.delete(library.id).pipe(take(1)).subscribe(() => { this.deletionInProgress = false; this.getLibraries(); - this.toastr.success('Library has been removed'); // BUG: This is not causing a refresh + this.toastr.success('Library has been removed'); }); } } diff --git a/UI/Web/src/app/admin/manage-settings/manage-settings.component.html b/UI/Web/src/app/admin/manage-settings/manage-settings.component.html index c3a94bd0e..62cd28a89 100644 --- a/UI/Web/src/app/admin/manage-settings/manage-settings.component.html +++ b/UI/Web/src/app/admin/manage-settings/manage-settings.component.html @@ -25,18 +25,14 @@
    -   - Send anonymous usage and error information to Kavita's servers. This includes information on your browser, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes. Requires restart to take effect. - Send anonymous usage and error information to Kavita's servers. This includes information on your browser, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes. Requires restart to take effect. -

    Send anonymous usage and error information to Kavita's servers. This includes information on your browser, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes. Requires restart to take effect

    + +

    Send anonymous usage and error information to Kavita's servers. This includes information on your browser, error reporting as well as OS and runtime version. We will use this information to prioritize features, bug fixes, and preformance tuning. Requires restart to take effect.

    - -

    Reoccuring Tasks

      diff --git a/UI/Web/src/app/admin/manage-users/manage-users.component.ts b/UI/Web/src/app/admin/manage-users/manage-users.component.ts index 402cde3f2..15078cce1 100644 --- a/UI/Web/src/app/admin/manage-users/manage-users.component.ts +++ b/UI/Web/src/app/admin/manage-users/manage-users.component.ts @@ -82,6 +82,11 @@ export class ManageUsersComponent implements OnInit { openEditRole(member: Member) { const modalRef = this.modalService.open(EditRbsModalComponent); modalRef.componentInstance.member = member; + modalRef.closed.subscribe((updatedMember: Member) => { + if (updatedMember !== undefined) { + member = updatedMember; + } + }) } updatePassword(member: Member) { diff --git a/UI/Web/src/app/app.module.ts b/UI/Web/src/app/app.module.ts index cfb9f8084..b1d06d049 100644 --- a/UI/Web/src/app/app.module.ts +++ b/UI/Web/src/app/app.module.ts @@ -37,6 +37,8 @@ import { TypeaheadModule } from './typeahead/typeahead.module'; import { AllCollectionsComponent } from './all-collections/all-collections.component'; import { EditCollectionTagsComponent } from './_modals/edit-collection-tags/edit-collection-tags.component'; import { RecentlyAddedComponent } from './recently-added/recently-added.component'; +import { LibraryCardComponent } from './library-card/library-card.component'; +import { SeriesCardComponent } from './series-card/series-card.component'; let sentryProviders: any[] = []; @@ -100,6 +102,8 @@ if (environment.production) { AllCollectionsComponent, EditCollectionTagsComponent, RecentlyAddedComponent, + LibraryCardComponent, + SeriesCardComponent ], imports: [ HttpClientModule, diff --git a/UI/Web/src/app/shared/library-card/library-card.component.html b/UI/Web/src/app/library-card/library-card.component.html similarity index 100% rename from UI/Web/src/app/shared/library-card/library-card.component.html rename to UI/Web/src/app/library-card/library-card.component.html diff --git a/UI/Web/src/app/shared/library-card/library-card.component.scss b/UI/Web/src/app/library-card/library-card.component.scss similarity index 100% rename from UI/Web/src/app/shared/library-card/library-card.component.scss rename to UI/Web/src/app/library-card/library-card.component.scss diff --git a/UI/Web/src/app/shared/library-card/library-card.component.ts b/UI/Web/src/app/library-card/library-card.component.ts similarity index 100% rename from UI/Web/src/app/shared/library-card/library-card.component.ts rename to UI/Web/src/app/library-card/library-card.component.ts diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.html b/UI/Web/src/app/manga-reader/manga-reader.component.html index 1a0cb3f61..9b44da93b 100644 --- a/UI/Web/src/app/manga-reader/manga-reader.component.html +++ b/UI/Web/src/app/manga-reader/manga-reader.component.html @@ -27,7 +27,7 @@
    - +
    diff --git a/UI/Web/src/app/shared/register-member/register-member.component.html b/UI/Web/src/app/register-member/register-member.component.html similarity index 100% rename from UI/Web/src/app/shared/register-member/register-member.component.html rename to UI/Web/src/app/register-member/register-member.component.html diff --git a/UI/Web/src/app/shared/register-member/register-member.component.scss b/UI/Web/src/app/register-member/register-member.component.scss similarity index 100% rename from UI/Web/src/app/shared/register-member/register-member.component.scss rename to UI/Web/src/app/register-member/register-member.component.scss diff --git a/UI/Web/src/app/shared/register-member/register-member.component.ts b/UI/Web/src/app/register-member/register-member.component.ts similarity index 100% rename from UI/Web/src/app/shared/register-member/register-member.component.ts rename to UI/Web/src/app/register-member/register-member.component.ts diff --git a/UI/Web/src/app/shared/series-card/series-card.component.html b/UI/Web/src/app/series-card/series-card.component.html similarity index 100% rename from UI/Web/src/app/shared/series-card/series-card.component.html rename to UI/Web/src/app/series-card/series-card.component.html diff --git a/UI/Web/src/app/shared/series-card/series-card.component.scss b/UI/Web/src/app/series-card/series-card.component.scss similarity index 100% rename from UI/Web/src/app/shared/series-card/series-card.component.scss rename to UI/Web/src/app/series-card/series-card.component.scss diff --git a/UI/Web/src/app/shared/series-card/series-card.component.ts b/UI/Web/src/app/series-card/series-card.component.ts similarity index 92% rename from UI/Web/src/app/shared/series-card/series-card.component.ts rename to UI/Web/src/app/series-card/series-card.component.ts index 115a1bbc5..5eccd3149 100644 --- a/UI/Web/src/app/shared/series-card/series-card.component.ts +++ b/UI/Web/src/app/series-card/series-card.component.ts @@ -7,10 +7,9 @@ import { EditSeriesModalComponent } from 'src/app/_modals/edit-series-modal/edit import { Series } from 'src/app/_models/series'; import { AccountService } from 'src/app/_services/account.service'; import { ImageService } from 'src/app/_services/image.service'; -import { LibraryService } from 'src/app/_services/library.service'; import { ActionFactoryService, Action, ActionItem } from 'src/app/_services/action-factory.service'; import { SeriesService } from 'src/app/_services/series.service'; -import { ConfirmService } from '../confirm.service'; +import { ConfirmService } from '../shared/confirm.service'; @Component({ selector: 'app-series-card', @@ -30,9 +29,8 @@ export class SeriesCardComponent implements OnInit, OnChanges { constructor(private accountService: AccountService, private router: Router, private seriesService: SeriesService, private toastr: ToastrService, - private libraryService: LibraryService, private modalService: NgbModal, - private confirmService: ConfirmService, public imageService: ImageService, - private actionFactoryService: ActionFactoryService) { + private modalService: NgbModal, private confirmService: ConfirmService, + public imageService: ImageService, private actionFactoryService: ActionFactoryService) { this.accountService.currentUser$.pipe(take(1)).subscribe(user => { if (user) { this.isAdmin = this.accountService.hasAdminRole(user); diff --git a/UI/Web/src/app/shared/shared.module.ts b/UI/Web/src/app/shared/shared.module.ts index 2d257faba..0623a9f37 100644 --- a/UI/Web/src/app/shared/shared.module.ts +++ b/UI/Web/src/app/shared/shared.module.ts @@ -3,14 +3,12 @@ import { CommonModule } from '@angular/common'; import { ReactiveFormsModule } from '@angular/forms'; import { CardItemComponent } from './card-item/card-item.component'; import { NgbCollapseModule, NgbDropdownModule, NgbPaginationModule, NgbProgressbarModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; -import { LibraryCardComponent } from './library-card/library-card.component'; -import { SeriesCardComponent } from './series-card/series-card.component'; import { CardDetailsModalComponent } from './_modals/card-details-modal/card-details-modal.component'; import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component'; import { SafeHtmlPipe } from './safe-html.pipe'; import { LazyLoadImageModule } from 'ng-lazyload-image'; import { CardActionablesComponent } from './card-item/card-actionables/card-actionables.component'; -import { RegisterMemberComponent } from './register-member/register-member.component'; +import { RegisterMemberComponent } from '../register-member/register-member.component'; import { ReadMoreComponent } from './read-more/read-more.component'; import { RouterModule } from '@angular/router'; import { DrawerComponent } from './drawer/drawer.component'; @@ -24,8 +22,6 @@ import { A11yClickDirective } from './a11y-click.directive'; declarations: [ RegisterMemberComponent, CardItemComponent, - LibraryCardComponent, - SeriesCardComponent, CardDetailsModalComponent, ConfirmDialogComponent, SafeHtmlPipe, @@ -49,10 +45,8 @@ import { A11yClickDirective } from './a11y-click.directive'; NgbPaginationModule // CardDetailLayoutComponent ], exports: [ - RegisterMemberComponent, // TODO: Move this out and put in normal app + RegisterMemberComponent, CardItemComponent, - LibraryCardComponent, // TODO: Move this out and put in normal app - SeriesCardComponent, // TODO: Move this out and put in normal app SafeHtmlPipe, CardActionablesComponent, ReadMoreComponent, diff --git a/UI/Web/src/app/typeahead/typeahead.component.ts b/UI/Web/src/app/typeahead/typeahead.component.ts index c106cefe8..3ebf81280 100644 --- a/UI/Web/src/app/typeahead/typeahead.component.ts +++ b/UI/Web/src/app/typeahead/typeahead.component.ts @@ -27,13 +27,6 @@ export class SelectionModel { }); } - // __lookupItem(item: T) { - // if (this._propAccessor != '') { - // // TODO: Implement this code to speedup lookups (use a map rather than array) - // } - // const dataItem = this._data.filter(data => data.value == d); - // } - /** * Will toggle if the data item is selected or not. If data option is not tracked, will add it and set state to true. * @param data Item to toggle From b0df67cdda0bd04a91db850bc2ff187816b210df Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Thu, 22 Jul 2021 21:13:24 -0500 Subject: [PATCH 15/23] PDF Support + MORE!!!! (#416) # Added - Added support for PDFs within Kavita. PDFs will open in the Manga reader and you can read through them as images. PDFs are heavier than archives, so they may take longer to open for reading. (Fixes #187) # Changed - Changed: Major change in how Kavita libraries work. Kavita libraries will now allow for mixed media types, that means you can have raw images, archives, epubs, and pdfs all within your Manga library. In the case that the same Series exists between 2 different types of medias, they will be separated and an icon will show to help you identify the types. The correct reader will open regardless of what library you are on. Note: Nightly users need to delete their Raw Images libraries before updating. # Fixed - Fixed: Fixed an issue where checking if a file was modified since last scan always returned true, meaning we would do more I/O than was needed (Fixes #415) - Fixed: There wasn't enough spacing on the top menu bar on the Manga reader - Fixed: Fixed a bug where user preferences dark mode control always showed true, even if you were not using dark mode # Dev stuff - For image extraction, if there is only 1 image we will extract just that, else we will extract only images - Refactored all the Parser code out of the ScannerService into a self contained class. The class should be created for any scans, allowing multiple tasks to run without any chance of cross over. * Fixed indentation for cs files * Fixed an issue where the logic for if a file had been modified or not was not working and always saying modified, meaning we were doing more file I/O than needed. * Implemented the ability to have PDF books. No reader functionality. * Implemented a basic form of scanning for PDF files. Reworked Image based libraries to remove the need to separate in a special library and instead just work within the Manga/Comic library. * Removed the old library types. * Removed some extra code around old raw library types * Fully implemented PDF support into Kavita by using docnet. Removed old libraries we tried that did not work. PDFs take about 200ms to save the file to disk, so they are much slower than reading archives. * Refactored Libraries so that they can have any file extension and the UI will decide which reader to use. * Reworked the Series Parsing code. We now use a separate instance for each task call, so there should be no cross over if 2 tasks are running at the same time. Second, we now store Format with the Series, so we can have duplicate Series with the same name, but a different type of files underneath. * Fixed PDF transparency issues - Used this code to fix an issue when a PDF page doesn't have a background. https://github.com/GowenGit/docnet/issues/8#issuecomment-538985672 - This also fixes the same issue for cover images * Fixed an issue where if a raw image was in a directory with non-image files, those would get moved to cache when trying to open the file. * For image extraction, if there is only 1 image, just copy that to cache instead of everything else in the directory that is an image. * Add some spacing to the top menu bar * Added an icon to the card to showcase the type of file * Added a tag badge to the series detail page * Fixed a bug in user preferences where dark mode control would default to true, even if you weren't on it * Fixed some tests up * Some code smells Co-authored-by: Robbie Davis --- .editorconfig | 3 - API.Tests/Parser/ParserTest.cs | 32 +- API.Tests/Services/ScannerServiceTests.cs | 184 ++-- API/API.csproj | 2 + API/Controllers/.editorconfig | 0 API/Controllers/BookController.cs | 47 +- API/DTOs/SeriesDto.cs | 6 +- API/Data/DbFactory.cs | 2 +- ...210722223304_AddedSeriesFormat.Designer.cs | 872 ++++++++++++++++++ .../20210722223304_AddedSeriesFormat.cs | 44 + .../Migrations/DataContextModelSnapshot.cs | 5 +- API/Entities/Chapter.cs | 2 +- API/Entities/Enums/LibraryType.cs | 4 - API/Entities/Enums/MangaFormat.cs | 8 +- API/Entities/MangaFile.cs | 7 +- API/Entities/Series.cs | 14 +- API/Extensions/FileInfoExtensions.cs | 4 +- API/Extensions/ParserInfoListExtensions.cs | 16 +- API/Extensions/SeriesExtensions.cs | 14 + API/Extensions/VolumeListExtensions.cs | 5 +- API/Interfaces/Services/IBookService.cs | 6 + API/Interfaces/Services/IDirectoryService.cs | 2 +- API/Parser/Parser.cs | 27 +- API/Services/BookService.cs | 149 ++- API/Services/CacheService.cs | 10 +- API/Services/DirectoryService.cs | 12 +- API/Services/MetadataService.cs | 330 +++---- .../Tasks/Scanner/ParseScannedFiles.cs | 198 ++++ API/Services/Tasks/ScannerService.cs | 204 +--- API/Startup.cs | 1 - .../edit-series-modal.component.html | 1 + UI/Web/src/app/_models/library.ts | 2 - UI/Web/src/app/_models/manga-format.ts | 3 +- UI/Web/src/app/_models/series.ts | 2 + .../manage-library.component.ts | 4 - .../manga-reader/manga-reader.component.html | 2 +- .../series-detail.component.html | 15 +- .../series-detail/series-detail.component.ts | 12 +- .../app/shared/_services/utility.service.ts | 30 + .../shared/card-item/card-item.component.html | 3 +- .../shared/card-item/card-item.component.ts | 10 +- .../shared/tag-badge/tag-badge.component.scss | 4 +- .../user-preferences.component.ts | 4 +- 43 files changed, 1725 insertions(+), 577 deletions(-) delete mode 100644 API/Controllers/.editorconfig create mode 100644 API/Data/Migrations/20210722223304_AddedSeriesFormat.Designer.cs create mode 100644 API/Data/Migrations/20210722223304_AddedSeriesFormat.cs create mode 100644 API/Services/Tasks/Scanner/ParseScannedFiles.cs diff --git a/.editorconfig b/.editorconfig index 23e3b61fc..cd6d2ec06 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,9 +8,6 @@ indent_size = 4 insert_final_newline = true trim_trailing_whitespace = true -[*.cs] -indent_size = 3 - [*.ts] quote_type = single indent_size = 2 diff --git a/API.Tests/Parser/ParserTest.cs b/API.Tests/Parser/ParserTest.cs index 4a1a1babd..5857a50c9 100644 --- a/API.Tests/Parser/ParserTest.cs +++ b/API.Tests/Parser/ParserTest.cs @@ -5,7 +5,7 @@ namespace API.Tests.Parser { public class ParserTests { - + [Theory] [InlineData("Beastars - SP01", true)] [InlineData("Beastars SP01", true)] @@ -44,8 +44,8 @@ namespace API.Tests.Parser { Assert.Equal(expected, CleanTitle(input)); } - - + + // [Theory] // //[InlineData("@font-face{font-family:\"PaytoneOne\";src:url(\"..\\/Fonts\\/PaytoneOne.ttf\")}", "@font-face{font-family:\"PaytoneOne\";src:url(\"PaytoneOne.ttf\")}")] // [InlineData("@font-face{font-family:\"PaytoneOne\";src:url(\"..\\/Fonts\\/PaytoneOne.ttf\")}", "..\\/Fonts\\/PaytoneOne.ttf")] @@ -60,7 +60,7 @@ namespace API.Tests.Parser // Assert.Equal(!string.IsNullOrEmpty(expected), FontSrcUrlRegex.Match(input).Success); // } - + [Theory] [InlineData("test.cbz", true)] [InlineData("test.cbr", true)] @@ -72,10 +72,10 @@ namespace API.Tests.Parser { Assert.Equal(expected, IsArchive(input)); } - + [Theory] [InlineData("test.epub", true)] - [InlineData("test.pdf", false)] + [InlineData("test.pdf", true)] [InlineData("test.mobi", false)] [InlineData("test.djvu", false)] [InlineData("test.zip", false)] @@ -86,7 +86,7 @@ namespace API.Tests.Parser { Assert.Equal(expected, IsBook(input)); } - + [Theory] [InlineData("test.epub", true)] [InlineData("test.EPUB", true)] @@ -111,7 +111,7 @@ namespace API.Tests.Parser // { // Assert.Equal(expected, ParseEdition(input)); // } - + // [Theory] // [InlineData("Beelzebub Special OneShot - Minna no Kochikame x Beelzebub (2016) [Mangastream].cbz", true)] // [InlineData("Beelzebub_Omake_June_2012_RHS", true)] @@ -124,7 +124,7 @@ namespace API.Tests.Parser // { // Assert.Equal(expected, ParseMangaSpecial(input) != ""); // } - + [Theory] [InlineData("12-14", 12)] [InlineData("24", 24)] @@ -147,8 +147,8 @@ namespace API.Tests.Parser { Assert.Equal(expected, Normalize(input)); } - - + + [Theory] [InlineData("test.jpg", true)] @@ -160,7 +160,7 @@ namespace API.Tests.Parser { Assert.Equal(expected, IsImage(filename)); } - + [Theory] [InlineData("C:/", "C:/Love Hina/Love Hina - Special.cbz", "Love Hina")] [InlineData("C:/", "C:/Love Hina/Specials/Ani-Hina Art Collection.cbz", "Love Hina")] @@ -173,10 +173,10 @@ namespace API.Tests.Parser Assert.NotNull(actual); return; } - + Assert.Equal(expectedSeries, actual.Series); } - + [Theory] [InlineData("Love Hina - Special.jpg", false)] [InlineData("folder.jpg", true)] @@ -190,7 +190,7 @@ namespace API.Tests.Parser { Assert.Equal(expected, IsCoverImage(inputPath)); } - + [Theory] [InlineData("__MACOSX/Love Hina - Special.jpg", true)] [InlineData("TEST/Love Hina - Special.jpg", false)] @@ -201,4 +201,4 @@ namespace API.Tests.Parser Assert.Equal(expected, HasBlacklistedFolderInPath(inputPath)); } } -} \ No newline at end of file +} diff --git a/API.Tests/Services/ScannerServiceTests.cs b/API.Tests/Services/ScannerServiceTests.cs index e8034cdca..8eb9bc60f 100644 --- a/API.Tests/Services/ScannerServiceTests.cs +++ b/API.Tests/Services/ScannerServiceTests.cs @@ -7,11 +7,13 @@ using System.Linq; using System.Threading.Tasks; using API.Data; using API.Entities; +using API.Entities.Enums; using API.Interfaces; using API.Interfaces.Services; using API.Parser; using API.Services; using API.Services.Tasks; +using API.Services.Tasks.Scanner; using API.Tests.Helpers; using AutoMapper; using Microsoft.Data.Sqlite; @@ -47,15 +49,6 @@ namespace API.Tests.Services _context = new DataContext(contextOptions); Task.Run(SeedDb).GetAwaiter().GetResult(); - - //BackgroundJob.Enqueue is what I need to mock or something (it's static...) - // ICacheService cacheService, ILogger logger, IScannerService scannerService, - // IUnitOfWork unitOfWork, IMetadataService metadataService, IBackupService backupService, ICleanupService cleanupService, - // IBackgroundJobClient jobClient - //var taskScheduler = new TaskScheduler(Substitute.For(), Substitute.For>(), Substitute.For<) - - - // Substitute.For>() - Not needed because only for UserService IUnitOfWork unitOfWork = new UnitOfWork(_context, Substitute.For(), null); @@ -82,66 +75,64 @@ namespace API.Tests.Services return await _context.SaveChangesAsync() > 0; } - // [Fact] - // public void Test() - // { - // _scannerService.ScanLibrary(1, false); - // - // var series = _unitOfWork.LibraryRepository.GetLibraryForIdAsync(1).Result.Series; - // } - [Fact] public void FindSeriesNotOnDisk_Should_RemoveNothing_Test() { - var infos = new Dictionary>(); + var infos = new Dictionary>(); - AddToParsedInfo(infos, new ParserInfo() {Series = "Darker than Black"}); - AddToParsedInfo(infos, new ParserInfo() {Series = "Cage of Eden", Volumes = "1"}); - AddToParsedInfo(infos, new ParserInfo() {Series = "Cage of Eden", Volumes = "10"}); + AddToParsedInfo(infos, new ParserInfo() {Series = "Darker than Black", Format = MangaFormat.Archive}); + AddToParsedInfo(infos, new ParserInfo() {Series = "Cage of Eden", Volumes = "1", Format = MangaFormat.Archive}); + AddToParsedInfo(infos, new ParserInfo() {Series = "Cage of Eden", Volumes = "10", Format = MangaFormat.Archive}); - var existingSeries = new List(); - existingSeries.Add(new Series() + var existingSeries = new List { - Name = "Cage of Eden", - LocalizedName = "Cage of Eden", - OriginalName = "Cage of Eden", - NormalizedName = API.Parser.Parser.Normalize("Cage of Eden"), - Metadata = new SeriesMetadata() - }); - existingSeries.Add(new Series() - { - Name = "Darker Than Black", - LocalizedName = "Darker Than Black", - OriginalName = "Darker Than Black", - NormalizedName = API.Parser.Parser.Normalize("Darker Than Black"), - Metadata = new SeriesMetadata() - }); + new Series() + { + Name = "Cage of Eden", + LocalizedName = "Cage of Eden", + OriginalName = "Cage of Eden", + NormalizedName = API.Parser.Parser.Normalize("Cage of Eden"), + Metadata = new SeriesMetadata(), + Format = MangaFormat.Archive + }, + new Series() + { + Name = "Darker Than Black", + LocalizedName = "Darker Than Black", + OriginalName = "Darker Than Black", + NormalizedName = API.Parser.Parser.Normalize("Darker Than Black"), + Metadata = new SeriesMetadata(), + Format = MangaFormat.Archive + } + }; Assert.Empty(_scannerService.FindSeriesNotOnDisk(existingSeries, infos)); } - [Theory] - [InlineData(new [] {"Darker than Black"}, "Darker than Black", "Darker than Black")] - [InlineData(new [] {"Darker than Black"}, "Darker Than Black", "Darker than Black")] - [InlineData(new [] {"Darker than Black"}, "Darker Than Black!", "Darker than Black")] - [InlineData(new [] {""}, "Runaway Jack", "Runaway Jack")] - public void MergeNameTest(string[] existingSeriesNames, string parsedInfoName, string expected) - { - var collectedSeries = new ConcurrentDictionary>(); - foreach (var seriesName in existingSeriesNames) - { - AddToParsedInfo(collectedSeries, new ParserInfo() {Series = seriesName}); - } - - var actualName = _scannerService.MergeName(collectedSeries, new ParserInfo() - { - Series = parsedInfoName - }); - - Assert.Equal(expected, actualName); - } + // TODO: Figure out how to do this with ParseScannedFiles + // [Theory] + // [InlineData(new [] {"Darker than Black"}, "Darker than Black", "Darker than Black")] + // [InlineData(new [] {"Darker than Black"}, "Darker Than Black", "Darker than Black")] + // [InlineData(new [] {"Darker than Black"}, "Darker Than Black!", "Darker than Black")] + // [InlineData(new [] {""}, "Runaway Jack", "Runaway Jack")] + // public void MergeNameTest(string[] existingSeriesNames, string parsedInfoName, string expected) + // { + // var collectedSeries = new ConcurrentDictionary>(); + // foreach (var seriesName in existingSeriesNames) + // { + // AddToParsedInfo(collectedSeries, new ParserInfo() {Series = seriesName, Format = MangaFormat.Archive}); + // } + // + // var actualName = new ParseScannedFiles(_bookService, _logger).MergeName(collectedSeries, new ParserInfo() + // { + // Series = parsedInfoName, + // Format = MangaFormat.Archive + // }); + // + // Assert.Equal(expected, actualName); + // } [Fact] public void RemoveMissingSeries_Should_RemoveSeries() @@ -162,11 +153,19 @@ namespace API.Tests.Services Assert.Equal(missingSeries.Count, removeCount); } - private void AddToParsedInfo(IDictionary> collectedSeries, ParserInfo info) + private void AddToParsedInfo(IDictionary> collectedSeries, ParserInfo info) { + var existingKey = collectedSeries.Keys.FirstOrDefault(ps => + ps.Format == info.Format && ps.NormalizedName == API.Parser.Parser.Normalize(info.Series)); + existingKey ??= new ParsedSeries() + { + Format = info.Format, + Name = info.Series, + NormalizedName = API.Parser.Parser.Normalize(info.Series) + }; if (collectedSeries.GetType() == typeof(ConcurrentDictionary<,>)) { - ((ConcurrentDictionary>) collectedSeries).AddOrUpdate(info.Series, new List() {info}, (_, oldValue) => + ((ConcurrentDictionary>) collectedSeries).AddOrUpdate(existingKey, new List() {info}, (_, oldValue) => { oldValue ??= new List(); if (!oldValue.Contains(info)) @@ -179,84 +178,25 @@ namespace API.Tests.Services } else { - if (!collectedSeries.ContainsKey(info.Series)) + if (!collectedSeries.ContainsKey(existingKey)) { - collectedSeries.Add(info.Series, new List() {info}); + collectedSeries.Add(existingKey, new List() {info}); } else { - var list = collectedSeries[info.Series]; + var list = collectedSeries[existingKey]; if (!list.Contains(info)) { list.Add(info); } - collectedSeries[info.Series] = list; + collectedSeries[existingKey] = list; } } } - - - // [Fact] - // public void ExistingOrDefault_Should_BeFromLibrary() - // { - // var allSeries = new List() - // { - // new Series() {Id = 2, Name = "Darker Than Black"}, - // new Series() {Id = 3, Name = "Darker Than Black - Some Extension"}, - // new Series() {Id = 4, Name = "Akame Ga Kill"}, - // }; - // Assert.Equal(_libraryMock.Series.ElementAt(0).Id, ScannerService.ExistingOrDefault(_libraryMock, allSeries, "Darker Than Black").Id); - // Assert.Equal(_libraryMock.Series.ElementAt(0).Id, ScannerService.ExistingOrDefault(_libraryMock, allSeries, "Darker than Black").Id); - // } - // - // [Fact] - // public void ExistingOrDefault_Should_BeFromAllSeries() - // { - // var allSeries = new List() - // { - // new Series() {Id = 2, Name = "Darker Than Black"}, - // new Series() {Id = 3, Name = "Darker Than Black - Some Extension"}, - // new Series() {Id = 4, Name = "Akame Ga Kill"}, - // }; - // Assert.Equal(3, ScannerService.ExistingOrDefault(_libraryMock, allSeries, "Darker Than Black - Some Extension").Id); - // } - // - // [Fact] - // public void ExistingOrDefault_Should_BeNull() - // { - // var allSeries = new List() - // { - // new Series() {Id = 2, Name = "Darker Than Black"}, - // new Series() {Id = 3, Name = "Darker Than Black - Some Extension"}, - // new Series() {Id = 4, Name = "Akame Ga Kill"}, - // }; - // Assert.Null(ScannerService.ExistingOrDefault(_libraryMock, allSeries, "Non existing series")); - // } - - [Fact] - public void Should_CreateSeries_Test() - { - // var allSeries = new List(); - // var parsedSeries = new Dictionary>(); - // - // parsedSeries.Add("Darker Than Black", new List() - // { - // new ParserInfo() {Chapters = "0", Filename = "Something.cbz", Format = MangaFormat.Archive, FullFilePath = "E:/Manga/Something.cbz", Series = "Darker Than Black", Volumes = "1"}, - // new ParserInfo() {Chapters = "0", Filename = "Something.cbz", Format = MangaFormat.Archive, FullFilePath = "E:/Manga/Something.cbz", Series = "Darker than Black", Volumes = "2"} - // }); - // - // _scannerService.UpsertSeries(_libraryMock, parsedSeries, allSeries); - // - // Assert.Equal(1, _libraryMock.Series.Count); - // Assert.Equal(2, _libraryMock.Series.ElementAt(0).Volumes.Count); - // _testOutputHelper.WriteLine(_libraryMock.ToString()); - Assert.True(true); - } - private static DbConnection CreateInMemoryDatabase() { var connection = new SqliteConnection("Filename=:memory:"); diff --git a/API/API.csproj b/API/API.csproj index c912a6b01..ab727275b 100644 --- a/API/API.csproj +++ b/API/API.csproj @@ -31,6 +31,7 @@ + @@ -57,6 +58,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/API/Controllers/.editorconfig b/API/Controllers/.editorconfig deleted file mode 100644 index e69de29bb..000000000 diff --git a/API/Controllers/BookController.cs b/API/Controllers/BookController.cs index 84f9338d7..0efa6c71e 100644 --- a/API/Controllers/BookController.cs +++ b/API/Controllers/BookController.cs @@ -45,7 +45,7 @@ namespace API.Controllers var key = BookService.CleanContentKeys(file); if (!book.Content.AllFiles.ContainsKey(key)) return BadRequest("File was not found in book"); - + var bookFile = book.Content.AllFiles[key]; var content = await bookFile.ReadContentAsBytesAsync(); @@ -62,7 +62,7 @@ namespace API.Controllers var chapter = await _unitOfWork.VolumeRepository.GetChapterAsync(chapterId); using var book = await EpubReader.OpenBookAsync(chapter.Files.ElementAt(0).FilePath); var mappings = await _bookService.CreateKeyToPageMappingAsync(book); - + var navItems = await book.GetNavigationAsync(); var chaptersList = new List(); @@ -70,9 +70,8 @@ namespace API.Controllers { if (navigationItem.NestedItems.Count > 0) { - _logger.LogDebug("Header: {Header}", navigationItem.Title); - var nestedChapters = new List(); - + var nestedChapters = new List(); + foreach (var nestedChapter in navigationItem.NestedItems) { if (nestedChapter.Link == null) continue; @@ -93,7 +92,7 @@ namespace API.Controllers { var item = new BookChapterItem() { - Title = navigationItem.Title, + Title = navigationItem.Title, Children = nestedChapters }; if (nestedChapters.Count > 0) @@ -110,7 +109,7 @@ namespace API.Controllers chaptersList.Add(new BookChapterItem() { Title = navigationItem.Title, - Page = mappings[groupKey], + Page = mappings[groupKey], Children = nestedChapters }); } @@ -123,14 +122,14 @@ namespace API.Controllers // Generate from TOC var tocPage = book.Content.Html.Keys.FirstOrDefault(k => k.ToUpper().Contains("TOC")); if (tocPage == null) return Ok(chaptersList); - + // Find all anchor tags, for each anchor we get inner text, to lower then titlecase on UI. Get href and generate page content var doc = new HtmlDocument(); var content = await book.Content.Html[tocPage].ReadContentAsync(); doc.LoadHtml(content); var anchors = doc.DocumentNode.SelectNodes("//a"); if (anchors == null) return Ok(chaptersList); - + foreach (var anchor in anchors) { if (anchor.Attributes.Contains("href")) @@ -162,11 +161,11 @@ namespace API.Controllers } } } - + } return Ok(chaptersList); } - + [HttpGet("{chapterId}/book-page")] public async Task> GetBookPage(int chapterId, [FromQuery] int page) { @@ -186,10 +185,10 @@ namespace API.Controllers { var content = await contentFileRef.ReadContentAsync(); if (contentFileRef.ContentType != EpubContentType.XHTML_1_1) return Ok(content); - + // In more cases than not, due to this being XML not HTML, we need to escape the script tags. content = BookService.EscapeTags(content); - + doc.LoadHtml(content); var body = doc.DocumentNode.SelectSingleNode("//body"); @@ -219,7 +218,7 @@ namespace API.Controllers body.PrependChild(HtmlNode.CreateNode($"")); } } - + var styleNodes = doc.DocumentNode.SelectNodes("/html/head/link"); if (styleNodes != null) { @@ -239,7 +238,7 @@ namespace API.Controllers key = correctedKey; } - + var styleContent = await _bookService.ScopeStyles(await book.Content.Css[key].ReadContentAsync(), apiBase, book.Content.Css[key].FileName, book); body.PrependChild(HtmlNode.CreateNode($"")); } @@ -253,14 +252,14 @@ namespace API.Controllers BookService.UpdateLinks(anchor, mappings, page); } } - + var images = doc.DocumentNode.SelectNodes("//img"); if (images != null) { foreach (var image in images) { if (image.Name != "img") continue; - + // Need to do for xlink:href if (image.Attributes["src"] != null) { @@ -278,14 +277,14 @@ namespace API.Controllers } } } - + images = doc.DocumentNode.SelectNodes("//image"); if (images != null) { foreach (var image in images) { if (image.Name != "image") continue; - + if (image.Attributes["xlink:href"] != null) { var imageFile = image.Attributes["xlink:href"].Value; @@ -302,7 +301,7 @@ namespace API.Controllers } } } - + // Check if any classes on the html node (some r2l books do this) and move them to body tag for scoping var htmlNode = doc.DocumentNode.SelectSingleNode("//html"); if (htmlNode != null && htmlNode.Attributes.Contains("class")) @@ -313,9 +312,9 @@ namespace API.Controllers // I actually need the body tag itself for the classes, so i will create a div and put the body stuff there. return Ok($"
    {body.InnerHtml}
    "); } - - - return Ok(body.InnerHtml); + + + return Ok(body.InnerHtml); } counter++; @@ -324,4 +323,4 @@ namespace API.Controllers return BadRequest("Could not find the appropriate html for that page"); } } -} \ No newline at end of file +} diff --git a/API/DTOs/SeriesDto.cs b/API/DTOs/SeriesDto.cs index 0f8f4263c..933bf0408 100644 --- a/API/DTOs/SeriesDto.cs +++ b/API/DTOs/SeriesDto.cs @@ -1,4 +1,5 @@ using System; +using API.Entities.Enums; namespace API.DTOs { @@ -23,10 +24,11 @@ namespace API.DTOs /// Review from logged in user. Calculated at API-time. ///
    public string UserReview { get; set; } - + public MangaFormat Format { get; set; } + public DateTime Created { get; set; } public int LibraryId { get; set; } public string LibraryName { get; set; } } -} \ No newline at end of file +} diff --git a/API/Data/DbFactory.cs b/API/Data/DbFactory.cs index 804cd75bb..877aa7581 100644 --- a/API/Data/DbFactory.cs +++ b/API/Data/DbFactory.cs @@ -45,7 +45,7 @@ namespace API.Data { Number = specialTreatment ? "0" : Parser.Parser.MinimumNumberFromRange(info.Chapters) + string.Empty, Range = specialTreatment ? info.Filename : info.Chapters, - Title = (specialTreatment && info.Format == MangaFormat.Book) + Title = (specialTreatment && info.Format == MangaFormat.Epub) ? info.Title : specialTitle, Files = new List(), diff --git a/API/Data/Migrations/20210722223304_AddedSeriesFormat.Designer.cs b/API/Data/Migrations/20210722223304_AddedSeriesFormat.Designer.cs new file mode 100644 index 000000000..dff2d3868 --- /dev/null +++ b/API/Data/Migrations/20210722223304_AddedSeriesFormat.Designer.cs @@ -0,0 +1,872 @@ +// +using System; +using API.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace API.Data.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20210722223304_AddedSeriesFormat")] + partial class AddedSeriesFormat + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "5.0.4"); + + modelBuilder.Entity("API.Entities.AppRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("API.Entities.AppUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AccessFailedCount") + .HasColumnType("INTEGER"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("TEXT"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("EmailConfirmed") + .HasColumnType("INTEGER"); + + b.Property("LastActive") + .HasColumnType("TEXT"); + + b.Property("LockoutEnabled") + .HasColumnType("INTEGER"); + + b.Property("LockoutEnd") + .HasColumnType("TEXT"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("PasswordHash") + .HasColumnType("TEXT"); + + b.Property("PhoneNumber") + .HasColumnType("TEXT"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("INTEGER"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .HasColumnType("INTEGER"); + + b.Property("SecurityStamp") + .HasColumnType("TEXT"); + + b.Property("TwoFactorEnabled") + .HasColumnType("INTEGER"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("API.Entities.AppUserPreferences", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AppUserId") + .HasColumnType("INTEGER"); + + b.Property("AutoCloseMenu") + .HasColumnType("INTEGER"); + + b.Property("BookReaderDarkMode") + .HasColumnType("INTEGER"); + + b.Property("BookReaderFontFamily") + .HasColumnType("TEXT"); + + b.Property("BookReaderFontSize") + .HasColumnType("INTEGER"); + + b.Property("BookReaderLineSpacing") + .HasColumnType("INTEGER"); + + b.Property("BookReaderMargin") + .HasColumnType("INTEGER"); + + b.Property("BookReaderReadingDirection") + .HasColumnType("INTEGER"); + + b.Property("BookReaderTapToPaginate") + .HasColumnType("INTEGER"); + + b.Property("PageSplitOption") + .HasColumnType("INTEGER"); + + b.Property("ReaderMode") + .HasColumnType("INTEGER"); + + b.Property("ReadingDirection") + .HasColumnType("INTEGER"); + + b.Property("ScalingOption") + .HasColumnType("INTEGER"); + + b.Property("SiteDarkMode") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("AppUserId") + .IsUnique(); + + b.ToTable("AppUserPreferences"); + }); + + modelBuilder.Entity("API.Entities.AppUserProgress", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AppUserId") + .HasColumnType("INTEGER"); + + b.Property("BookScrollId") + .HasColumnType("TEXT"); + + b.Property("ChapterId") + .HasColumnType("INTEGER"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("LastModified") + .HasColumnType("TEXT"); + + b.Property("PagesRead") + .HasColumnType("INTEGER"); + + b.Property("SeriesId") + .HasColumnType("INTEGER"); + + b.Property("VolumeId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("AppUserId"); + + b.ToTable("AppUserProgresses"); + }); + + modelBuilder.Entity("API.Entities.AppUserRating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AppUserId") + .HasColumnType("INTEGER"); + + b.Property("Rating") + .HasColumnType("INTEGER"); + + b.Property("Review") + .HasColumnType("TEXT"); + + b.Property("SeriesId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("AppUserId"); + + b.ToTable("AppUserRating"); + }); + + modelBuilder.Entity("API.Entities.AppUserRole", b => + { + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("API.Entities.Chapter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CoverImage") + .HasColumnType("BLOB"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("IsSpecial") + .HasColumnType("INTEGER"); + + b.Property("LastModified") + .HasColumnType("TEXT"); + + b.Property("Number") + .HasColumnType("TEXT"); + + b.Property("Pages") + .HasColumnType("INTEGER"); + + b.Property("Range") + .HasColumnType("TEXT"); + + b.Property("Title") + .HasColumnType("TEXT"); + + b.Property("VolumeId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("VolumeId"); + + b.ToTable("Chapter"); + }); + + modelBuilder.Entity("API.Entities.CollectionTag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CoverImage") + .HasColumnType("BLOB"); + + b.Property("NormalizedTitle") + .HasColumnType("TEXT"); + + b.Property("Promoted") + .HasColumnType("INTEGER"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .HasColumnType("INTEGER"); + + b.Property("Summary") + .HasColumnType("TEXT"); + + b.Property("Title") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Id", "Promoted") + .IsUnique(); + + b.ToTable("CollectionTag"); + }); + + modelBuilder.Entity("API.Entities.FolderPath", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("LastScanned") + .HasColumnType("TEXT"); + + b.Property("LibraryId") + .HasColumnType("INTEGER"); + + b.Property("Path") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LibraryId"); + + b.ToTable("FolderPath"); + }); + + modelBuilder.Entity("API.Entities.Library", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CoverImage") + .HasColumnType("TEXT"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("LastModified") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Library"); + }); + + modelBuilder.Entity("API.Entities.MangaFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChapterId") + .HasColumnType("INTEGER"); + + b.Property("FilePath") + .HasColumnType("TEXT"); + + b.Property("Format") + .HasColumnType("INTEGER"); + + b.Property("LastModified") + .HasColumnType("TEXT"); + + b.Property("Pages") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ChapterId"); + + b.ToTable("MangaFile"); + }); + + modelBuilder.Entity("API.Entities.Series", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CoverImage") + .HasColumnType("BLOB"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("Format") + .HasColumnType("INTEGER"); + + b.Property("LastModified") + .HasColumnType("TEXT"); + + b.Property("LibraryId") + .HasColumnType("INTEGER"); + + b.Property("LocalizedName") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .HasColumnType("TEXT"); + + b.Property("OriginalName") + .HasColumnType("TEXT"); + + b.Property("Pages") + .HasColumnType("INTEGER"); + + b.Property("SortName") + .HasColumnType("TEXT"); + + b.Property("Summary") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("LibraryId"); + + b.HasIndex("Name", "NormalizedName", "LocalizedName", "LibraryId", "Format") + .IsUnique(); + + b.ToTable("Series"); + }); + + modelBuilder.Entity("API.Entities.SeriesMetadata", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .HasColumnType("INTEGER"); + + b.Property("SeriesId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("SeriesId") + .IsUnique(); + + b.HasIndex("Id", "SeriesId") + .IsUnique(); + + b.ToTable("SeriesMetadata"); + }); + + modelBuilder.Entity("API.Entities.ServerSetting", b => + { + b.Property("Key") + .HasColumnType("INTEGER"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .HasColumnType("INTEGER"); + + b.Property("Value") + .HasColumnType("TEXT"); + + b.HasKey("Key"); + + b.ToTable("ServerSetting"); + }); + + modelBuilder.Entity("API.Entities.Volume", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CoverImage") + .HasColumnType("BLOB"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("LastModified") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Number") + .HasColumnType("INTEGER"); + + b.Property("Pages") + .HasColumnType("INTEGER"); + + b.Property("SeriesId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("SeriesId"); + + b.ToTable("Volume"); + }); + + modelBuilder.Entity("AppUserLibrary", b => + { + b.Property("AppUsersId") + .HasColumnType("INTEGER"); + + b.Property("LibrariesId") + .HasColumnType("INTEGER"); + + b.HasKey("AppUsersId", "LibrariesId"); + + b.HasIndex("LibrariesId"); + + b.ToTable("AppUserLibrary"); + }); + + modelBuilder.Entity("CollectionTagSeriesMetadata", b => + { + b.Property("CollectionTagsId") + .HasColumnType("INTEGER"); + + b.Property("SeriesMetadatasId") + .HasColumnType("INTEGER"); + + b.HasKey("CollectionTagsId", "SeriesMetadatasId"); + + b.HasIndex("SeriesMetadatasId"); + + b.ToTable("CollectionTagSeriesMetadata"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ClaimType") + .HasColumnType("TEXT"); + + b.Property("ClaimValue") + .HasColumnType("TEXT"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ClaimType") + .HasColumnType("TEXT"); + + b.Property("ClaimValue") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("TEXT"); + + b.Property("ProviderKey") + .HasColumnType("TEXT"); + + b.Property("ProviderDisplayName") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("LoginProvider") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Value") + .HasColumnType("TEXT"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("API.Entities.AppUserPreferences", b => + { + b.HasOne("API.Entities.AppUser", "AppUser") + .WithOne("UserPreferences") + .HasForeignKey("API.Entities.AppUserPreferences", "AppUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AppUser"); + }); + + modelBuilder.Entity("API.Entities.AppUserProgress", b => + { + b.HasOne("API.Entities.AppUser", "AppUser") + .WithMany("Progresses") + .HasForeignKey("AppUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AppUser"); + }); + + modelBuilder.Entity("API.Entities.AppUserRating", b => + { + b.HasOne("API.Entities.AppUser", "AppUser") + .WithMany("Ratings") + .HasForeignKey("AppUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AppUser"); + }); + + modelBuilder.Entity("API.Entities.AppUserRole", b => + { + b.HasOne("API.Entities.AppRole", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("API.Entities.AppUser", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("API.Entities.Chapter", b => + { + b.HasOne("API.Entities.Volume", "Volume") + .WithMany("Chapters") + .HasForeignKey("VolumeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Volume"); + }); + + modelBuilder.Entity("API.Entities.FolderPath", b => + { + b.HasOne("API.Entities.Library", "Library") + .WithMany("Folders") + .HasForeignKey("LibraryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Library"); + }); + + modelBuilder.Entity("API.Entities.MangaFile", b => + { + b.HasOne("API.Entities.Chapter", "Chapter") + .WithMany("Files") + .HasForeignKey("ChapterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Chapter"); + }); + + modelBuilder.Entity("API.Entities.Series", b => + { + b.HasOne("API.Entities.Library", "Library") + .WithMany("Series") + .HasForeignKey("LibraryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Library"); + }); + + modelBuilder.Entity("API.Entities.SeriesMetadata", b => + { + b.HasOne("API.Entities.Series", "Series") + .WithOne("Metadata") + .HasForeignKey("API.Entities.SeriesMetadata", "SeriesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Series"); + }); + + modelBuilder.Entity("API.Entities.Volume", b => + { + b.HasOne("API.Entities.Series", "Series") + .WithMany("Volumes") + .HasForeignKey("SeriesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Series"); + }); + + modelBuilder.Entity("AppUserLibrary", b => + { + b.HasOne("API.Entities.AppUser", null) + .WithMany() + .HasForeignKey("AppUsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("API.Entities.Library", null) + .WithMany() + .HasForeignKey("LibrariesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("CollectionTagSeriesMetadata", b => + { + b.HasOne("API.Entities.CollectionTag", null) + .WithMany() + .HasForeignKey("CollectionTagsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("API.Entities.SeriesMetadata", null) + .WithMany() + .HasForeignKey("SeriesMetadatasId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("API.Entities.AppRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("API.Entities.AppUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("API.Entities.AppUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("API.Entities.AppUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("API.Entities.AppRole", b => + { + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("API.Entities.AppUser", b => + { + b.Navigation("Progresses"); + + b.Navigation("Ratings"); + + b.Navigation("UserPreferences"); + + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("API.Entities.Chapter", b => + { + b.Navigation("Files"); + }); + + modelBuilder.Entity("API.Entities.Library", b => + { + b.Navigation("Folders"); + + b.Navigation("Series"); + }); + + modelBuilder.Entity("API.Entities.Series", b => + { + b.Navigation("Metadata"); + + b.Navigation("Volumes"); + }); + + modelBuilder.Entity("API.Entities.Volume", b => + { + b.Navigation("Chapters"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/API/Data/Migrations/20210722223304_AddedSeriesFormat.cs b/API/Data/Migrations/20210722223304_AddedSeriesFormat.cs new file mode 100644 index 000000000..f236b6ec2 --- /dev/null +++ b/API/Data/Migrations/20210722223304_AddedSeriesFormat.cs @@ -0,0 +1,44 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace API.Data.Migrations +{ + public partial class AddedSeriesFormat : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_Series_Name_NormalizedName_LocalizedName_LibraryId", + table: "Series"); + + migrationBuilder.AddColumn( + name: "Format", + table: "Series", + type: "INTEGER", + nullable: false, + defaultValue: 2); + + migrationBuilder.CreateIndex( + name: "IX_Series_Name_NormalizedName_LocalizedName_LibraryId_Format", + table: "Series", + columns: new[] { "Name", "NormalizedName", "LocalizedName", "LibraryId", "Format" }, + unique: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_Series_Name_NormalizedName_LocalizedName_LibraryId_Format", + table: "Series"); + + migrationBuilder.DropColumn( + name: "Format", + table: "Series"); + + migrationBuilder.CreateIndex( + name: "IX_Series_Name_NormalizedName_LocalizedName_LibraryId", + table: "Series", + columns: new[] { "Name", "NormalizedName", "LocalizedName", "LibraryId" }, + unique: true); + } + } +} diff --git a/API/Data/Migrations/DataContextModelSnapshot.cs b/API/Data/Migrations/DataContextModelSnapshot.cs index c6d49fc2a..ebf940768 100644 --- a/API/Data/Migrations/DataContextModelSnapshot.cs +++ b/API/Data/Migrations/DataContextModelSnapshot.cs @@ -412,6 +412,9 @@ namespace API.Data.Migrations b.Property("Created") .HasColumnType("TEXT"); + b.Property("Format") + .HasColumnType("INTEGER"); + b.Property("LastModified") .HasColumnType("TEXT"); @@ -443,7 +446,7 @@ namespace API.Data.Migrations b.HasIndex("LibraryId"); - b.HasIndex("Name", "NormalizedName", "LocalizedName", "LibraryId") + b.HasIndex("Name", "NormalizedName", "LocalizedName", "LibraryId", "Format") .IsUnique(); b.ToTable("Series"); diff --git a/API/Entities/Chapter.cs b/API/Entities/Chapter.cs index 31f4dc513..39ce68477 100644 --- a/API/Entities/Chapter.cs +++ b/API/Entities/Chapter.cs @@ -49,7 +49,7 @@ namespace API.Entities { Number = "0"; } - Title = (IsSpecial && info.Format == MangaFormat.Book) + Title = (IsSpecial && info.Format == MangaFormat.Epub) ? info.Title : Range; diff --git a/API/Entities/Enums/LibraryType.cs b/API/Entities/Enums/LibraryType.cs index baaceb9ca..23bb8df25 100644 --- a/API/Entities/Enums/LibraryType.cs +++ b/API/Entities/Enums/LibraryType.cs @@ -10,9 +10,5 @@ namespace API.Entities.Enums Comic = 1, [Description("Book")] Book = 2, - [Description("Images (Manga)")] - MangaImages = 3, - [Description("Images (Comic)")] - ComicImages = 4 } } diff --git a/API/Entities/Enums/MangaFormat.cs b/API/Entities/Enums/MangaFormat.cs index 121aa3e1c..3688449fd 100644 --- a/API/Entities/Enums/MangaFormat.cs +++ b/API/Entities/Enums/MangaFormat.cs @@ -10,7 +10,9 @@ namespace API.Entities.Enums Archive = 1, [Description("Unknown")] Unknown = 2, - [Description("Book")] - Book = 3 + [Description("EPUB")] + Epub = 3, + [Description("PDF")] + Pdf = 4 } -} \ No newline at end of file +} diff --git a/API/Entities/MangaFile.cs b/API/Entities/MangaFile.cs index 2efb76bfb..85aa4d5b1 100644 --- a/API/Entities/MangaFile.cs +++ b/API/Entities/MangaFile.cs @@ -2,7 +2,6 @@ using System; using System.IO; using API.Entities.Enums; -using API.Extensions; namespace API.Entities { @@ -26,11 +25,11 @@ namespace API.Entities // Relationship Mapping public Chapter Chapter { get; set; } public int ChapterId { get; set; } - + // Methods public bool HasFileBeenModified() { - return new FileInfo(FilePath).DoesLastWriteMatch(LastModified); + return !File.GetLastWriteTime(FilePath).Equals(LastModified); } } -} \ No newline at end of file +} diff --git a/API/Entities/Series.cs b/API/Entities/Series.cs index 4d8a48be4..cbb1bba6e 100644 --- a/API/Entities/Series.cs +++ b/API/Entities/Series.cs @@ -1,11 +1,12 @@ using System; using System.Collections.Generic; +using API.Entities.Enums; using API.Entities.Interfaces; using Microsoft.EntityFrameworkCore; namespace API.Entities { - [Index(nameof(Name), nameof(NormalizedName), nameof(LocalizedName), nameof(LibraryId), IsUnique = true)] + [Index(nameof(Name), nameof(NormalizedName), nameof(LocalizedName), nameof(LibraryId), nameof(Format), IsUnique = true)] public class Series : IEntityDate { public int Id { get; set; } @@ -22,7 +23,7 @@ namespace API.Entities ///
    public string SortName { get; set; } /// - /// Name in Japanese. By default, will be same as Name. + /// Name in Japanese. By default, will be same as Name. /// public string LocalizedName { get; set; } /// @@ -40,7 +41,12 @@ namespace API.Entities /// Sum of all Volume page counts /// public int Pages { get; set; } - + + /// + /// The type of all the files attached to this series + /// + public MangaFormat Format { get; set; } = MangaFormat.Unknown; + public SeriesMetadata Metadata { get; set; } // Relationships @@ -49,4 +55,4 @@ namespace API.Entities public int LibraryId { get; set; } } -} \ No newline at end of file +} diff --git a/API/Extensions/FileInfoExtensions.cs b/API/Extensions/FileInfoExtensions.cs index 82f6e663f..6730b6f05 100644 --- a/API/Extensions/FileInfoExtensions.cs +++ b/API/Extensions/FileInfoExtensions.cs @@ -9,10 +9,10 @@ namespace API.Extensions { return comparison.Equals(fileInfo.LastWriteTime); } - + public static bool IsLastWriteLessThan(this FileInfo fileInfo, DateTime comparison) { return fileInfo.LastWriteTime < comparison; } } -} \ No newline at end of file +} diff --git a/API/Extensions/ParserInfoListExtensions.cs b/API/Extensions/ParserInfoListExtensions.cs index 2043583bb..0ea098b20 100644 --- a/API/Extensions/ParserInfoListExtensions.cs +++ b/API/Extensions/ParserInfoListExtensions.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using API.Entities; +using API.Entities.Enums; using API.Parser; namespace API.Extensions @@ -26,8 +27,19 @@ namespace API.Extensions /// public static bool HasInfo(this IList infos, Chapter chapter) { - return chapter.IsSpecial ? infos.Any(v => v.Filename == chapter.Range) + return chapter.IsSpecial ? infos.Any(v => v.Filename == chapter.Range) : infos.Any(v => v.Chapters == chapter.Range); } + + /// + /// Returns the MangaFormat that is common to all the files. Unknown if files are mixed (should never happen) or no infos + /// + /// + /// + public static MangaFormat GetFormat(this IList infos) + { + if (infos.Count == 0) return MangaFormat.Unknown; + return infos.DistinctBy(x => x.Format).First().Format; + } } -} \ No newline at end of file +} diff --git a/API/Extensions/SeriesExtensions.cs b/API/Extensions/SeriesExtensions.cs index 376abc525..cedeb3905 100644 --- a/API/Extensions/SeriesExtensions.cs +++ b/API/Extensions/SeriesExtensions.cs @@ -2,6 +2,8 @@ using System.Linq; using API.Entities; using API.Parser; +using API.Services; +using API.Services.Tasks.Scanner; namespace API.Extensions { @@ -19,6 +21,18 @@ namespace API.Extensions || name == series.Name || name == series.LocalizedName || name == series.OriginalName || Parser.Parser.Normalize(name) == Parser.Parser.Normalize(series.OriginalName)); } + /// + /// Checks against all the name variables of the Series if it matches anything in the list. Includes a check against the Format of the Series + /// + /// + /// + /// + public static bool NameInList(this Series series, IEnumerable list) + { + return list.Any(name => Parser.Parser.Normalize(name.Name) == series.NormalizedName || Parser.Parser.Normalize(name.Name) == Parser.Parser.Normalize(series.Name) + || name.Name == series.Name || name.Name == series.LocalizedName || name.Name == series.OriginalName || Parser.Parser.Normalize(name.Name) == Parser.Parser.Normalize(series.OriginalName) && series.Format == name.Format); + } + /// /// Checks against all the name variables of the Series if it matches the /// diff --git a/API/Extensions/VolumeListExtensions.cs b/API/Extensions/VolumeListExtensions.cs index 5b50d382f..3647cc21c 100644 --- a/API/Extensions/VolumeListExtensions.cs +++ b/API/Extensions/VolumeListExtensions.cs @@ -23,6 +23,7 @@ namespace API.Extensions /// public static Volume GetCoverImage(this IList volumes, LibraryType libraryType) { + // TODO: Refactor this to use MangaFormat Epub instead if (libraryType == LibraryType.Book) { return volumes.OrderBy(x => x.Number).FirstOrDefault(); @@ -30,9 +31,9 @@ namespace API.Extensions if (volumes.Any(x => x.Number != 0)) { - return volumes.OrderBy(x => x.Number).FirstOrDefault(x => x.Number != 0); + return volumes.OrderBy(x => x.Number).FirstOrDefault(x => x.Number != 0); } return volumes.OrderBy(x => x.Number).FirstOrDefault(); } } -} \ No newline at end of file +} diff --git a/API/Interfaces/Services/IBookService.cs b/API/Interfaces/Services/IBookService.cs index 63d0aa712..b3afc13a8 100644 --- a/API/Interfaces/Services/IBookService.cs +++ b/API/Interfaces/Services/IBookService.cs @@ -22,5 +22,11 @@ namespace API.Interfaces.Services Task ScopeStyles(string stylesheetHtml, string apiBase, string filename, EpubBookRef book); string GetSummaryInfo(string filePath); ParserInfo ParseInfo(string filePath); + /// + /// Extracts a PDF file's pages as images to an target directory + /// + /// + /// Where the files will be extracted to. If doesn't exist, will be created. + void ExtractPdfImages(string fileFilePath, string targetDirectory); } } diff --git a/API/Interfaces/Services/IDirectoryService.cs b/API/Interfaces/Services/IDirectoryService.cs index 638d8eb71..4e6979bd5 100644 --- a/API/Interfaces/Services/IDirectoryService.cs +++ b/API/Interfaces/Services/IDirectoryService.cs @@ -27,6 +27,6 @@ namespace API.Interfaces.Services SearchOption searchOption = SearchOption.TopDirectoryOnly); void CopyFileToDirectory(string fullFilePath, string targetDirectory); - public bool CopyDirectoryToDirectory(string sourceDirName, string destDirName); + public bool CopyDirectoryToDirectory(string sourceDirName, string destDirName, string searchPattern = "*"); } } diff --git a/API/Parser/Parser.cs b/API/Parser/Parser.cs index 2bc120700..9c6fccbe9 100644 --- a/API/Parser/Parser.cs +++ b/API/Parser/Parser.cs @@ -12,9 +12,14 @@ namespace API.Parser public const string DefaultChapter = "0"; public const string DefaultVolume = "0"; - public const string ArchiveFileExtensions = @"\.cbz|\.zip|\.rar|\.cbr|\.tar.gz|\.7zip|\.7z|\.cb7|\.cbt"; - public const string BookFileExtensions = @"\.epub"; public const string ImageFileExtensions = @"^(\.png|\.jpeg|\.jpg)"; + public const string ArchiveFileExtensions = @"\.cbz|\.zip|\.rar|\.cbr|\.tar.gz|\.7zip|\.7z|\.cb7|\.cbt"; + public const string BookFileExtensions = @"\.epub|\.pdf"; + public const string MangaComicFileExtensions = ArchiveFileExtensions + "|" + ImageFileExtensions + @"|\.pdf"; + + public const string SupportedExtensions = + ArchiveFileExtensions + "|" + ImageFileExtensions + "|" + BookFileExtensions; + public static readonly Regex FontSrcUrlRegex = new Regex(@"(src:url\(.{1})" + "([^\"']*)" + @"(.{1}\))", RegexOptions.IgnoreCase | RegexOptions.Compiled); public static readonly Regex CssImportUrlRegex = new Regex("(@import\\s[\"|'])(?[\\w\\d/\\._-]+)([\"|'];?)", RegexOptions.IgnoreCase | RegexOptions.Compiled); @@ -422,7 +427,7 @@ namespace API.Parser var fileName = Path.GetFileName(filePath); ParserInfo ret; - if (type == LibraryType.Book) + if (IsEpub(filePath)) { ret = new ParserInfo() { @@ -448,7 +453,7 @@ namespace API.Parser }; } - if (type is LibraryType.ComicImages or LibraryType.MangaImages) + if (IsImage(filePath)) { // Reset Chapters, Volumes, and Series as images are not good to parse information out of. Better to use folders. ret.Volumes = DefaultVolume; @@ -456,7 +461,7 @@ namespace API.Parser ret.Series = string.Empty; } - if (ret.Series == string.Empty || (type is LibraryType.ComicImages or LibraryType.MangaImages)) + if (ret.Series == string.Empty || IsImage(filePath)) { // Try to parse information out of each folder all the way to rootPath ParseFromFallbackFolders(filePath, rootPath, type, ref ret); @@ -511,8 +516,8 @@ namespace API.Parser var folder = fallbackFolders[i]; if (!string.IsNullOrEmpty(ParseMangaSpecial(folder))) continue; - var parsedVolume = (type is LibraryType.Manga or LibraryType.MangaImages) ? ParseVolume(folder) : ParseComicVolume(folder); - var parsedChapter = (type is LibraryType.Manga or LibraryType.MangaImages) ? ParseChapter(folder) : ParseComicChapter(folder); + var parsedVolume = type is LibraryType.Manga ? ParseVolume(folder) : ParseComicVolume(folder); + var parsedChapter = type is LibraryType.Manga ? ParseChapter(folder) : ParseComicChapter(folder); if (!parsedVolume.Equals(DefaultVolume) || !parsedChapter.Equals(DefaultChapter)) { @@ -548,7 +553,8 @@ namespace API.Parser { if (IsArchive(filePath)) return MangaFormat.Archive; if (IsImage(filePath)) return MangaFormat.Image; - if (IsBook(filePath)) return MangaFormat.Book; + if (IsEpub(filePath)) return MangaFormat.Epub; + if (IsPdf(filePath)) return MangaFormat.Pdf; return MangaFormat.Unknown; } @@ -936,5 +942,10 @@ namespace API.Parser { return Path.GetExtension(filePath).ToLower() == ".epub"; } + + public static bool IsPdf(string filePath) + { + return Path.GetExtension(filePath).ToLower() == ".pdf"; + } } } diff --git a/API/Services/BookService.cs b/API/Services/BookService.cs index 36c59a789..513ff8db8 100644 --- a/API/Services/BookService.cs +++ b/API/Services/BookService.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -9,11 +12,14 @@ using System.Web; using API.Entities.Enums; using API.Interfaces.Services; using API.Parser; +using Docnet.Core; +using Docnet.Core.Models; using ExCSS; using HtmlAgilityPack; using Microsoft.Extensions.Logging; -using NetVips; using VersOne.Epub; +using Image = NetVips.Image; +using Point = System.Drawing.Point; namespace API.Services { @@ -25,6 +31,7 @@ namespace API.Services public BookService(ILogger logger) { _logger = logger; + } private static bool HasClickableHrefPart(HtmlNode anchor) @@ -157,7 +164,8 @@ namespace API.Services public string GetSummaryInfo(string filePath) { - if (!IsValidFile(filePath)) return string.Empty; + if (!IsValidFile(filePath) || Parser.Parser.IsPdf(filePath)) return string.Empty; + try { @@ -182,18 +190,24 @@ namespace API.Services if (Parser.Parser.IsBook(filePath)) return true; - _logger.LogWarning("[BookService] Book {EpubFile} is not a valid EPUB", filePath); + _logger.LogWarning("[BookService] Book {EpubFile} is not a valid EPUB/PDF", filePath); return false; } public int GetNumberOfPages(string filePath) { - if (!IsValidFile(filePath) || !Parser.Parser.IsEpub(filePath)) return 0; + if (!IsValidFile(filePath)) return 0; try { - using var epubBook = EpubReader.OpenBook(filePath); - return epubBook.Content.Html.Count; + if (Parser.Parser.IsPdf(filePath)) + { + using var docReader = DocLib.Instance.GetDocReader(filePath, new PageDimensions(1080, 1920)); + return docReader.GetPageCount(); + } + + using var epubBook = EpubReader.OpenBook(filePath); + return epubBook.Content.Html.Count; } catch (Exception ex) { @@ -231,14 +245,16 @@ namespace API.Services /// /// Parses out Title from book. Chapters and Volumes will always be "0". If there is any exception reading book (malformed books) - /// then null is returned. + /// then null is returned. This expects only an epub file /// /// /// public ParserInfo ParseInfo(string filePath) { - try - { + if (!Parser.Parser.IsEpub(filePath)) return null; + + try + { using var epubBook = EpubReader.OpenBook(filePath); // If the epub has the following tags, we can group the books as Volumes @@ -301,9 +317,9 @@ namespace API.Services } return new ParserInfo() { - Chapters = "0", - Edition = "", - Format = MangaFormat.Book, + Chapters = Parser.Parser.DefaultChapter, + Edition = string.Empty, + Format = MangaFormat.Epub, Filename = Path.GetFileName(filePath), Title = specialName, FullFilePath = filePath, @@ -320,23 +336,63 @@ namespace API.Services return new ParserInfo() { - Chapters = "0", - Edition = "", - Format = MangaFormat.Book, + Chapters = Parser.Parser.DefaultChapter, + Edition = string.Empty, + Format = MangaFormat.Epub, Filename = Path.GetFileName(filePath), Title = epubBook.Title, FullFilePath = filePath, IsSpecial = false, Series = epubBook.Title, - Volumes = "0" + Volumes = Parser.Parser.DefaultVolume }; - } - catch (Exception ex) - { - _logger.LogWarning(ex, "[BookService] There was an exception when opening epub book: {FileName}", filePath); - } + } + catch (Exception ex) + { + _logger.LogWarning(ex, "[BookService] There was an exception when opening epub book: {FileName}", filePath); + } - return null; + return null; + } + + private static void AddBytesToBitmap(Bitmap bmp, byte[] rawBytes) + { + var rect = new Rectangle(0, 0, bmp.Width, bmp.Height); + + var bmpData = bmp.LockBits(rect, ImageLockMode.WriteOnly, bmp.PixelFormat); + var pNative = bmpData.Scan0; + + Marshal.Copy(rawBytes, 0, pNative, rawBytes.Length); + bmp.UnlockBits(bmpData); + } + + public void ExtractPdfImages(string fileFilePath, string targetDirectory) + { + DirectoryService.ExistOrCreate(targetDirectory); + + using var docReader = DocLib.Instance.GetDocReader(fileFilePath, new PageDimensions(1080, 1920)); + var pages = docReader.GetPageCount(); + for (var pageNumber = 0; pageNumber < pages; pageNumber++) + { + using var pageReader = docReader.GetPageReader(pageNumber); + var rawBytes = pageReader.GetImage(); + var width = pageReader.GetPageWidth(); + var height = pageReader.GetPageHeight(); + using var doc = new Bitmap(width, height, PixelFormat.Format32bppArgb); + using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); + AddBytesToBitmap(bmp, rawBytes); + for (int y = 0; y < bmp.Height; y++) + { + bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y)); + } + var g = Graphics.FromImage(doc); + g.FillRegion(Brushes.White, new Region(new Rectangle(0, 0, width, height))); + g.DrawImage(bmp, new Point(0, 0)); + g.Save(); + using var stream = new MemoryStream(); + doc.Save(stream, ImageFormat.Jpeg); + File.WriteAllBytes(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"), stream.ToArray()); + } } @@ -344,6 +400,11 @@ namespace API.Services { if (!IsValidFile(fileFilePath)) return Array.Empty(); + if (Parser.Parser.IsPdf(fileFilePath)) + { + return GetPdfCoverImage(fileFilePath, createThumbnail); + } + using var epubBook = EpubReader.OpenBook(fileFilePath); @@ -374,6 +435,50 @@ namespace API.Services return Array.Empty(); } + private byte[] GetPdfCoverImage(string fileFilePath, bool createThumbnail) + { + try + { + using var docReader = DocLib.Instance.GetDocReader(fileFilePath, new PageDimensions(1080, 1920)); + if (docReader.GetPageCount() == 0) return Array.Empty(); + + using var pageReader = docReader.GetPageReader(0); + var rawBytes = pageReader.GetImage(); + var width = pageReader.GetPageWidth(); + var height = pageReader.GetPageHeight(); + using var doc = new Bitmap(width, height, PixelFormat.Format32bppArgb); + using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); + AddBytesToBitmap(bmp, rawBytes); + for (int y = 0; y < bmp.Height; y++) + { + bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y)); + } + var g = Graphics.FromImage(doc); + g.FillRegion(Brushes.White, new Region(new Rectangle(0, 0, width, height))); + g.DrawImage(bmp, new Point(0, 0)); + g.Save(); + using var stream = new MemoryStream(); + doc.Save(stream, ImageFormat.Jpeg); + stream.Seek(0, SeekOrigin.Begin); + + if (createThumbnail) + { + using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); + return thumbnail.WriteToBuffer(".png"); + } + + return stream.ToArray(); + } + catch (Exception ex) + { + _logger.LogWarning(ex, + "[BookService] There was a critical error and prevented thumbnail generation on {BookFile}. Defaulting to no cover image", + fileFilePath); + } + + return Array.Empty(); + } + private static string RemoveWhiteSpaceFromStylesheets(string body) { body = Regex.Replace(body, @"[a-zA-Z]+#", "#"); diff --git a/API/Services/CacheService.cs b/API/Services/CacheService.cs index bc3533481..39c9e963b 100644 --- a/API/Services/CacheService.cs +++ b/API/Services/CacheService.cs @@ -18,16 +18,18 @@ namespace API.Services private readonly IUnitOfWork _unitOfWork; private readonly IArchiveService _archiveService; private readonly IDirectoryService _directoryService; + private readonly IBookService _bookService; private readonly NumericComparer _numericComparer; public static readonly string CacheDirectory = Path.GetFullPath(Path.Join(Directory.GetCurrentDirectory(), "cache/")); public CacheService(ILogger logger, IUnitOfWork unitOfWork, IArchiveService archiveService, - IDirectoryService directoryService) + IDirectoryService directoryService, IBookService bookService) { _logger = logger; _unitOfWork = unitOfWork; _archiveService = archiveService; _directoryService = directoryService; + _bookService = bookService; _numericComparer = new NumericComparer(); } @@ -58,7 +60,8 @@ namespace API.Services if (files.Count > 0 && files[0].Format == MangaFormat.Image) { DirectoryService.ExistOrCreate(extractPath); - _directoryService.CopyDirectoryToDirectory(Path.GetDirectoryName(files[0].FilePath), extractPath); + var pattern = (files.Count == 1) ? (@"\" + Path.GetExtension(files[0].FilePath)) : Parser.Parser.ImageFileExtensions; + _directoryService.CopyDirectoryToDirectory(Path.GetDirectoryName(files[0].FilePath), extractPath, pattern); extractDi.Flatten(); return chapter; } @@ -73,6 +76,9 @@ namespace API.Services if (file.Format == MangaFormat.Archive) { _archiveService.ExtractArchive(file.FilePath, Path.Join(extractPath, extraPath)); + } else if (file.Format == MangaFormat.Pdf) + { + _bookService.ExtractPdfImages(file.FilePath, Path.Join(extractPath, extraPath)); } } diff --git a/API/Services/DirectoryService.cs b/API/Services/DirectoryService.cs index cc7f2b6ca..8345b32d1 100644 --- a/API/Services/DirectoryService.cs +++ b/API/Services/DirectoryService.cs @@ -113,7 +113,15 @@ namespace API.Services } } - public bool CopyDirectoryToDirectory(string sourceDirName, string destDirName) + /// + /// Copies a Directory with all files and subdirectories to a target location + /// + /// + /// + /// Defaults to *, meaning all files + /// + /// + public bool CopyDirectoryToDirectory(string sourceDirName, string destDirName, string searchPattern = "*") { if (string.IsNullOrEmpty(sourceDirName)) return false; @@ -136,7 +144,7 @@ namespace API.Services Directory.CreateDirectory(destDirName); // Get the files in the directory and copy them to the new location. - var files = dir.GetFiles(); + var files = GetFilesWithExtension(dir.FullName, searchPattern).Select(n => new FileInfo(n)); foreach (var file in files) { var tempPath = Path.Combine(destDirName, file.Name); diff --git a/API/Services/MetadataService.cs b/API/Services/MetadataService.cs index 7d9b143b5..3be35cd86 100644 --- a/API/Services/MetadataService.cs +++ b/API/Services/MetadataService.cs @@ -16,190 +16,194 @@ namespace API.Services { public class MetadataService : IMetadataService { - private readonly IUnitOfWork _unitOfWork; - private readonly ILogger _logger; - private readonly IArchiveService _archiveService; - private readonly IBookService _bookService; - private readonly IDirectoryService _directoryService; - private readonly IImageService _imageService; - private readonly ChapterSortComparer _chapterSortComparer = new ChapterSortComparer(); - public static readonly int ThumbnailWidth = 320; // 153w x 230h + private readonly IUnitOfWork _unitOfWork; + private readonly ILogger _logger; + private readonly IArchiveService _archiveService; + private readonly IBookService _bookService; + private readonly IDirectoryService _directoryService; + private readonly IImageService _imageService; + private readonly ChapterSortComparer _chapterSortComparer = new ChapterSortComparer(); + public static readonly int ThumbnailWidth = 320; // 153w x 230h - public MetadataService(IUnitOfWork unitOfWork, ILogger logger, - IArchiveService archiveService, IBookService bookService, IDirectoryService directoryService, IImageService imageService) - { - _unitOfWork = unitOfWork; - _logger = logger; - _archiveService = archiveService; - _bookService = bookService; - _directoryService = directoryService; - _imageService = imageService; - } + public MetadataService(IUnitOfWork unitOfWork, ILogger logger, + IArchiveService archiveService, IBookService bookService, IDirectoryService directoryService, IImageService imageService) + { + _unitOfWork = unitOfWork; + _logger = logger; + _archiveService = archiveService; + _bookService = bookService; + _directoryService = directoryService; + _imageService = imageService; + } - private static bool ShouldFindCoverImage(byte[] coverImage, bool forceUpdate = false) - { - return forceUpdate || coverImage == null || !coverImage.Any(); - } + private static bool ShouldFindCoverImage(byte[] coverImage, bool forceUpdate = false) + { + return forceUpdate || coverImage == null || !coverImage.Any(); + } - private byte[] GetCoverImage(MangaFile file, bool createThumbnail = true) - { - switch (file.Format) - { - case MangaFormat.Book: - return _bookService.GetCoverImage(file.FilePath, createThumbnail); - case MangaFormat.Image: - var coverImage = _imageService.GetCoverFile(file); - return _imageService.GetCoverImage(coverImage, createThumbnail); - default: - return _archiveService.GetCoverImage(file.FilePath, createThumbnail); - } - } + private byte[] GetCoverImage(MangaFile file, bool createThumbnail = true) + { + switch (file.Format) + { + case MangaFormat.Pdf: + case MangaFormat.Epub: + return _bookService.GetCoverImage(file.FilePath, createThumbnail); + case MangaFormat.Image: + var coverImage = _imageService.GetCoverFile(file); + return _imageService.GetCoverImage(coverImage, createThumbnail); + case MangaFormat.Archive: + return _archiveService.GetCoverImage(file.FilePath, createThumbnail); + default: + return Array.Empty(); + } + } - public void UpdateMetadata(Chapter chapter, bool forceUpdate) - { - var firstFile = chapter.Files.OrderBy(x => x.Chapter).FirstOrDefault(); - if (ShouldFindCoverImage(chapter.CoverImage, forceUpdate) && firstFile != null && !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified)) - { - chapter.Files ??= new List(); - chapter.CoverImage = GetCoverImage(firstFile); - } - } + public void UpdateMetadata(Chapter chapter, bool forceUpdate) + { + var firstFile = chapter.Files.OrderBy(x => x.Chapter).FirstOrDefault(); + if (ShouldFindCoverImage(chapter.CoverImage, forceUpdate) && firstFile != null && !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified)) + { + chapter.Files ??= new List(); + chapter.CoverImage = GetCoverImage(firstFile); + } + } - public void UpdateMetadata(Volume volume, bool forceUpdate) - { - if (volume != null && ShouldFindCoverImage(volume.CoverImage, forceUpdate)) - { - volume.Chapters ??= new List(); - var firstChapter = volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).FirstOrDefault(); + public void UpdateMetadata(Volume volume, bool forceUpdate) + { + if (volume != null && ShouldFindCoverImage(volume.CoverImage, forceUpdate)) + { + volume.Chapters ??= new List(); + var firstChapter = volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).FirstOrDefault(); - // Skip calculating Cover Image (I/O) if the chapter already has it set - if (firstChapter == null || ShouldFindCoverImage(firstChapter.CoverImage)) - { - var firstFile = firstChapter?.Files.OrderBy(x => x.Chapter).FirstOrDefault(); - if (firstFile != null && !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified)) + // Skip calculating Cover Image (I/O) if the chapter already has it set + if (firstChapter == null || ShouldFindCoverImage(firstChapter.CoverImage)) { - volume.CoverImage = GetCoverImage(firstFile); + var firstFile = firstChapter?.Files.OrderBy(x => x.Chapter).FirstOrDefault(); + if (firstFile != null && !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified)) + { + volume.CoverImage = GetCoverImage(firstFile); + } } - } - else - { - volume.CoverImage = firstChapter.CoverImage; - } - } - } - - public void UpdateMetadata(Series series, bool forceUpdate) - { - if (series == null) return; - if (ShouldFindCoverImage(series.CoverImage, forceUpdate)) - { - series.Volumes ??= new List(); - var firstCover = series.Volumes.GetCoverImage(series.Library.Type); - byte[] coverImage = null; - if (firstCover == null && series.Volumes.Any()) - { - // If firstCover is null and one volume, the whole series is Chapters under Vol 0. - if (series.Volumes.Count == 1) + else { - coverImage = series.Volumes[0].Chapters.OrderBy(c => double.Parse(c.Number), _chapterSortComparer) - .FirstOrDefault(c => !c.IsSpecial)?.CoverImage; + volume.CoverImage = firstChapter.CoverImage; + } + } + } + + public void UpdateMetadata(Series series, bool forceUpdate) + { + if (series == null) return; + if (ShouldFindCoverImage(series.CoverImage, forceUpdate)) + { + series.Volumes ??= new List(); + var firstCover = series.Volumes.GetCoverImage(series.Library.Type); + byte[] coverImage = null; + if (firstCover == null && series.Volumes.Any()) + { + // If firstCover is null and one volume, the whole series is Chapters under Vol 0. + if (series.Volumes.Count == 1) + { + coverImage = series.Volumes[0].Chapters.OrderBy(c => double.Parse(c.Number), _chapterSortComparer) + .FirstOrDefault(c => !c.IsSpecial)?.CoverImage; + } + + if (coverImage == null) + { + coverImage = series.Volumes[0].Chapters.OrderBy(c => double.Parse(c.Number), _chapterSortComparer) + .FirstOrDefault()?.CoverImage; + } + } + series.CoverImage = firstCover?.CoverImage ?? coverImage; + } + + UpdateSeriesSummary(series, forceUpdate); + } + + private void UpdateSeriesSummary(Series series, bool forceUpdate) + { + if (!string.IsNullOrEmpty(series.Summary) && !forceUpdate) return; + + var isBook = series.Library.Type == LibraryType.Book; + var firstVolume = series.Volumes.FirstWithChapters(isBook); + var firstChapter = firstVolume?.Chapters.GetFirstChapterWithFiles(); + + var firstFile = firstChapter?.Files.FirstOrDefault(); + if (firstFile == null || (!forceUpdate && !firstFile.HasFileBeenModified())) return; + if (Parser.Parser.IsPdf(firstFile.FilePath)) return; + + var summary = Parser.Parser.IsEpub(firstFile.FilePath) ? _bookService.GetSummaryInfo(firstFile.FilePath) : _archiveService.GetSummaryInfo(firstFile.FilePath); + if (string.IsNullOrEmpty(series.Summary)) + { + series.Summary = summary; + } + + firstFile.LastModified = DateTime.Now; + } + + + public void RefreshMetadata(int libraryId, bool forceUpdate = false) + { + var sw = Stopwatch.StartNew(); + var library = Task.Run(() => _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId)).GetAwaiter().GetResult(); + + // TODO: See if we can break this up into multiple threads that process 20 series at a time then save so we can reduce amount of memory used + _logger.LogInformation("Beginning metadata refresh of {LibraryName}", library.Name); + foreach (var series in library.Series) + { + foreach (var volume in series.Volumes) + { + foreach (var chapter in volume.Chapters) + { + UpdateMetadata(chapter, forceUpdate); + } + + UpdateMetadata(volume, forceUpdate); } - if (coverImage == null) - { - coverImage = series.Volumes[0].Chapters.OrderBy(c => double.Parse(c.Number), _chapterSortComparer) - .FirstOrDefault()?.CoverImage; - } - } - series.CoverImage = firstCover?.CoverImage ?? coverImage; - } - - UpdateSeriesSummary(series, forceUpdate); - } - - private void UpdateSeriesSummary(Series series, bool forceUpdate) - { - if (!string.IsNullOrEmpty(series.Summary) && !forceUpdate) return; - - var isBook = series.Library.Type == LibraryType.Book; - var firstVolume = series.Volumes.FirstWithChapters(isBook); - var firstChapter = firstVolume?.Chapters.GetFirstChapterWithFiles(); - - // NOTE: This suffers from code changes not taking effect due to stale data - var firstFile = firstChapter?.Files.FirstOrDefault(); - if (firstFile == null || (!forceUpdate && !firstFile.HasFileBeenModified())) return; - var summary = isBook ? _bookService.GetSummaryInfo(firstFile.FilePath) : _archiveService.GetSummaryInfo(firstFile.FilePath); - if (string.IsNullOrEmpty(series.Summary)) - { - series.Summary = summary; - } - - firstFile.LastModified = DateTime.Now; - } + UpdateMetadata(series, forceUpdate); + _unitOfWork.SeriesRepository.Update(series); + } - public void RefreshMetadata(int libraryId, bool forceUpdate = false) - { - var sw = Stopwatch.StartNew(); - var library = Task.Run(() => _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId)).GetAwaiter().GetResult(); + if (_unitOfWork.HasChanges() && Task.Run(() => _unitOfWork.CommitAsync()).Result) + { + _logger.LogInformation("Updated metadata for {LibraryName} in {ElapsedMilliseconds} milliseconds", library.Name, sw.ElapsedMilliseconds); + } + } - // TODO: See if we can break this up into multiple threads that process 20 series at a time then save so we can reduce amount of memory used - _logger.LogInformation("Beginning metadata refresh of {LibraryName}", library.Name); - foreach (var series in library.Series) - { - foreach (var volume in series.Volumes) - { + + public void RefreshMetadataForSeries(int libraryId, int seriesId) + { + var sw = Stopwatch.StartNew(); + var library = Task.Run(() => _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId)).GetAwaiter().GetResult(); + + var series = library.Series.SingleOrDefault(s => s.Id == seriesId); + if (series == null) + { + _logger.LogError("Series {SeriesId} was not found on Library {LibraryName}", seriesId, libraryId); + return; + } + _logger.LogInformation("Beginning metadata refresh of {SeriesName}", series.Name); + foreach (var volume in series.Volumes) + { foreach (var chapter in volume.Chapters) { - UpdateMetadata(chapter, forceUpdate); + UpdateMetadata(chapter, true); } - UpdateMetadata(volume, forceUpdate); - } + UpdateMetadata(volume, true); + } - UpdateMetadata(series, forceUpdate); - _unitOfWork.SeriesRepository.Update(series); - } + UpdateMetadata(series, true); + _unitOfWork.SeriesRepository.Update(series); - if (_unitOfWork.HasChanges() && Task.Run(() => _unitOfWork.CommitAsync()).Result) - { - _logger.LogInformation("Updated metadata for {LibraryName} in {ElapsedMilliseconds} milliseconds", library.Name, sw.ElapsedMilliseconds); - } - } - - - public void RefreshMetadataForSeries(int libraryId, int seriesId) - { - var sw = Stopwatch.StartNew(); - var library = Task.Run(() => _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId)).GetAwaiter().GetResult(); - - var series = library.Series.SingleOrDefault(s => s.Id == seriesId); - if (series == null) - { - _logger.LogError("Series {SeriesId} was not found on Library {LibraryName}", seriesId, libraryId); - return; - } - _logger.LogInformation("Beginning metadata refresh of {SeriesName}", series.Name); - foreach (var volume in series.Volumes) - { - foreach (var chapter in volume.Chapters) - { - UpdateMetadata(chapter, true); - } - - UpdateMetadata(volume, true); - } - - UpdateMetadata(series, true); - _unitOfWork.SeriesRepository.Update(series); - - - if (_unitOfWork.HasChanges() && Task.Run(() => _unitOfWork.CommitAsync()).Result) - { - _logger.LogInformation("Updated metadata for {SeriesName} in {ElapsedMilliseconds} milliseconds", series.Name, sw.ElapsedMilliseconds); - } - } + if (_unitOfWork.HasChanges() && Task.Run(() => _unitOfWork.CommitAsync()).Result) + { + _logger.LogInformation("Updated metadata for {SeriesName} in {ElapsedMilliseconds} milliseconds", series.Name, sw.ElapsedMilliseconds); + } + } } } diff --git a/API/Services/Tasks/Scanner/ParseScannedFiles.cs b/API/Services/Tasks/Scanner/ParseScannedFiles.cs new file mode 100644 index 000000000..c646d1c60 --- /dev/null +++ b/API/Services/Tasks/Scanner/ParseScannedFiles.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using API.Entities.Enums; +using API.Interfaces.Services; +using API.Parser; +using Microsoft.Extensions.Logging; + +namespace API.Services.Tasks.Scanner +{ + public class ParsedSeries + { + public string Name { get; init; } + public string NormalizedName { get; init; } + public MangaFormat Format { get; init; } + } + + + public class ParseScannedFiles + { + private readonly ConcurrentDictionary> _scannedSeries; + private readonly IBookService _bookService; + private readonly ILogger _logger; + + /// + /// An instance of a pipeline for processing files and returning a Map of Series -> ParserInfos. + /// Each instance is separate from other threads, allowing for no cross over. + /// + /// + /// + public ParseScannedFiles(IBookService bookService, ILogger logger) + { + _bookService = bookService; + _logger = logger; + _scannedSeries = new ConcurrentDictionary>(); + } + + /// + /// Processes files found during a library scan. + /// Populates a collection of for DB updates later. + /// + /// Path of a file + /// + /// Library type to determine parsing to perform + private void ProcessFile(string path, string rootPath, LibraryType type) + { + ParserInfo info; + + if (Parser.Parser.IsEpub(path)) + { + info = _bookService.ParseInfo(path); + } + else + { + info = Parser.Parser.Parse(path, rootPath, type); + } + + if (info == null) + { + _logger.LogWarning("[Scanner] Could not parse series from {Path}", path); + return; + } + + if (Parser.Parser.IsEpub(path) && Parser.Parser.ParseVolume(info.Series) != Parser.Parser.DefaultVolume) + { + info = Parser.Parser.Parse(path, rootPath, type); + var info2 = _bookService.ParseInfo(path); + info.Merge(info2); + } + + TrackSeries(info); + } + + /// + /// Attempts to either add a new instance of a show mapping to the _scannedSeries bag or adds to an existing. + /// This will check if the name matches an existing series name (multiple fields) + /// + /// + private void TrackSeries(ParserInfo info) + { + if (info.Series == string.Empty) return; + + // Check if normalized info.Series already exists and if so, update info to use that name instead + info.Series = MergeName(info); + + var existingKey = _scannedSeries.Keys.FirstOrDefault(ps => + ps.Format == info.Format && ps.NormalizedName == Parser.Parser.Normalize(info.Series)); + existingKey ??= new ParsedSeries() + { + Format = info.Format, + Name = info.Series, + NormalizedName = Parser.Parser.Normalize(info.Series) + }; + + + + _scannedSeries.AddOrUpdate(existingKey, new List() {info}, (_, oldValue) => + { + oldValue ??= new List(); + if (!oldValue.Contains(info)) + { + oldValue.Add(info); + } + + return oldValue; + }); + } + + /// + /// Using a normalized name from the passed ParserInfo, this checks against all found series so far and if an existing one exists with + /// same normalized name, it merges into the existing one. This is important as some manga may have a slight difference with punctuation or capitalization. + /// + /// + /// + public string MergeName(ParserInfo info) + { + var normalizedSeries = Parser.Parser.Normalize(info.Series); + _logger.LogDebug("Checking if we can merge {NormalizedSeries}", normalizedSeries); + var existingName = + _scannedSeries.SingleOrDefault(p => Parser.Parser.Normalize(p.Key.NormalizedName) == normalizedSeries && p.Key.Format == info.Format) + .Key; + if (existingName != null && !string.IsNullOrEmpty(existingName.Name)) + { + _logger.LogDebug("Found duplicate parsed infos, merged {Original} into {Merged}", info.Series, existingName.Name); + return existingName.Name; + } + + return info.Series; + } + + /// + /// + /// + /// Type of library. Used for selecting the correct file extensions to search for and parsing files + /// The folders to scan. By default, this should be library.Folders, however it can be overwritten to restrict folders + /// Total files scanned + /// Time it took to scan and parse files + /// + public Dictionary> ScanLibrariesForSeries(LibraryType libraryType, IEnumerable folders, out int totalFiles, + out long scanElapsedTime) + { + var sw = Stopwatch.StartNew(); + totalFiles = 0; + var searchPattern = GetLibrarySearchPattern(libraryType); + foreach (var folderPath in folders) + { + try + { + totalFiles += DirectoryService.TraverseTreeParallelForEach(folderPath, (f) => + { + try + { + ProcessFile(f, folderPath, libraryType); + } + catch (FileNotFoundException exception) + { + _logger.LogError(exception, "The file {Filename} could not be found", f); + } + }, searchPattern, _logger); + } + catch (ArgumentException ex) + { + _logger.LogError(ex, "The directory '{FolderPath}' does not exist", folderPath); + } + } + + scanElapsedTime = sw.ElapsedMilliseconds; + _logger.LogInformation("Scanned {TotalFiles} files in {ElapsedScanTime} milliseconds", totalFiles, + scanElapsedTime); + + return SeriesWithInfos(); + } + + /// + /// Given the Library Type, returns the regex pattern that restricts which files types will be found during a file scan. + /// + /// + /// + private static string GetLibrarySearchPattern(LibraryType libraryType) + { + return Parser.Parser.SupportedExtensions; + } + + /// + /// Returns any series where there were parsed infos + /// + /// + private Dictionary> SeriesWithInfos() + { + var filtered = _scannedSeries.Where(kvp => kvp.Value.Count > 0); + var series = filtered.ToDictionary(v => v.Key, v => v.Value); + return series; + } + } +} diff --git a/API/Services/Tasks/ScannerService.cs b/API/Services/Tasks/ScannerService.cs index 7febcd9d3..763d3e712 100644 --- a/API/Services/Tasks/ScannerService.cs +++ b/API/Services/Tasks/ScannerService.cs @@ -14,6 +14,7 @@ using API.Extensions; using API.Interfaces; using API.Interfaces.Services; using API.Parser; +using API.Services.Tasks.Scanner; using Hangfire; using Microsoft.Extensions.Logging; @@ -26,7 +27,6 @@ namespace API.Services.Tasks private readonly IArchiveService _archiveService; private readonly IMetadataService _metadataService; private readonly IBookService _bookService; - private ConcurrentDictionary> _scannedSeries; private readonly NaturalSortComparer _naturalSort; public ScannerService(IUnitOfWork unitOfWork, ILogger logger, IArchiveService archiveService, @@ -50,9 +50,8 @@ namespace API.Services.Tasks var dirs = FindHighestDirectoriesFromFiles(library, files); _logger.LogInformation("Beginning file scan on {SeriesName}", series.Name); - // TODO: We can't have a global variable if multiple scans are taking place. Refactor this. - _scannedSeries = new ConcurrentDictionary>(); - var parsedSeries = ScanLibrariesForSeries(library.Type, dirs.Keys, out var totalFiles, out var scanElapsedTime); + var scanner = new ParseScannedFiles(_bookService, _logger); + var parsedSeries = scanner.ScanLibrariesForSeries(library.Type, dirs.Keys, out var totalFiles, out var scanElapsedTime); // If a root level folder scan occurs, then multiple series gets passed in and thus we get a unique constraint issue // Hence we clear out anything but what we selected for @@ -137,7 +136,6 @@ namespace API.Services.Tasks [AutomaticRetry(Attempts = 0, OnAttemptsExceeded = AttemptsExceededAction.Delete)] public void ScanLibrary(int libraryId, bool forceUpdate) { - _scannedSeries = new ConcurrentDictionary>(); Library library; try { @@ -152,7 +150,9 @@ namespace API.Services.Tasks } _logger.LogInformation("Beginning file scan on {LibraryName}", library.Name); - var series = ScanLibrariesForSeries(library.Type, library.Folders.Select(fp => fp.Path), out var totalFiles, out var scanElapsedTime); + var scanner = new ParseScannedFiles(_bookService, _logger); + var series = scanner.ScanLibrariesForSeries(library.Type, library.Folders.Select(fp => fp.Path), out var totalFiles, out var scanElapsedTime); + foreach (var folderPath in library.Folders) { folderPath.LastScanned = DateTime.Now; @@ -188,75 +188,7 @@ namespace API.Services.Tasks _logger.LogInformation("Removed {Count} abandoned progress rows", cleanedUp); } - /// - /// - /// - /// Type of library. Used for selecting the correct file extensions to search for and parsing files - /// The folders to scan. By default, this should be library.Folders, however it can be overwritten to restrict folders - /// Total files scanned - /// Time it took to scan and parse files - /// - private Dictionary> ScanLibrariesForSeries(LibraryType libraryType, IEnumerable folders, out int totalFiles, - out long scanElapsedTime) - { - var sw = Stopwatch.StartNew(); - totalFiles = 0; - var searchPattern = GetLibrarySearchPattern(libraryType); - foreach (var folderPath in folders) - { - try - { - totalFiles += DirectoryService.TraverseTreeParallelForEach(folderPath, (f) => - { - try - { - ProcessFile(f, folderPath, libraryType); - } - catch (FileNotFoundException exception) - { - _logger.LogError(exception, "The file {Filename} could not be found", f); - } - }, searchPattern, _logger); - } - catch (ArgumentException ex) - { - _logger.LogError(ex, "The directory '{FolderPath}' does not exist", folderPath); - } - } - - scanElapsedTime = sw.ElapsedMilliseconds; - _logger.LogInformation("Scanned {TotalFiles} files in {ElapsedScanTime} milliseconds", totalFiles, - scanElapsedTime); - - return SeriesWithInfos(_scannedSeries); - } - - private static string GetLibrarySearchPattern(LibraryType libraryType) - { - var searchPattern = libraryType switch - { - LibraryType.Book => Parser.Parser.BookFileExtensions, - LibraryType.MangaImages or LibraryType.ComicImages => Parser.Parser.ImageFileExtensions, - _ => Parser.Parser.ArchiveFileExtensions - }; - - return searchPattern; - } - - /// - /// Returns any series where there were parsed infos - /// - /// - /// - private static Dictionary> SeriesWithInfos(IDictionary> scannedSeries) - { - var filtered = scannedSeries.Where(kvp => kvp.Value.Count > 0); - var series = filtered.ToDictionary(v => v.Key, v => v.Value); - return series; - } - - - private void UpdateLibrary(Library library, Dictionary> parsedSeries) + private void UpdateLibrary(Library library, Dictionary> parsedSeries) { if (parsedSeries == null) throw new ArgumentNullException(nameof(parsedSeries)); @@ -276,16 +208,18 @@ namespace API.Services.Tasks // Add new series that have parsedInfos foreach (var (key, infos) in parsedSeries) { - // Key is normalized already + // Key is normalized already Series existingSeries; try { - existingSeries = library.Series.SingleOrDefault(s => s.NormalizedName == key || Parser.Parser.Normalize(s.OriginalName) == key); + existingSeries = library.Series.SingleOrDefault(s => + (s.NormalizedName == key.NormalizedName || Parser.Parser.Normalize(s.OriginalName) == key.NormalizedName) + && (s.Format == key.Format || s.Format == MangaFormat.Unknown)); } catch (Exception e) { _logger.LogCritical(e, "There are multiple series that map to normalized key {Key}. You can manually delete the entity via UI and rescan to fix it", key); - var duplicateSeries = library.Series.Where(s => s.NormalizedName == key || Parser.Parser.Normalize(s.OriginalName) == key).ToList(); + var duplicateSeries = library.Series.Where(s => s.NormalizedName == key.NormalizedName || Parser.Parser.Normalize(s.OriginalName) == key.NormalizedName).ToList(); foreach (var series in duplicateSeries) { _logger.LogCritical("{Key} maps with {Series}", key, series.OriginalName); @@ -296,12 +230,14 @@ namespace API.Services.Tasks if (existingSeries == null) { existingSeries = DbFactory.Series(infos[0].Series); + existingSeries.Format = key.Format; library.Series.Add(existingSeries); } existingSeries.NormalizedName = Parser.Parser.Normalize(existingSeries.Name); existingSeries.OriginalName ??= infos[0].Series; existingSeries.Metadata ??= DbFactory.SeriesMetadata(new List()); + existingSeries.Format = key.Format; } // Now, we only have to deal with series that exist on disk. Let's recalculate the volumes for each series @@ -311,7 +247,7 @@ namespace API.Services.Tasks try { _logger.LogInformation("Processing series {SeriesName}", series.OriginalName); - UpdateVolumes(series, parsedSeries[Parser.Parser.Normalize(series.OriginalName)].ToArray()); + UpdateVolumes(series, GetInfosByName(parsedSeries, series).ToArray()); series.Pages = series.Volumes.Sum(v => v.Pages); } catch (Exception ex) @@ -321,9 +257,24 @@ namespace API.Services.Tasks }); } - public IEnumerable FindSeriesNotOnDisk(ICollection existingSeries, Dictionary> parsedSeries) + private static IList GetInfosByName(Dictionary> parsedSeries, Series series) { - var foundSeries = parsedSeries.Select(s => s.Key).ToList(); + // TODO: Move this into a common place + var existingKey = parsedSeries.Keys.FirstOrDefault(ps => + ps.Format == series.Format && ps.NormalizedName == Parser.Parser.Normalize(series.OriginalName)); + existingKey ??= new ParsedSeries() + { + Format = series.Format, + Name = series.OriginalName, + NormalizedName = Parser.Parser.Normalize(series.OriginalName) + }; + + return parsedSeries[existingKey]; + } + + public IEnumerable FindSeriesNotOnDisk(ICollection existingSeries, Dictionary> parsedSeries) + { + var foundSeries = parsedSeries.Select(s => s.Key.Name).ToList(); return existingSeries.Where(es => !es.NameInList(foundSeries)); } @@ -364,8 +315,6 @@ namespace API.Services.Tasks series.Volumes.Add(volume); } - // NOTE: Instead of creating and adding? Why Not Merge a new volume into an existing, so no matter what, new properties,etc get propagated? - _logger.LogDebug("Parsing {SeriesName} - Volume {VolumeNumber}", series.Name, volume.Name); var infos = parsedInfos.Where(p => p.Volumes == volumeNumber).ToArray(); UpdateChapters(volume, infos); @@ -473,88 +422,6 @@ namespace API.Services.Tasks } } - /// - /// Attempts to either add a new instance of a show mapping to the _scannedSeries bag or adds to an existing. - /// This will check if the name matches an existing series name (multiple fields) - /// - /// - private void TrackSeries(ParserInfo info) - { - if (info.Series == string.Empty) return; - - // Check if normalized info.Series already exists and if so, update info to use that name instead - info.Series = MergeName(_scannedSeries, info); - - _scannedSeries.AddOrUpdate(Parser.Parser.Normalize(info.Series), new List() {info}, (_, oldValue) => - { - oldValue ??= new List(); - if (!oldValue.Contains(info)) - { - oldValue.Add(info); - } - - return oldValue; - }); - } - - /// - /// Using a normalized name from the passed ParserInfo, this checks against all found series so far and if an existing one exists with - /// same normalized name, it merges into the existing one. This is important as some manga may have a slight difference with punctuation or capitalization. - /// - /// - /// - /// - public string MergeName(ConcurrentDictionary> collectedSeries, ParserInfo info) - { - var normalizedSeries = Parser.Parser.Normalize(info.Series); - _logger.LogDebug("Checking if we can merge {NormalizedSeries}", normalizedSeries); - var existingName = collectedSeries.SingleOrDefault(p => Parser.Parser.Normalize(p.Key) == normalizedSeries) - .Key; - if (!string.IsNullOrEmpty(existingName)) - { - _logger.LogDebug("Found duplicate parsed infos, merged {Original} into {Merged}", info.Series, existingName); - return existingName; - } - - return info.Series; - } - - /// - /// Processes files found during a library scan. - /// Populates a collection of for DB updates later. - /// - /// Path of a file - /// - /// Library type to determine parsing to perform - private void ProcessFile(string path, string rootPath, LibraryType type) - { - ParserInfo info; - - if (type == LibraryType.Book && Parser.Parser.IsEpub(path)) - { - info = _bookService.ParseInfo(path); - } - else - { - info = Parser.Parser.Parse(path, rootPath, type); - } - - if (info == null) - { - _logger.LogWarning("[Scanner] Could not parse series from {Path}", path); - return; - } - - if (type == LibraryType.Book && Parser.Parser.IsEpub(path) && Parser.Parser.ParseVolume(info.Series) != Parser.Parser.DefaultVolume) - { - info = Parser.Parser.Parse(path, rootPath, type); - var info2 = _bookService.ParseInfo(path); - info.Merge(info2); - } - - TrackSeries(info); - } - private MangaFile CreateMangaFile(ParserInfo info) { switch (info.Format) @@ -568,7 +435,8 @@ namespace API.Services.Tasks Pages = _archiveService.GetNumberOfPagesFromArchive(info.FullFilePath) }; } - case MangaFormat.Book: + case MangaFormat.Pdf: + case MangaFormat.Epub: { return new MangaFile() { @@ -601,9 +469,9 @@ namespace API.Services.Tasks if (existingFile != null) { existingFile.Format = info.Format; - if (!existingFile.HasFileBeenModified() && existingFile.Pages > 0) + if (existingFile.HasFileBeenModified() || existingFile.Pages == 0) { - existingFile.Pages = existingFile.Format == MangaFormat.Book + existingFile.Pages = (existingFile.Format == MangaFormat.Epub || existingFile.Format == MangaFormat.Pdf) ? _bookService.GetNumberOfPages(info.FullFilePath) : _archiveService.GetNumberOfPagesFromArchive(info.FullFilePath); } diff --git a/API/Startup.cs b/API/Startup.cs index 61a104c1c..f5cbfc734 100644 --- a/API/Startup.cs +++ b/API/Startup.cs @@ -7,7 +7,6 @@ using API.Services; using API.Services.HostedServices; using Hangfire; using Hangfire.MemoryStorage; -using Kavita.Common; using Kavita.Common.EnvironmentInfo; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html index fe11d2451..a9c2e559c 100644 --- a/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html +++ b/UI/Web/src/app/_modals/edit-series-modal/edit-series-modal.component.html @@ -99,6 +99,7 @@

    Information

    Library: {{libraryName | titlecase}}
    +
    Format: {{utilityService.mangaFormat(series.format)}}

    Volumes

    diff --git a/UI/Web/src/app/_models/library.ts b/UI/Web/src/app/_models/library.ts index f4998747a..5b9f8ec28 100644 --- a/UI/Web/src/app/_models/library.ts +++ b/UI/Web/src/app/_models/library.ts @@ -2,8 +2,6 @@ export enum LibraryType { Manga = 0, Comic = 1, Book = 2, - MangaImages = 3, - ComicImages = 4 } export interface Library { diff --git a/UI/Web/src/app/_models/manga-format.ts b/UI/Web/src/app/_models/manga-format.ts index 21fd7d450..7f992314a 100644 --- a/UI/Web/src/app/_models/manga-format.ts +++ b/UI/Web/src/app/_models/manga-format.ts @@ -2,5 +2,6 @@ export enum MangaFormat { IMAGE = 0, ARCHIVE = 1, UNKNOWN = 2, - BOOK = 3 + EPUB = 3, + PDF = 4 } \ No newline at end of file diff --git a/UI/Web/src/app/_models/series.ts b/UI/Web/src/app/_models/series.ts index 73b843bfe..d48839ea6 100644 --- a/UI/Web/src/app/_models/series.ts +++ b/UI/Web/src/app/_models/series.ts @@ -1,3 +1,4 @@ +import { MangaFormat } from './manga-format'; import { Volume } from './volume'; export interface Series { @@ -15,4 +16,5 @@ export interface Series { userReview: string; // User review libraryId: number; created: string; // DateTime when entity was created + format: MangaFormat; } diff --git a/UI/Web/src/app/admin/manage-library/manage-library.component.ts b/UI/Web/src/app/admin/manage-library/manage-library.component.ts index 3825d25c8..f3353ed7f 100644 --- a/UI/Web/src/app/admin/manage-library/manage-library.component.ts +++ b/UI/Web/src/app/admin/manage-library/manage-library.component.ts @@ -88,10 +88,6 @@ export class ManageLibraryComponent implements OnInit, OnDestroy { return 'Comic'; case LibraryType.Manga: return 'Manga'; - case LibraryType.MangaImages: - return 'Images (Manga)'; - case LibraryType.ComicImages: - return 'Images (Comic)'; } } diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.html b/UI/Web/src/app/manga-reader/manga-reader.component.html index 9b44da93b..f37d8a94c 100644 --- a/UI/Web/src/app/manga-reader/manga-reader.component.html +++ b/UI/Web/src/app/manga-reader/manga-reader.component.html @@ -1,6 +1,6 @@
    -
    +
    -

    {{series?.name}}

    +
    + +

    + {{series?.name}} +

    +
    +
    +
    +
    Type
    +
    +
    +  {{utilityService.mangaFormat(series.format)}} +
    +
    diff --git a/UI/Web/src/app/series-detail/series-detail.component.ts b/UI/Web/src/app/series-detail/series-detail.component.ts index af72632b4..fec46f46f 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.ts +++ b/UI/Web/src/app/series-detail/series-detail.component.ts @@ -14,6 +14,7 @@ import { EditSeriesModalComponent } from '../_modals/edit-series-modal/edit-seri import { ReviewSeriesModalComponent } from '../_modals/review-series-modal/review-series-modal.component'; import { Chapter } from '../_models/chapter'; import { LibraryType } from '../_models/library'; +import { MangaFormat } from '../_models/manga-format'; import { Series } from '../_models/series'; import { SeriesMetadata } from '../_models/series-metadata'; import { Volume } from '../_models/volume'; @@ -70,10 +71,14 @@ export class SeriesDetailComponent implements OnInit { return LibraryType; } + get MangaFormat(): typeof MangaFormat { + return MangaFormat; + } + constructor(private route: ActivatedRoute, private seriesService: SeriesService, - ratingConfig: NgbRatingConfig, private router: Router, + private ratingConfig: NgbRatingConfig, private router: Router, private modalService: NgbModal, public readerService: ReaderService, - private utilityService: UtilityService, private toastr: ToastrService, + public utilityService: UtilityService, private toastr: ToastrService, private accountService: AccountService, public imageService: ImageService, private actionFactoryService: ActionFactoryService, private libraryService: LibraryService, private confirmService: ConfirmService, private naturalSort: NaturalSortService, @@ -330,7 +335,8 @@ export class SeriesDetailComponent implements OnInit { this.toastr.error('There are no pages. Kavita was not able to read this archive.'); return; } - if (this.libraryType === LibraryType.Book) { + + if (chapter.files.length > 0 && chapter.files[0].format === MangaFormat.EPUB) { this.router.navigate(['library', this.libraryId, 'series', this.series?.id, 'book', chapter.id]); } else { this.router.navigate(['library', this.libraryId, 'series', this.series?.id, 'manga', chapter.id]); diff --git a/UI/Web/src/app/shared/_services/utility.service.ts b/UI/Web/src/app/shared/_services/utility.service.ts index bf6eefe9c..8d67bb7b6 100644 --- a/UI/Web/src/app/shared/_services/utility.service.ts +++ b/UI/Web/src/app/shared/_services/utility.service.ts @@ -55,4 +55,34 @@ export class UtilityService { return cleaned; } + mangaFormat(format: MangaFormat): string { + switch (format) { + case MangaFormat.EPUB: + return 'EPUB'; + case MangaFormat.ARCHIVE: + return 'Archive'; + case MangaFormat.IMAGE: + return 'Image'; + case MangaFormat.PDF: + return 'PDF'; + case MangaFormat.UNKNOWN: + return 'Unknown'; + } + } + + mangaFormatIcon(format: MangaFormat): string { + switch (format) { + case MangaFormat.EPUB: + return 'fa-book'; + case MangaFormat.ARCHIVE: + return 'fa-file-archive'; + case MangaFormat.IMAGE: + return 'fa-image'; + case MangaFormat.PDF: + return 'fa-file-pdf'; + case MangaFormat.UNKNOWN: + return 'fa-question'; + } + } + } diff --git a/UI/Web/src/app/shared/card-item/card-item.component.html b/UI/Web/src/app/shared/card-item/card-item.component.html index 0fa307f33..ffb22adb0 100644 --- a/UI/Web/src/app/shared/card-item/card-item.component.html +++ b/UI/Web/src/app/shared/card-item/card-item.component.html @@ -17,7 +17,8 @@ - {{title}} + {{utilityService.mangaFormat(format)}} +  {{title}} (promoted) diff --git a/UI/Web/src/app/shared/card-item/card-item.component.ts b/UI/Web/src/app/shared/card-item/card-item.component.ts index 212fa5078..dc631681b 100644 --- a/UI/Web/src/app/shared/card-item/card-item.component.ts +++ b/UI/Web/src/app/shared/card-item/card-item.component.ts @@ -3,11 +3,13 @@ import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { Chapter } from 'src/app/_models/chapter'; import { CollectionTag } from 'src/app/_models/collection-tag'; +import { MangaFormat } from 'src/app/_models/manga-format'; import { Series } from 'src/app/_models/series'; import { Volume } from 'src/app/_models/volume'; import { ActionItem } from 'src/app/_services/action-factory.service'; import { ImageService } from 'src/app/_services/image.service'; import { LibraryService } from 'src/app/_services/library.service'; +import { UtilityService } from '../_services/utility.service'; @Component({ selector: 'app-card-item', @@ -28,10 +30,15 @@ export class CardItemComponent implements OnInit, OnDestroy { libraryName: string | undefined = undefined; // Library name item belongs to libraryId: number | undefined = undefined; supressArchiveWarning: boolean = false; // This will supress the cannot read archive warning when total pages is 0 + format: MangaFormat = MangaFormat.UNKNOWN; + + get MangaFormat(): typeof MangaFormat { + return MangaFormat; + } private readonly onDestroy = new Subject(); - constructor(public imageSerivce: ImageService, private libraryService: LibraryService) { + constructor(public imageSerivce: ImageService, private libraryService: LibraryService, public utilityService: UtilityService) { } ngOnInit(): void { @@ -47,6 +54,7 @@ export class CardItemComponent implements OnInit, OnDestroy { } }); } + this.format = (this.entity as Series).format; } ngOnDestroy() { diff --git a/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss b/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss index 6cb5f83b6..5a05bed5c 100644 --- a/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss +++ b/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss @@ -7,7 +7,7 @@ $bdr-color: #f2f2f2; background-color: $bg-color; transition: all .3s ease-out; margin: 3px 5px 3px 0px; - padding: 2px 15px; + padding: 2px 10px; border-radius: 6px; font-size: 14px; border: 1px solid $bdr-color; @@ -15,10 +15,8 @@ $bdr-color: #f2f2f2; cursor: default; i { - color: $primary-color; font-size: 14px; font-weight: bold; - margin-left: 10px; margin-right: 0px; cursor: pointer; } diff --git a/UI/Web/src/app/user-preferences/user-preferences.component.ts b/UI/Web/src/app/user-preferences/user-preferences.component.ts index 2f66704c2..e9c694f89 100644 --- a/UI/Web/src/app/user-preferences/user-preferences.component.ts +++ b/UI/Web/src/app/user-preferences/user-preferences.component.ts @@ -71,9 +71,9 @@ export class UserPreferencesComponent implements OnInit, OnDestroy { this.settingsForm.addControl('bookReaderLineSpacing', new FormControl(user.preferences.bookReaderLineSpacing, [])); this.settingsForm.addControl('bookReaderMargin', new FormControl(user.preferences.bookReaderMargin, [])); this.settingsForm.addControl('bookReaderReadingDirection', new FormControl(user.preferences.bookReaderReadingDirection, [])); - this.settingsForm.addControl('bookReaderTapToPaginate', new FormControl(user.preferences.siteDarkMode || false, [])); + this.settingsForm.addControl('bookReaderTapToPaginate', new FormControl(!!user.preferences.siteDarkMode, [])); - this.settingsForm.addControl('siteDarkMode', new FormControl(user.preferences.siteDarkMode || true, [])); + this.settingsForm.addControl('siteDarkMode', new FormControl(!!user.preferences.siteDarkMode, [])); } }); From 199ab7946c87c79394cf78998e2b5b39e02ef5ee Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Fri, 23 Jul 2021 10:35:26 -0500 Subject: [PATCH 16/23] Fixed Docker not being able to parse PDF Images (#418) * Fixed an issue with downloading pdf files * Bumped sentry version to latest * Refactored PDF Page to image extraction to a private method. Bumped Sentry version in backend. * Fixed issue with PDFs not being parsable (image) within Docker due to libgdiplus not being installed. --- API/API.csproj | 8 +- API/Controllers/DownloadController.cs | 1 + API/Services/BookService.cs | 80 ++++----- Dockerfile | 2 +- Kavita.Common/Kavita.Common.csproj | 6 +- UI/Web/package-lock.json | 168 +++++++++--------- UI/Web/package.json | 4 +- .../app/shared/_services/download.service.ts | 2 +- entrypoint.sh | 2 + 9 files changed, 134 insertions(+), 139 deletions(-) diff --git a/API/API.csproj b/API/API.csproj index ab727275b..997ca6817 100644 --- a/API/API.csproj +++ b/API/API.csproj @@ -48,12 +48,12 @@ - - + + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/API/Controllers/DownloadController.cs b/API/Controllers/DownloadController.cs index 1efcca35e..3e89c98ef 100644 --- a/API/Controllers/DownloadController.cs +++ b/API/Controllers/DownloadController.cs @@ -85,6 +85,7 @@ namespace API.Controllers ".epub" => "application/epub+zip", ".7z" => "application/x-7z-compressed", ".7zip" => "application/x-7z-compressed", + ".pdf" => "application/pdf", _ => contentType }; } diff --git a/API/Services/BookService.cs b/API/Services/BookService.cs index 513ff8db8..84136aa84 100644 --- a/API/Services/BookService.cs +++ b/API/Services/BookService.cs @@ -14,6 +14,7 @@ using API.Interfaces.Services; using API.Parser; using Docnet.Core; using Docnet.Core.Models; +using Docnet.Core.Readers; using ExCSS; using HtmlAgilityPack; using Microsoft.Extensions.Logging; @@ -375,22 +376,7 @@ namespace API.Services for (var pageNumber = 0; pageNumber < pages; pageNumber++) { using var pageReader = docReader.GetPageReader(pageNumber); - var rawBytes = pageReader.GetImage(); - var width = pageReader.GetPageWidth(); - var height = pageReader.GetPageHeight(); - using var doc = new Bitmap(width, height, PixelFormat.Format32bppArgb); - using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); - AddBytesToBitmap(bmp, rawBytes); - for (int y = 0; y < bmp.Height; y++) - { - bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y)); - } - var g = Graphics.FromImage(doc); - g.FillRegion(Brushes.White, new Region(new Rectangle(0, 0, width, height))); - g.DrawImage(bmp, new Point(0, 0)); - g.Save(); - using var stream = new MemoryStream(); - doc.Save(stream, ImageFormat.Jpeg); + using var stream = GetPdfPage(docReader, pageNumber); File.WriteAllBytes(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"), stream.ToArray()); } } @@ -417,15 +403,12 @@ namespace API.Services if (coverImageContent == null) return Array.Empty(); - if (createThumbnail) - { - using var stream = new MemoryStream(coverImageContent.ReadContent()); + if (!createThumbnail) return coverImageContent.ReadContent(); - using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); - return thumbnail.WriteToBuffer(".jpg"); - } + using var stream = new MemoryStream(coverImageContent.ReadContent()); + using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); + return thumbnail.WriteToBuffer(".jpg"); - return coverImageContent.ReadContent(); } catch (Exception ex) { @@ -442,32 +425,14 @@ namespace API.Services using var docReader = DocLib.Instance.GetDocReader(fileFilePath, new PageDimensions(1080, 1920)); if (docReader.GetPageCount() == 0) return Array.Empty(); - using var pageReader = docReader.GetPageReader(0); - var rawBytes = pageReader.GetImage(); - var width = pageReader.GetPageWidth(); - var height = pageReader.GetPageHeight(); - using var doc = new Bitmap(width, height, PixelFormat.Format32bppArgb); - using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); - AddBytesToBitmap(bmp, rawBytes); - for (int y = 0; y < bmp.Height; y++) - { - bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y)); - } - var g = Graphics.FromImage(doc); - g.FillRegion(Brushes.White, new Region(new Rectangle(0, 0, width, height))); - g.DrawImage(bmp, new Point(0, 0)); - g.Save(); - using var stream = new MemoryStream(); - doc.Save(stream, ImageFormat.Jpeg); + using var stream = GetPdfPage(docReader, 0); stream.Seek(0, SeekOrigin.Begin); - if (createThumbnail) - { - using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); - return thumbnail.WriteToBuffer(".png"); - } + if (!createThumbnail) return stream.ToArray(); + + using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); + return thumbnail.WriteToBuffer(".png"); - return stream.ToArray(); } catch (Exception ex) { @@ -479,6 +444,29 @@ namespace API.Services return Array.Empty(); } + private static MemoryStream GetPdfPage(IDocReader docReader, int pageNumber) + { + using var pageReader = docReader.GetPageReader(pageNumber); + var rawBytes = pageReader.GetImage(); + var width = pageReader.GetPageWidth(); + var height = pageReader.GetPageHeight(); + using var doc = new Bitmap(width, height, PixelFormat.Format32bppArgb); + using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); + AddBytesToBitmap(bmp, rawBytes); + for (int y = 0; y < bmp.Height; y++) + { + bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y)); + } + + using var g = Graphics.FromImage(doc); + g.FillRegion(Brushes.White, new Region(new Rectangle(0, 0, width, height))); + g.DrawImage(bmp, new Point(0, 0)); + g.Save(); + var stream = new MemoryStream(); + doc.Save(stream, ImageFormat.Jpeg); + return stream; + } + private static string RemoveWhiteSpaceFromStylesheets(string body) { body = Regex.Replace(body, @"[a-zA-Z]+#", "#"); diff --git a/Dockerfile b/Dockerfile index adead7274..496db0002 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ COPY --from=copytask /files/wwwroot /kavita/wwwroot #Installs program dependencies RUN apt-get update \ - && apt-get install -y libicu-dev libssl1.1 pwgen \ + && apt-get install -y libicu-dev libssl1.1 pwgen libgdiplus \ && rm -rf /var/lib/apt/lists/* #Creates the data directory diff --git a/Kavita.Common/Kavita.Common.csproj b/Kavita.Common/Kavita.Common.csproj index b933425c0..284571b1a 100644 --- a/Kavita.Common/Kavita.Common.csproj +++ b/Kavita.Common/Kavita.Common.csproj @@ -11,7 +11,11 @@ - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/UI/Web/package-lock.json b/UI/Web/package-lock.json index 57c6fee31..64a49485a 100644 --- a/UI/Web/package-lock.json +++ b/UI/Web/package-lock.json @@ -22,8 +22,8 @@ "@ng-bootstrap/ng-bootstrap": "^9.1.0", "@ngx-lite/nav-drawer": "^0.4.6", "@ngx-lite/util": "0.0.0", - "@sentry/angular": "^6.4.1", - "@sentry/integrations": "^6.4.1", + "@sentry/angular": "^6.10.0", + "@sentry/integrations": "^6.10.0", "@types/file-saver": "^2.0.1", "angular-ng-autocomplete": "^2.0.5", "bootstrap": "^4.5.0", @@ -3140,13 +3140,13 @@ } }, "node_modules/@sentry/angular": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-6.4.1.tgz", - "integrity": "sha512-lpbc1nA19SYKzaaYd/kn/xqvxI8oRForAR+lM1iE0yru/56ZrFKoUreqQQjCgtMD5aKfI9cT4VrtIq5PVkfOeA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-6.10.0.tgz", + "integrity": "sha512-SSnsz4sVu9LJh7RM+z9FopWytl2yYNZQ2nK/zv/6iQKIBOqvnCqUIPjVjq1rFYXOe0jOJKsn0QlQLKp4MajYMg==", "dependencies": { - "@sentry/browser": "6.4.1", - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/browser": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "rxjs": "^6.6.0", "tslib": "^1.9.3" }, @@ -3165,13 +3165,13 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/browser": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.4.1.tgz", - "integrity": "sha512-3cDud6GWutnJqcnheIq0lPNTsUJbrRLevQ+g1YfawVXFUxfmmY2bOsGd/Mxq17LxYeBHgKTitXv3DU1bsQ+WBQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.10.0.tgz", + "integrity": "sha512-H0Blgp8f8bomebkkGWIgxHVjabtQAlsKJDiFXBg7gIc75YcarRxwH0R3hMog1/h8mmv4CGGUsy5ljYW6jsNnvA==", "dependencies": { - "@sentry/core": "6.4.1", - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/core": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "tslib": "^1.9.3" }, "engines": { @@ -3184,14 +3184,14 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/core": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.4.1.tgz", - "integrity": "sha512-Lx13oTiP+Tjvm5VxulcCszNVd2S1wY4viSnr+ygq62ySVERR+t7uOZDSARZ0rZ259GwW6nkbMh9dDmD0d6VCGQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.10.0.tgz", + "integrity": "sha512-5KlxHJlbD7AMo+b9pMGkjxUOfMILtsqCtGgI7DMvZNfEkdohO8QgUY+hPqr540kmwArFS91ipQYWhqzGaOhM3Q==", "dependencies": { - "@sentry/hub": "6.4.1", - "@sentry/minimal": "6.4.1", - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/hub": "6.10.0", + "@sentry/minimal": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "tslib": "^1.9.3" }, "engines": { @@ -3204,12 +3204,12 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/hub": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.4.1.tgz", - "integrity": "sha512-7IZRP5buDE6s/c3vWzzPR/ySE+8GUuHPgTEPiDCPOCWwUN11zXDafJDKkJqY3muJfebUKmC/JG67RyBx+XlnlQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.10.0.tgz", + "integrity": "sha512-MV8wjhWiFAXZAhmj7Ef5QdBr2IF93u8xXiIo2J+dRZ7eVa4/ZszoUiDbhUcl/TPxczaw4oW2a6tINBNFLzXiig==", "dependencies": { - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "tslib": "^1.9.3" }, "engines": { @@ -3222,12 +3222,12 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/integrations": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-6.4.1.tgz", - "integrity": "sha512-3kw6NcrFGXW+qlfT112EkYt7jdFX55m9yJN5eCt7Iad59YzA8ji8Pio5ohy9Pl+OfYXlKRFOvnYPpZZn80UjlQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-6.10.0.tgz", + "integrity": "sha512-NMtB0jjFYFZRxyjYu2dWLThk9YPIwqhi4hYywmWkbv4/ILzi5Rwnh+aqNW6yrj8qG4b9itNMh3YvEzmf0aqauw==", "dependencies": { - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "localforage": "^1.8.1", "tslib": "^1.9.3" }, @@ -3241,12 +3241,12 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/minimal": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.4.1.tgz", - "integrity": "sha512-4x/PRbDZACCKJqjta9EkhiIMyGMf7VgBX13EEWEDVWLP7ymFukBuTr4ap/Tz9429kB/yXZuDGGMIZp/G618H3g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.10.0.tgz", + "integrity": "sha512-yarm046UgUFIBoxqnBan2+BEgaO9KZCrLzsIsmALiQvpfW92K1lHurSawl5W6SR7wCYBnNn7CPvPE/BHFdy4YA==", "dependencies": { - "@sentry/hub": "6.4.1", - "@sentry/types": "6.4.1", + "@sentry/hub": "6.10.0", + "@sentry/types": "6.10.0", "tslib": "^1.9.3" }, "engines": { @@ -3259,19 +3259,19 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/types": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.4.1.tgz", - "integrity": "sha512-sTu/GaLsLYk1AkAqpkMT4+4q665LtZjhV0hkgiTD4N3zPl5uSf1pCIzxPRYjOpe7NEANmWv8U4PaGKGtc2eMfA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.10.0.tgz", + "integrity": "sha512-M7s0JFgG7/6/yNVYoPUbxzaXDhnzyIQYRRJJKRaTD77YO4MHvi4Ke8alBWqD5fer0cPIfcSkBqa9BLdqRqcMWw==", "engines": { "node": ">=6" } }, "node_modules/@sentry/utils": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.4.1.tgz", - "integrity": "sha512-xJ1uVa5fvg23pXQfulvCIBb9pQ3p1awyd1PapK2AYi+wKjTuYl4B9edmhjRREEQEExznl/d2OVm78fRXLq7M9Q==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.10.0.tgz", + "integrity": "sha512-F9OczOcZMFtazYVZ6LfRIe65/eOfQbiAedIKS0li4npuMz0jKYRbxrjd/U7oLiNQkPAp4/BujU4m1ZIwq6a+tg==", "dependencies": { - "@sentry/types": "6.4.1", + "@sentry/types": "6.10.0", "tslib": "^1.9.3" }, "engines": { @@ -22898,13 +22898,13 @@ } }, "@sentry/angular": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-6.4.1.tgz", - "integrity": "sha512-lpbc1nA19SYKzaaYd/kn/xqvxI8oRForAR+lM1iE0yru/56ZrFKoUreqQQjCgtMD5aKfI9cT4VrtIq5PVkfOeA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-6.10.0.tgz", + "integrity": "sha512-SSnsz4sVu9LJh7RM+z9FopWytl2yYNZQ2nK/zv/6iQKIBOqvnCqUIPjVjq1rFYXOe0jOJKsn0QlQLKp4MajYMg==", "requires": { - "@sentry/browser": "6.4.1", - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/browser": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "rxjs": "^6.6.0", "tslib": "^1.9.3" }, @@ -22917,13 +22917,13 @@ } }, "@sentry/browser": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.4.1.tgz", - "integrity": "sha512-3cDud6GWutnJqcnheIq0lPNTsUJbrRLevQ+g1YfawVXFUxfmmY2bOsGd/Mxq17LxYeBHgKTitXv3DU1bsQ+WBQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.10.0.tgz", + "integrity": "sha512-H0Blgp8f8bomebkkGWIgxHVjabtQAlsKJDiFXBg7gIc75YcarRxwH0R3hMog1/h8mmv4CGGUsy5ljYW6jsNnvA==", "requires": { - "@sentry/core": "6.4.1", - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/core": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "tslib": "^1.9.3" }, "dependencies": { @@ -22935,14 +22935,14 @@ } }, "@sentry/core": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.4.1.tgz", - "integrity": "sha512-Lx13oTiP+Tjvm5VxulcCszNVd2S1wY4viSnr+ygq62ySVERR+t7uOZDSARZ0rZ259GwW6nkbMh9dDmD0d6VCGQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.10.0.tgz", + "integrity": "sha512-5KlxHJlbD7AMo+b9pMGkjxUOfMILtsqCtGgI7DMvZNfEkdohO8QgUY+hPqr540kmwArFS91ipQYWhqzGaOhM3Q==", "requires": { - "@sentry/hub": "6.4.1", - "@sentry/minimal": "6.4.1", - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/hub": "6.10.0", + "@sentry/minimal": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "tslib": "^1.9.3" }, "dependencies": { @@ -22954,12 +22954,12 @@ } }, "@sentry/hub": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.4.1.tgz", - "integrity": "sha512-7IZRP5buDE6s/c3vWzzPR/ySE+8GUuHPgTEPiDCPOCWwUN11zXDafJDKkJqY3muJfebUKmC/JG67RyBx+XlnlQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.10.0.tgz", + "integrity": "sha512-MV8wjhWiFAXZAhmj7Ef5QdBr2IF93u8xXiIo2J+dRZ7eVa4/ZszoUiDbhUcl/TPxczaw4oW2a6tINBNFLzXiig==", "requires": { - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "tslib": "^1.9.3" }, "dependencies": { @@ -22971,12 +22971,12 @@ } }, "@sentry/integrations": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-6.4.1.tgz", - "integrity": "sha512-3kw6NcrFGXW+qlfT112EkYt7jdFX55m9yJN5eCt7Iad59YzA8ji8Pio5ohy9Pl+OfYXlKRFOvnYPpZZn80UjlQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-6.10.0.tgz", + "integrity": "sha512-NMtB0jjFYFZRxyjYu2dWLThk9YPIwqhi4hYywmWkbv4/ILzi5Rwnh+aqNW6yrj8qG4b9itNMh3YvEzmf0aqauw==", "requires": { - "@sentry/types": "6.4.1", - "@sentry/utils": "6.4.1", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", "localforage": "^1.8.1", "tslib": "^1.9.3" }, @@ -22989,12 +22989,12 @@ } }, "@sentry/minimal": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.4.1.tgz", - "integrity": "sha512-4x/PRbDZACCKJqjta9EkhiIMyGMf7VgBX13EEWEDVWLP7ymFukBuTr4ap/Tz9429kB/yXZuDGGMIZp/G618H3g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.10.0.tgz", + "integrity": "sha512-yarm046UgUFIBoxqnBan2+BEgaO9KZCrLzsIsmALiQvpfW92K1lHurSawl5W6SR7wCYBnNn7CPvPE/BHFdy4YA==", "requires": { - "@sentry/hub": "6.4.1", - "@sentry/types": "6.4.1", + "@sentry/hub": "6.10.0", + "@sentry/types": "6.10.0", "tslib": "^1.9.3" }, "dependencies": { @@ -23006,16 +23006,16 @@ } }, "@sentry/types": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.4.1.tgz", - "integrity": "sha512-sTu/GaLsLYk1AkAqpkMT4+4q665LtZjhV0hkgiTD4N3zPl5uSf1pCIzxPRYjOpe7NEANmWv8U4PaGKGtc2eMfA==" + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.10.0.tgz", + "integrity": "sha512-M7s0JFgG7/6/yNVYoPUbxzaXDhnzyIQYRRJJKRaTD77YO4MHvi4Ke8alBWqD5fer0cPIfcSkBqa9BLdqRqcMWw==" }, "@sentry/utils": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.4.1.tgz", - "integrity": "sha512-xJ1uVa5fvg23pXQfulvCIBb9pQ3p1awyd1PapK2AYi+wKjTuYl4B9edmhjRREEQEExznl/d2OVm78fRXLq7M9Q==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.10.0.tgz", + "integrity": "sha512-F9OczOcZMFtazYVZ6LfRIe65/eOfQbiAedIKS0li4npuMz0jKYRbxrjd/U7oLiNQkPAp4/BujU4m1ZIwq6a+tg==", "requires": { - "@sentry/types": "6.4.1", + "@sentry/types": "6.10.0", "tslib": "^1.9.3" }, "dependencies": { diff --git a/UI/Web/package.json b/UI/Web/package.json index bafaa04c5..de53766f5 100644 --- a/UI/Web/package.json +++ b/UI/Web/package.json @@ -29,8 +29,8 @@ "@ng-bootstrap/ng-bootstrap": "^9.1.0", "@ngx-lite/nav-drawer": "^0.4.6", "@ngx-lite/util": "0.0.0", - "@sentry/angular": "^6.4.1", - "@sentry/integrations": "^6.4.1", + "@sentry/angular": "^6.10.0", + "@sentry/integrations": "^6.10.0", "@types/file-saver": "^2.0.1", "angular-ng-autocomplete": "^2.0.5", "bootstrap": "^4.5.0", diff --git a/UI/Web/src/app/shared/_services/download.service.ts b/UI/Web/src/app/shared/_services/download.service.ts index 8e32ffca4..ad8d7752e 100644 --- a/UI/Web/src/app/shared/_services/download.service.ts +++ b/UI/Web/src/app/shared/_services/download.service.ts @@ -96,7 +96,7 @@ export class DownloadService { */ private getFilenameFromHeader(headers: HttpHeaders, defaultName: string) { const tokens = (headers.get('content-disposition') || '').split(';'); - let filename = tokens[1].replace('filename=', '').replace('"', '').trim(); + let filename = tokens[1].replace('filename=', '').replace(/"/ig, '').trim(); if (filename.startsWith('download_') || filename.startsWith('kavita_download_')) { const ext = filename.substring(filename.lastIndexOf('.'), filename.length); return defaultName + ext; diff --git a/entrypoint.sh b/entrypoint.sh index 6e69c9b4a..3a5328354 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -79,4 +79,6 @@ else fi +chmod +x ./Kavita + ./Kavita From 29edadb506e5e587c7a30e0dd89bf9eb617da1e3 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Fri, 23 Jul 2021 12:10:02 -0500 Subject: [PATCH 17/23] Updated readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 699b94102..52b38e484 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ your reading collection with your friends and family!
    ## Goals -- [x] Serve up Manga/Webtoons/Comics (cbr, cbz, zip/rar, 7zip, raw images) and Books (epub, mobi, azw, djvu, pdf) +- [x] Serve up Manga/Webtoons/Comics (cbr, cbz, zip/rar, 7zip, raw images) and Books (epub, pdf) - [x] First class responsive readers that work great on any device (phone, tablet, desktop) - [x] Dark and Light themes - [ ] Provide hooks into metadata providers to fetch metadata for Comics, Manga, and Books @@ -26,7 +26,7 @@ your reading collection with your friends and family! - [x] Ability to manage users, access, and ratings - [ ] Ability to sync ratings and reviews to external services - [x] Fully Accessible with active accessibility audits -- [x] Dedicated webtoon reader (in beta testing) +- [x] Dedicated webtoon reading mode - [ ] And so much [more...](https://github.com/Kareadita/Kavita/projects) ## Support @@ -92,7 +92,7 @@ This project exists thanks to all the people who contribute. [Contribute](CONTRI ## Donate If you like Kavita, have gotten good use out of it or feel like you want to say thanks with a few bucks, feel free to donate. Money will go towards -expenses related to Kavita. Back us through [OpenCollective](https://opencollective.com/Kavita#backer). +expenses related to Kavita. Back us through [OpenCollective](https://opencollective.com/Kavita#backer). You can also use [Paypal](https://www.paypal.com/paypalme/majora2007?locale.x=en_US), however your name will not show below. ## Backers @@ -121,4 +121,4 @@ Thank you to [](https://sentry.io/ ### License * [GNU GPL v3](http://www.gnu.org/licenses/gpl.html) -* Copyright 2010-2021 +* Copyright 2020-2021 From ebd4ec25bf8d366a6f799fd979c5b96a9dd30043 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Fri, 23 Jul 2021 18:02:14 -0500 Subject: [PATCH 18/23] Shakeout Fixes (#422) # Fixed - Fixed: Clean the pdf extension from Series title for PDF types - Fixed: Fixed a bug where a forced metadata refresh wouldn't trigger a volume to force a refresh of cover image - Fixed: Fixed an issue where Removing series no longer on disk would not use the Series Format and thus after deleting files, they would not be removed. - Fixed: Fixed an issue with reading a single image file, where the cache code would not properly move the file - Fixed: For Specials, Get Next/Prev Chapter should use the filename instead of arbitrary Number (which is always 0). Use the same sorting logic when requesting volumes on series detail, so sorting can happen in the backend. # Added - Added: (Accessibility) Nearly every page has had a title set for it =============================================================================== * Clean the pdf extension from ParseSeries * Fixed a bug where forced metadata refresh wouldn't trigger the volume to update it's image. * Added titles to most pages to help distinguish back/forward history. Fixed a bug in the scanner which didn't account for Format when calculating if we need to remove a series not on disk. * For Specials, Get Next/Prev Chapter should use the filename instead of arbitrary Number (which is always 0). Use the same sorting logic when requesting volumes on series detail, so sorting can happen in the backend. * Fixed unit tests --- API.Tests/Parser/BookParserTests.cs | 2 +- API.Tests/Services/ScannerServiceTests.cs | 2 +- API/Controllers/ReaderController.cs | 7 ++- API/Data/SeriesRepository.cs | 55 ++++++++++++------- API/Extensions/SeriesExtensions.cs | 2 +- API/Parser/Parser.cs | 6 ++ API/Services/CacheService.cs | 11 +++- API/Services/MetadataService.cs | 33 +++++------ .../Tasks/Scanner/ParseScannedFiles.cs | 24 +++++--- API/Services/Tasks/ScannerService.cs | 44 +++++++-------- Kavita.Common/KavitaException.cs | 2 +- UI/Web/src/app/_guards/auth.guard.ts | 2 +- .../admin/dashboard/dashboard.component.ts | 7 ++- .../all-collections.component.ts | 6 +- UI/Web/src/app/home/home.component.ts | 4 +- .../library-detail.component.ts | 2 +- UI/Web/src/app/library/library.component.ts | 7 ++- .../manga-reader/manga-reader.component.ts | 2 +- .../app/nav-header/nav-header.component.ts | 2 +- .../series-detail/series-detail.component.ts | 12 ++-- .../card-details-modal.component.ts | 3 +- .../shared/_services/natural-sort.service.ts | 1 + .../user-preferences.component.ts | 4 +- 23 files changed, 143 insertions(+), 97 deletions(-) diff --git a/API.Tests/Parser/BookParserTests.cs b/API.Tests/Parser/BookParserTests.cs index abeff081d..219f5d723 100644 --- a/API.Tests/Parser/BookParserTests.cs +++ b/API.Tests/Parser/BookParserTests.cs @@ -11,4 +11,4 @@ namespace API.Tests.Parser Assert.Equal(expected, API.Parser.Parser.ParseSeries(filename)); } } -} \ No newline at end of file +} diff --git a/API.Tests/Services/ScannerServiceTests.cs b/API.Tests/Services/ScannerServiceTests.cs index 8eb9bc60f..70244a8f1 100644 --- a/API.Tests/Services/ScannerServiceTests.cs +++ b/API.Tests/Services/ScannerServiceTests.cs @@ -52,7 +52,7 @@ namespace API.Tests.Services IUnitOfWork unitOfWork = new UnitOfWork(_context, Substitute.For(), null); - IMetadataService metadataService = Substitute.For(unitOfWork, _metadataLogger, _archiveService, _bookService, _directoryService, _imageService); + IMetadataService metadataService = Substitute.For(unitOfWork, _metadataLogger, _archiveService, _bookService, _imageService); _scannerService = new ScannerService(unitOfWork, _logger, _archiveService, metadataService, _bookService); } diff --git a/API/Controllers/ReaderController.cs b/API/Controllers/ReaderController.cs index c9970b1e5..746d3a6ce 100644 --- a/API/Controllers/ReaderController.cs +++ b/API/Controllers/ReaderController.cs @@ -21,6 +21,7 @@ namespace API.Controllers private readonly IUnitOfWork _unitOfWork; private readonly ChapterSortComparer _chapterSortComparer = new ChapterSortComparer(); private readonly ChapterSortComparerZeroFirst _chapterSortComparerForInChapterSorting = new ChapterSortComparerZeroFirst(); + private readonly NaturalSortComparer _naturalSortComparer = new NaturalSortComparer(); public ReaderController(IDirectoryService directoryService, ICacheService cacheService, IUnitOfWork unitOfWork) { @@ -295,8 +296,8 @@ namespace API.Controllers var currentChapter = await _unitOfWork.VolumeRepository.GetChapterAsync(currentChapterId); if (currentVolume.Number == 0) { - // Handle specials - var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer), currentChapter.Number); + // Handle specials by sorting on their Filename aka Range + var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => x.Range, _naturalSortComparer), currentChapter.Number); if (chapterId > 0) return Ok(chapterId); } @@ -362,7 +363,7 @@ namespace API.Controllers if (currentVolume.Number == 0) { - var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).Reverse(), currentChapter.Number); + var chapterId = GetNextChapterId(currentVolume.Chapters.OrderBy(x => x.Range, _naturalSortComparer).Reverse(), currentChapter.Number); if (chapterId > 0) return Ok(chapterId); } diff --git a/API/Data/SeriesRepository.cs b/API/Data/SeriesRepository.cs index 07d7102e1..ad4b93e6b 100644 --- a/API/Data/SeriesRepository.cs +++ b/API/Data/SeriesRepository.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Threading.Tasks; +using API.Comparators; using API.DTOs; using API.Entities; using API.Extensions; @@ -16,7 +18,7 @@ namespace API.Data { private readonly DataContext _context; private readonly IMapper _mapper; - + private readonly NaturalSortComparer _naturalSortComparer = new (); public SeriesRepository(DataContext context, IMapper mapper) { _context = context; @@ -37,7 +39,7 @@ namespace API.Data { return await _context.SaveChangesAsync() > 0; } - + public bool SaveAll() { return _context.SaveChanges() > 0; @@ -60,12 +62,12 @@ namespace API.Data .Where(s => libraries.Contains(s.LibraryId) && s.Name == name) .CountAsync() > 1; } - + public Series GetSeriesByName(string name) { return _context.Series.SingleOrDefault(x => x.Name == name); } - + public async Task> GetSeriesForLibraryIdAsync(int libraryId) { return await _context.Series @@ -73,7 +75,7 @@ namespace API.Data .OrderBy(s => s.SortName) .ToListAsync(); } - + public async Task> GetSeriesDtoForLibraryIdAsync(int libraryId, int userId, UserParams userParams) { var query = _context.Series @@ -84,12 +86,12 @@ namespace API.Data return await PagedList.CreateAsync(query, userParams.PageNumber, userParams.PageSize); } - + public async Task> SearchSeries(int[] libraryIds, string searchQuery) { return await _context.Series .Where(s => libraryIds.Contains(s.LibraryId)) - .Where(s => EF.Functions.Like(s.Name, $"%{searchQuery}%") + .Where(s => EF.Functions.Like(s.Name, $"%{searchQuery}%") || EF.Functions.Like(s.OriginalName, $"%{searchQuery}%") || EF.Functions.Like(s.LocalizedName, $"%{searchQuery}%")) .Include(s => s.Library) @@ -108,12 +110,23 @@ namespace API.Data .ProjectTo(_mapper.ConfigurationProvider) .AsNoTracking() .ToListAsync(); - + await AddVolumeModifiers(userId, volumes); + SortSpecialChapters(volumes); + + return volumes; } + private void SortSpecialChapters(IEnumerable volumes) + { + foreach (var v in volumes.Where(vdto => vdto.Number == 0)) + { + v.Chapters = v.Chapters.OrderBy(x => x.Range, _naturalSortComparer).ToList(); + } + } + public async Task> GetVolumes(int seriesId) { @@ -133,7 +146,7 @@ namespace API.Data var seriesList = new List() {series}; await AddSeriesModifiers(userId, seriesList); - + return seriesList[0]; } @@ -152,7 +165,7 @@ namespace API.Data .AsNoTracking() .ProjectTo(_mapper.ConfigurationProvider) .SingleAsync(); - + } public async Task GetVolumeDtoAsync(int volumeId, int userId) @@ -163,7 +176,7 @@ namespace API.Data .ThenInclude(c => c.Files) .ProjectTo(_mapper.ConfigurationProvider) .SingleAsync(vol => vol.Id == volumeId); - + var volumeList = new List() {volume}; await AddVolumeModifiers(userId, volumeList); @@ -186,7 +199,7 @@ namespace API.Data { var series = await _context.Series.Where(s => s.Id == seriesId).SingleOrDefaultAsync(); _context.Series.Remove(series); - + return await _context.SaveChangesAsync() > 0; } @@ -212,7 +225,7 @@ namespace API.Data .Include(s => s.Volumes) .ThenInclude(v => v.Chapters) .ToListAsync(); - + IList chapterIds = new List(); foreach (var s in series) { @@ -266,7 +279,7 @@ namespace API.Data .SingleOrDefaultAsync(); } - private async Task AddVolumeModifiers(int userId, List volumes) + private async Task AddVolumeModifiers(int userId, IReadOnlyCollection volumes) { var userProgress = await _context.AppUserProgresses .Where(p => p.AppUserId == userId && volumes.Select(s => s.Id).Contains(p.VolumeId)) @@ -279,7 +292,7 @@ namespace API.Data { c.PagesRead = userProgress.Where(p => p.ChapterId == c.Id).Sum(p => p.PagesRead); } - + v.PagesRead = userProgress.Where(p => p.VolumeId == v.Id).Sum(p => p.PagesRead); } } @@ -311,7 +324,7 @@ namespace API.Data return await PagedList.CreateAsync(allQuery, userParams.PageNumber, userParams.PageSize); } - + var query = _context.Series .Where(s => s.LibraryId == libraryId) .AsNoTracking() @@ -356,7 +369,7 @@ namespace API.Data { series = series.Where(s => s.AppUserId == userId && s.PagesRead > 0 - && s.PagesRead < s.Series.Pages + && s.PagesRead < s.Series.Pages && s.Series.LibraryId == libraryId); } var retSeries = await series @@ -365,7 +378,7 @@ namespace API.Data .ProjectTo(_mapper.ConfigurationProvider) .AsNoTracking() .ToListAsync(); - + return retSeries.DistinctBy(s => s.Name).Take(limit); } @@ -386,7 +399,7 @@ namespace API.Data .AsNoTracking() .ToListAsync(); } - + return metadataDto; } @@ -398,7 +411,7 @@ namespace API.Data .AsNoTracking() .Select(library => library.Id) .ToList(); - + var query = _context.CollectionTag .Where(s => s.Id == collectionId) .Include(c => c.SeriesMetadatas) @@ -423,4 +436,4 @@ namespace API.Data .ToListAsync(); } } -} \ No newline at end of file +} diff --git a/API/Extensions/SeriesExtensions.cs b/API/Extensions/SeriesExtensions.cs index cedeb3905..17698db39 100644 --- a/API/Extensions/SeriesExtensions.cs +++ b/API/Extensions/SeriesExtensions.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Linq; using API.Entities; +using API.Entities.Enums; using API.Parser; -using API.Services; using API.Services.Tasks.Scanner; namespace API.Extensions diff --git a/API/Parser/Parser.cs b/API/Parser/Parser.cs index 9c6fccbe9..a50e6138d 100644 --- a/API/Parser/Parser.cs +++ b/API/Parser/Parser.cs @@ -498,6 +498,12 @@ namespace API.Parser ret.Series = CleanTitle(fileName); } + // Pdfs may have .pdf in the series name, remove that + if (IsPdf(fileName) && ret.Series.ToLower().EndsWith(".pdf")) + { + ret.Series = ret.Series.Substring(0, ret.Series.Length - ".pdf".Length); + } + return ret.Series == string.Empty ? null : ret; } diff --git a/API/Services/CacheService.cs b/API/Services/CacheService.cs index 39c9e963b..174419090 100644 --- a/API/Services/CacheService.cs +++ b/API/Services/CacheService.cs @@ -60,8 +60,15 @@ namespace API.Services if (files.Count > 0 && files[0].Format == MangaFormat.Image) { DirectoryService.ExistOrCreate(extractPath); - var pattern = (files.Count == 1) ? (@"\" + Path.GetExtension(files[0].FilePath)) : Parser.Parser.ImageFileExtensions; - _directoryService.CopyDirectoryToDirectory(Path.GetDirectoryName(files[0].FilePath), extractPath, pattern); + if (files.Count == 1) + { + _directoryService.CopyFileToDirectory(files[0].FilePath, extractPath); + } + else + { + _directoryService.CopyDirectoryToDirectory(Path.GetDirectoryName(files[0].FilePath), extractPath, Parser.Parser.ImageFileExtensions); + } + extractDi.Flatten(); return chapter; } diff --git a/API/Services/MetadataService.cs b/API/Services/MetadataService.cs index 3be35cd86..7b414afec 100644 --- a/API/Services/MetadataService.cs +++ b/API/Services/MetadataService.cs @@ -20,19 +20,17 @@ namespace API.Services private readonly ILogger _logger; private readonly IArchiveService _archiveService; private readonly IBookService _bookService; - private readonly IDirectoryService _directoryService; private readonly IImageService _imageService; private readonly ChapterSortComparer _chapterSortComparer = new ChapterSortComparer(); public static readonly int ThumbnailWidth = 320; // 153w x 230h public MetadataService(IUnitOfWork unitOfWork, ILogger logger, - IArchiveService archiveService, IBookService bookService, IDirectoryService directoryService, IImageService imageService) + IArchiveService archiveService, IBookService bookService, IImageService imageService) { _unitOfWork = unitOfWork; _logger = logger; _archiveService = archiveService; _bookService = bookService; - _directoryService = directoryService; _imageService = imageService; } @@ -71,25 +69,24 @@ namespace API.Services public void UpdateMetadata(Volume volume, bool forceUpdate) { - if (volume != null && ShouldFindCoverImage(volume.CoverImage, forceUpdate)) - { - volume.Chapters ??= new List(); - var firstChapter = volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).FirstOrDefault(); + if (volume == null || !ShouldFindCoverImage(volume.CoverImage, forceUpdate)) return; - // Skip calculating Cover Image (I/O) if the chapter already has it set - if (firstChapter == null || ShouldFindCoverImage(firstChapter.CoverImage)) + volume.Chapters ??= new List(); + var firstChapter = volume.Chapters.OrderBy(x => double.Parse(x.Number), _chapterSortComparer).FirstOrDefault(); + + // Skip calculating Cover Image (I/O) if the chapter already has it set + if (firstChapter == null || ShouldFindCoverImage(firstChapter.CoverImage, forceUpdate)) + { + var firstFile = firstChapter?.Files.OrderBy(x => x.Chapter).FirstOrDefault(); + if (firstFile != null && !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified)) { - var firstFile = firstChapter?.Files.OrderBy(x => x.Chapter).FirstOrDefault(); - if (firstFile != null && !new FileInfo(firstFile.FilePath).IsLastWriteLessThan(firstFile.LastModified)) - { - volume.CoverImage = GetCoverImage(firstFile); - } - } - else - { - volume.CoverImage = firstChapter.CoverImage; + volume.CoverImage = GetCoverImage(firstFile); } } + else + { + volume.CoverImage = firstChapter.CoverImage; + } } public void UpdateMetadata(Series series, bool forceUpdate) diff --git a/API/Services/Tasks/Scanner/ParseScannedFiles.cs b/API/Services/Tasks/Scanner/ParseScannedFiles.cs index c646d1c60..9be88dfde 100644 --- a/API/Services/Tasks/Scanner/ParseScannedFiles.cs +++ b/API/Services/Tasks/Scanner/ParseScannedFiles.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using API.Entities; using API.Entities.Enums; using API.Interfaces.Services; using API.Parser; @@ -38,6 +39,20 @@ namespace API.Services.Tasks.Scanner _scannedSeries = new ConcurrentDictionary>(); } + public static IList GetInfosByName(Dictionary> parsedSeries, Series series) + { + var existingKey = parsedSeries.Keys.FirstOrDefault(ps => + ps.Format == series.Format && ps.NormalizedName == Parser.Parser.Normalize(series.OriginalName)); + existingKey ??= new ParsedSeries() + { + Format = series.Format, + Name = series.OriginalName, + NormalizedName = Parser.Parser.Normalize(series.OriginalName) + }; + + return parsedSeries[existingKey]; + } + /// /// Processes files found during a library scan. /// Populates a collection of for DB updates later. @@ -144,7 +159,7 @@ namespace API.Services.Tasks.Scanner { var sw = Stopwatch.StartNew(); totalFiles = 0; - var searchPattern = GetLibrarySearchPattern(libraryType); + var searchPattern = GetLibrarySearchPattern(); foreach (var folderPath in folders) { try @@ -174,12 +189,7 @@ namespace API.Services.Tasks.Scanner return SeriesWithInfos(); } - /// - /// Given the Library Type, returns the regex pattern that restricts which files types will be found during a file scan. - /// - /// - /// - private static string GetLibrarySearchPattern(LibraryType libraryType) + private static string GetLibrarySearchPattern() { return Parser.Parser.SupportedExtensions; } diff --git a/API/Services/Tasks/ScannerService.cs b/API/Services/Tasks/ScannerService.cs index 763d3e712..a8caf68f9 100644 --- a/API/Services/Tasks/ScannerService.cs +++ b/API/Services/Tasks/ScannerService.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -27,7 +26,7 @@ namespace API.Services.Tasks private readonly IArchiveService _archiveService; private readonly IMetadataService _metadataService; private readonly IBookService _bookService; - private readonly NaturalSortComparer _naturalSort; + private readonly NaturalSortComparer _naturalSort = new (); public ScannerService(IUnitOfWork unitOfWork, ILogger logger, IArchiveService archiveService, IMetadataService metadataService, IBookService bookService) @@ -37,7 +36,6 @@ namespace API.Services.Tasks _archiveService = archiveService; _metadataService = metadataService; _bookService = bookService; - _naturalSort = new NaturalSortComparer(); } [DisableConcurrentExecution(timeoutInSeconds: 360)] @@ -200,10 +198,16 @@ namespace API.Services.Tasks _logger.LogInformation("Removed {RemoveMissingSeries} series that are no longer on disk:", removeCount); foreach (var s in missingSeries) { - _logger.LogDebug("Removed {SeriesName}", s.Name); + _logger.LogDebug("Removed {SeriesName} ({Format})", s.Name, s.Format); } } + if (library.Series.Count == 0) + { + _logger.LogDebug("Removed all Series, returning without checking reset of files scanned"); + return; + } + // Add new series that have parsedInfos foreach (var (key, infos) in parsedSeries) @@ -218,11 +222,11 @@ namespace API.Services.Tasks } catch (Exception e) { - _logger.LogCritical(e, "There are multiple series that map to normalized key {Key}. You can manually delete the entity via UI and rescan to fix it", key); + _logger.LogCritical(e, "There are multiple series that map to normalized key {Key}. You can manually delete the entity via UI and rescan to fix it", key.NormalizedName); var duplicateSeries = library.Series.Where(s => s.NormalizedName == key.NormalizedName || Parser.Parser.Normalize(s.OriginalName) == key.NormalizedName).ToList(); foreach (var series in duplicateSeries) { - _logger.LogCritical("{Key} maps with {Series}", key, series.OriginalName); + _logger.LogCritical("{Key} maps with {Series}", key.Name, series.OriginalName); } continue; @@ -247,7 +251,7 @@ namespace API.Services.Tasks try { _logger.LogInformation("Processing series {SeriesName}", series.OriginalName); - UpdateVolumes(series, GetInfosByName(parsedSeries, series).ToArray()); + UpdateVolumes(series, ParseScannedFiles.GetInfosByName(parsedSeries, series).ToArray()); series.Pages = series.Volumes.Sum(v => v.Pages); } catch (Exception ex) @@ -257,25 +261,15 @@ namespace API.Services.Tasks }); } - private static IList GetInfosByName(Dictionary> parsedSeries, Series series) - { - // TODO: Move this into a common place - var existingKey = parsedSeries.Keys.FirstOrDefault(ps => - ps.Format == series.Format && ps.NormalizedName == Parser.Parser.Normalize(series.OriginalName)); - existingKey ??= new ParsedSeries() - { - Format = series.Format, - Name = series.OriginalName, - NormalizedName = Parser.Parser.Normalize(series.OriginalName) - }; - - return parsedSeries[existingKey]; - } - public IEnumerable FindSeriesNotOnDisk(ICollection existingSeries, Dictionary> parsedSeries) { - var foundSeries = parsedSeries.Select(s => s.Key.Name).ToList(); - return existingSeries.Where(es => !es.NameInList(foundSeries)); + // It is safe to check only first since Parser ensures that a Series only has one type + var format = MangaFormat.Unknown; + var firstPs = parsedSeries.Keys.DistinctBy(ps => ps.Format).FirstOrDefault(); + if (firstPs != null) format = firstPs.Format; + + var foundSeries = parsedSeries.Select(s => s.Key.Name).ToList(); + return existingSeries.Where(es => !es.NameInList(foundSeries) || es.Format != format); } /// @@ -293,7 +287,7 @@ namespace API.Services.Tasks existingSeries = existingSeries.Where( s => !missingList.Exists( - m => m.NormalizedName.Equals(s.NormalizedName))).ToList(); + m => m.NormalizedName.Equals(s.NormalizedName) && m.Format == s.Format)).ToList(); removeCount = existingCount - existingSeries.Count; diff --git a/Kavita.Common/KavitaException.cs b/Kavita.Common/KavitaException.cs index e91525f7e..ee4efcb5a 100644 --- a/Kavita.Common/KavitaException.cs +++ b/Kavita.Common/KavitaException.cs @@ -18,4 +18,4 @@ namespace Kavita.Common } } -} \ No newline at end of file +} diff --git a/UI/Web/src/app/_guards/auth.guard.ts b/UI/Web/src/app/_guards/auth.guard.ts index bf3d5d576..c35e8ff87 100644 --- a/UI/Web/src/app/_guards/auth.guard.ts +++ b/UI/Web/src/app/_guards/auth.guard.ts @@ -21,7 +21,7 @@ export class AuthGuard implements CanActivate { } this.toastr.error('You are not authorized to view this page.'); localStorage.setItem(this.urlKey, window.location.pathname); - this.router.navigateByUrl('/home'); + this.router.navigateByUrl('/libraries'); return false; }) ); diff --git a/UI/Web/src/app/admin/dashboard/dashboard.component.ts b/UI/Web/src/app/admin/dashboard/dashboard.component.ts index 48bced7d2..756ae605a 100644 --- a/UI/Web/src/app/admin/dashboard/dashboard.component.ts +++ b/UI/Web/src/app/admin/dashboard/dashboard.component.ts @@ -3,6 +3,7 @@ import { ActivatedRoute } from '@angular/router'; import { ToastrService } from 'ngx-toastr'; import { ServerService } from 'src/app/_services/server.service'; import { saveAs } from 'file-saver'; +import { Title } from '@angular/platform-browser'; @@ -22,7 +23,7 @@ export class DashboardComponent implements OnInit { counter = this.tabs.length + 1; active = this.tabs[0]; - constructor(public route: ActivatedRoute, private serverService: ServerService, private toastr: ToastrService) { + constructor(public route: ActivatedRoute, private serverService: ServerService, private toastr: ToastrService, private titleService: Title) { this.route.fragment.subscribe(frag => { const tab = this.tabs.filter(item => item.fragment === frag); if (tab.length > 0) { @@ -34,7 +35,9 @@ export class DashboardComponent implements OnInit { } - ngOnInit() {} + ngOnInit() { + this.titleService.setTitle('Kavita - Admin Dashboard'); + } restartServer() { this.serverService.restart().subscribe(() => { diff --git a/UI/Web/src/app/all-collections/all-collections.component.ts b/UI/Web/src/app/all-collections/all-collections.component.ts index 6a37eb3d3..ddd4b6407 100644 --- a/UI/Web/src/app/all-collections/all-collections.component.ts +++ b/UI/Web/src/app/all-collections/all-collections.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { ToastrService } from 'ngx-toastr'; @@ -28,7 +29,9 @@ export class AllCollectionsComponent implements OnInit { seriesPagination!: Pagination; collectionTagActions: ActionItem[] = []; - constructor(private collectionService: CollectionTagService, private router: Router, private route: ActivatedRoute, private seriesService: SeriesService, private toastr: ToastrService, private actionFactoryService: ActionFactoryService, private modalService: NgbModal) { + constructor(private collectionService: CollectionTagService, private router: Router, private route: ActivatedRoute, + private seriesService: SeriesService, private toastr: ToastrService, private actionFactoryService: ActionFactoryService, + private modalService: NgbModal, private titleService: Title) { this.router.routeReuseStrategy.shouldReuseRoute = () => false; const routeId = this.route.snapshot.paramMap.get('id'); @@ -43,6 +46,7 @@ export class AllCollectionsComponent implements OnInit { return; } this.collectionTagName = tags.filter(item => item.id === this.collectionTagId)[0].title; + this.titleService.setTitle('Kavita - ' + this.collectionTagName + ' Collection'); }); } } diff --git a/UI/Web/src/app/home/home.component.ts b/UI/Web/src/app/home/home.component.ts index ff9c4f354..7c474cf82 100644 --- a/UI/Web/src/app/home/home.component.ts +++ b/UI/Web/src/app/home/home.component.ts @@ -4,6 +4,7 @@ import { Router } from '@angular/router'; import { take } from 'rxjs/operators'; import { MemberService } from '../_services/member.service'; import { AccountService } from '../_services/account.service'; +import { Title } from '@angular/platform-browser'; @Component({ selector: 'app-home', @@ -19,7 +20,7 @@ export class HomeComponent implements OnInit { password: new FormControl('', [Validators.required]) }); - constructor(public accountService: AccountService, private memberService: MemberService, private router: Router) { + constructor(public accountService: AccountService, private memberService: MemberService, private router: Router, private titleService: Title) { } ngOnInit(): void { @@ -31,6 +32,7 @@ export class HomeComponent implements OnInit { return; } + this.titleService.setTitle('Kavita'); this.accountService.currentUser$.pipe(take(1)).subscribe(user => { if (user) { this.router.navigateByUrl('/library'); diff --git a/UI/Web/src/app/library-detail/library-detail.component.ts b/UI/Web/src/app/library-detail/library-detail.component.ts index 616afb110..a933f38dd 100644 --- a/UI/Web/src/app/library-detail/library-detail.component.ts +++ b/UI/Web/src/app/library-detail/library-detail.component.ts @@ -28,7 +28,7 @@ export class LibraryDetailComponent implements OnInit { private libraryService: LibraryService, private titleService: Title, private actionFactoryService: ActionFactoryService, private actionService: ActionService) { const routeId = this.route.snapshot.paramMap.get('id'); if (routeId === null) { - this.router.navigateByUrl('/home'); + this.router.navigateByUrl('/libraries'); return; } this.router.routeReuseStrategy.shouldReuseRoute = () => false; diff --git a/UI/Web/src/app/library/library.component.ts b/UI/Web/src/app/library/library.component.ts index c7f852e2f..4d613b9b6 100644 --- a/UI/Web/src/app/library/library.component.ts +++ b/UI/Web/src/app/library/library.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; import { Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { take } from 'rxjs/operators'; @@ -34,9 +35,13 @@ export class LibraryComponent implements OnInit { seriesTrackBy = (index: number, item: any) => `${item.name}_${item.pagesRead}`; - constructor(public accountService: AccountService, private libraryService: LibraryService, private seriesService: SeriesService, private actionFactoryService: ActionFactoryService, private collectionService: CollectionTagService, private router: Router, private modalService: NgbModal) { } + constructor(public accountService: AccountService, private libraryService: LibraryService, + private seriesService: SeriesService, private actionFactoryService: ActionFactoryService, + private collectionService: CollectionTagService, private router: Router, + private modalService: NgbModal, private titleService: Title) { } ngOnInit(): void { + this.titleService.setTitle('Kavita - Dashboard'); this.isLoading = true; this.accountService.currentUser$.pipe(take(1)).subscribe(user => { this.user = user; diff --git a/UI/Web/src/app/manga-reader/manga-reader.component.ts b/UI/Web/src/app/manga-reader/manga-reader.component.ts index 9009b903a..81395d811 100644 --- a/UI/Web/src/app/manga-reader/manga-reader.component.ts +++ b/UI/Web/src/app/manga-reader/manga-reader.component.ts @@ -245,7 +245,7 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { const chapterId = this.route.snapshot.paramMap.get('chapterId'); if (libraryId === null || seriesId === null || chapterId === null) { - this.router.navigateByUrl('/home'); + this.router.navigateByUrl('/libraries'); return; } diff --git a/UI/Web/src/app/nav-header/nav-header.component.ts b/UI/Web/src/app/nav-header/nav-header.component.ts index 1163d781e..0323b5bf3 100644 --- a/UI/Web/src/app/nav-header/nav-header.component.ts +++ b/UI/Web/src/app/nav-header/nav-header.component.ts @@ -61,7 +61,7 @@ export class NavHeaderComponent implements OnInit, OnDestroy { logout() { this.accountService.logout(); this.navService.hideNavBar(); - this.router.navigateByUrl('/home'); + this.router.navigateByUrl('/login'); } moveFocus() { diff --git a/UI/Web/src/app/series-detail/series-detail.component.ts b/UI/Web/src/app/series-detail/series-detail.component.ts index fec46f46f..4d07be6bc 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.ts +++ b/UI/Web/src/app/series-detail/series-detail.component.ts @@ -1,14 +1,13 @@ import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal, NgbRatingConfig } from '@ng-bootstrap/ng-bootstrap'; import { ToastrService } from 'ngx-toastr'; -import { forkJoin } from 'rxjs'; import { take } from 'rxjs/operators'; import { ConfirmConfig } from '../shared/confirm-dialog/_models/confirm-config'; import { ConfirmService } from '../shared/confirm.service'; import { CardDetailsModalComponent } from '../shared/_modals/card-details-modal/card-details-modal.component'; import { DownloadService } from '../shared/_services/download.service'; -import { NaturalSortService } from '../shared/_services/natural-sort.service'; import { UtilityService } from '../shared/_services/utility.service'; import { EditSeriesModalComponent } from '../_modals/edit-series-modal/edit-series-modal.component'; import { ReviewSeriesModalComponent } from '../_modals/review-series-modal/review-series-modal.component'; @@ -81,7 +80,7 @@ export class SeriesDetailComponent implements OnInit { public utilityService: UtilityService, private toastr: ToastrService, private accountService: AccountService, public imageService: ImageService, private actionFactoryService: ActionFactoryService, private libraryService: LibraryService, - private confirmService: ConfirmService, private naturalSort: NaturalSortService, + private confirmService: ConfirmService, private titleService: Title, private downloadService: DownloadService, private actionService: ActionService) { ratingConfig.max = 5; this.router.routeReuseStrategy.shouldReuseRoute = () => false; @@ -97,7 +96,7 @@ export class SeriesDetailComponent implements OnInit { const routeId = this.route.snapshot.paramMap.get('seriesId'); const libraryId = this.route.snapshot.paramMap.get('libraryId'); if (routeId === null || libraryId == null) { - this.router.navigateByUrl('/home'); + this.router.navigateByUrl('/libraries'); return; } @@ -227,6 +226,8 @@ export class SeriesDetailComponent implements OnInit { this.seriesService.getSeries(seriesId).subscribe(series => { this.series = series; this.createHTML(); + + this.titleService.setTitle('Kavita - ' + this.series.name + ' Details'); this.seriesService.getVolumes(this.series.id).subscribe(volumes => { @@ -240,7 +241,6 @@ export class SeriesDetailComponent implements OnInit { this.specials = vol0.map(v => v.chapters || []) .flat() .filter(c => c.isSpecial || isNaN(parseInt(c.range, 10))) - .sort((a, b) => this.naturalSort.compare(a.range, b.range, true)) .map(c => { c.title = this.utilityService.cleanSpecialTitle(c.title); c.range = this.utilityService.cleanSpecialTitle(c.range); @@ -255,6 +255,8 @@ export class SeriesDetailComponent implements OnInit { this.isLoading = false; }); + }, err => { + this.router.navigateByUrl('/libraries'); }); } diff --git a/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts index 4db350a9a..000b0358d 100644 --- a/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts +++ b/UI/Web/src/app/shared/_modals/card-details-modal/card-details-modal.component.ts @@ -5,7 +5,6 @@ import { MangaFile } from 'src/app/_models/manga-file'; import { MangaFormat } from 'src/app/_models/manga-format'; import { Volume } from 'src/app/_models/volume'; import { ImageService } from 'src/app/_services/image.service'; -import { NaturalSortService } from '../../_services/natural-sort.service'; import { UtilityService } from '../../_services/utility.service'; @@ -27,7 +26,7 @@ export class CardDetailsModalComponent implements OnInit { formatKeys = Object.keys(MangaFormat); constructor(private modalService: NgbModal, public modal: NgbActiveModal, public utilityService: UtilityService, - public imageService: ImageService, public naturalSort: NaturalSortService) { } + public imageService: ImageService) { } ngOnInit(): void { this.isChapter = this.isObjectChapter(this.data); diff --git a/UI/Web/src/app/shared/_services/natural-sort.service.ts b/UI/Web/src/app/shared/_services/natural-sort.service.ts index 4c9ddd180..5f9d3b776 100644 --- a/UI/Web/src/app/shared/_services/natural-sort.service.ts +++ b/UI/Web/src/app/shared/_services/natural-sort.service.ts @@ -2,6 +2,7 @@ import { Injectable, OnDestroy } from '@angular/core'; /** * Soley repsonsible for performing a "natural" sort. This is the UI counterpart to the BE NaturalSortComparer. + * Note: This does not work the same. Better to have the Backend perform the sort before sending to UI. */ @Injectable({ providedIn: 'root', diff --git a/UI/Web/src/app/user-preferences/user-preferences.component.ts b/UI/Web/src/app/user-preferences/user-preferences.component.ts index e9c694f89..9254967d5 100644 --- a/UI/Web/src/app/user-preferences/user-preferences.component.ts +++ b/UI/Web/src/app/user-preferences/user-preferences.component.ts @@ -8,6 +8,7 @@ import { AccountService } from '../_services/account.service'; import { Options } from '@angular-slider/ngx-slider'; import { BookService } from '../book-reader/book.service'; import { NavService } from '../_services/nav.service'; +import { Title } from '@angular/platform-browser'; @Component({ selector: 'app-user-preferences', @@ -47,11 +48,12 @@ export class UserPreferencesComponent implements OnInit, OnDestroy { }; fontFamilies: Array = []; - constructor(private accountService: AccountService, private toastr: ToastrService, private bookService: BookService, private navService: NavService) { + constructor(private accountService: AccountService, private toastr: ToastrService, private bookService: BookService, private navService: NavService, private titleService: Title) { this.fontFamilies = this.bookService.getFontFamilies(); } ngOnInit(): void { + this.titleService.setTitle('Kavita - User Preferences'); this.accountService.currentUser$.pipe(take(1)).subscribe((user: User) => { if (user) { this.user = user; From 78ad01f5ae9e5703f427ffede5884acefd088652 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Fri, 23 Jul 2021 21:52:57 -0500 Subject: [PATCH 19/23] Fixed a bug where a new lirary scan would break due to scan series not properly filtering out parsed series (#423) --- API/Extensions/SeriesExtensions.cs | 3 ++- API/Services/Tasks/ScannerService.cs | 9 +-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/API/Extensions/SeriesExtensions.cs b/API/Extensions/SeriesExtensions.cs index 17698db39..7ff615b00 100644 --- a/API/Extensions/SeriesExtensions.cs +++ b/API/Extensions/SeriesExtensions.cs @@ -43,7 +43,8 @@ namespace API.Extensions { if (info == null) return false; return Parser.Parser.Normalize(info.Series) == series.NormalizedName || Parser.Parser.Normalize(info.Series) == Parser.Parser.Normalize(series.Name) - || info.Series == series.Name || info.Series == series.LocalizedName || info.Series == series.OriginalName || Parser.Parser.Normalize(info.Series) == Parser.Parser.Normalize(series.OriginalName); + || info.Series == series.Name || info.Series == series.LocalizedName || info.Series == series.OriginalName + || Parser.Parser.Normalize(info.Series) == Parser.Parser.Normalize(series.OriginalName); } } } diff --git a/API/Services/Tasks/ScannerService.cs b/API/Services/Tasks/ScannerService.cs index a8caf68f9..a4d683db3 100644 --- a/API/Services/Tasks/ScannerService.cs +++ b/API/Services/Tasks/ScannerService.cs @@ -55,7 +55,7 @@ namespace API.Services.Tasks // Hence we clear out anything but what we selected for var firstSeries = library.Series.FirstOrDefault(); var keys = parsedSeries.Keys; - foreach (var key in keys.Where(key => !firstSeries.NameInParserInfo(parsedSeries[key].FirstOrDefault()))) + foreach (var key in keys.Where(key => !firstSeries.NameInParserInfo(parsedSeries[key].FirstOrDefault()) || firstSeries?.Format != key.Format)) { parsedSeries.Remove(key); } @@ -202,13 +202,6 @@ namespace API.Services.Tasks } } - if (library.Series.Count == 0) - { - _logger.LogDebug("Removed all Series, returning without checking reset of files scanned"); - return; - } - - // Add new series that have parsedInfos foreach (var (key, infos) in parsedSeries) { From 81dfd63250f7bbc9c164fe389df99b638a682b27 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 24 Jul 2021 16:17:13 -0500 Subject: [PATCH 20/23] Feature/performance pdf (#426) # Added - Added: Added series format information to the search typeahead to help identify duplicate series in libraries # Fixed - Fixed: Fixed accent color not looking well on light theme - Fixed: Attempted to fix the memory issues with PDF reading on Docker. Uses a Memory Pool for streams and removes a bitmap operation for fixing books with transparent backgrounds (#424) # Changed - Changed: Refactored download logs to use the same download code as rest of Kavita # Dev stuff - Added timeout for Regex's to make sure during matching, malicious filenames doesn't crash user system - Refactored a missing GetCoverImage to use Series Format rather than old Library Type ================================================== * Added Timeout for Regex matching to ensure malicious filenames don't crash system * Refactored GetCoverImage to use series format rather than library type * Refactored download logs to use the download service * Fixed accent color not looking well on light theme * Refactored series format into dedicated component and added to search results * Switch to using MemoryManager for Streams to attempt to minimize GC pressure and reduced bitmap manipulation for transparency hack. --- API/DTOs/SearchResultDto.cs | 7 +- API/Data/SeriesRepository.cs | 1 - API/Extensions/SeriesExtensions.cs | 1 - API/Extensions/VolumeListExtensions.cs | 7 +- API/Parser/Parser.cs | 279 ++++++++++++------ API/Services/ArchiveService.cs | 9 +- API/Services/BookService.cs | 20 +- API/Services/MetadataService.cs | 2 +- UI/Web/src/app/_models/search-result.ts | 3 + UI/Web/src/app/_services/server.service.ts | 4 - .../admin/dashboard/dashboard.component.ts | 9 +- .../manage-settings.component.scss | 7 +- .../app/nav-header/nav-header.component.html | 1 + .../app/nav-header/nav-header.component.ts | 1 + .../series-detail.component.html | 2 +- .../app/shared/_services/download.service.ts | 10 +- .../series-format.component.html | 4 + .../series-format.component.scss | 0 .../series-format/series-format.component.ts | 23 ++ UI/Web/src/app/shared/shared.module.ts | 7 +- UI/Web/src/assets/themes/dark.scss | 6 + 21 files changed, 267 insertions(+), 136 deletions(-) create mode 100644 UI/Web/src/app/shared/series-format/series-format.component.html create mode 100644 UI/Web/src/app/shared/series-format/series-format.component.scss create mode 100644 UI/Web/src/app/shared/series-format/series-format.component.ts diff --git a/API/DTOs/SearchResultDto.cs b/API/DTOs/SearchResultDto.cs index 001883b23..6d7ba9f58 100644 --- a/API/DTOs/SearchResultDto.cs +++ b/API/DTOs/SearchResultDto.cs @@ -1,4 +1,6 @@ -namespace API.DTOs +using API.Entities.Enums; + +namespace API.DTOs { public class SearchResultDto { @@ -7,9 +9,10 @@ public string OriginalName { get; init; } public string SortName { get; init; } public string LocalizedName { get; init; } + public MangaFormat Format { get; init; } // Grouping information public string LibraryName { get; set; } public int LibraryId { get; set; } } -} \ No newline at end of file +} diff --git a/API/Data/SeriesRepository.cs b/API/Data/SeriesRepository.cs index ad4b93e6b..098e0d97d 100644 --- a/API/Data/SeriesRepository.cs +++ b/API/Data/SeriesRepository.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using API.Comparators; diff --git a/API/Extensions/SeriesExtensions.cs b/API/Extensions/SeriesExtensions.cs index 7ff615b00..30a7b1b5b 100644 --- a/API/Extensions/SeriesExtensions.cs +++ b/API/Extensions/SeriesExtensions.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Linq; using API.Entities; -using API.Entities.Enums; using API.Parser; using API.Services.Tasks.Scanner; diff --git a/API/Extensions/VolumeListExtensions.cs b/API/Extensions/VolumeListExtensions.cs index 3647cc21c..4752cce5b 100644 --- a/API/Extensions/VolumeListExtensions.cs +++ b/API/Extensions/VolumeListExtensions.cs @@ -19,12 +19,11 @@ namespace API.Extensions /// If there are both specials and non-specials, then the first non-special will be returned. /// /// - /// + /// /// - public static Volume GetCoverImage(this IList volumes, LibraryType libraryType) + public static Volume GetCoverImage(this IList volumes, MangaFormat seriesFormat) { - // TODO: Refactor this to use MangaFormat Epub instead - if (libraryType == LibraryType.Book) + if (seriesFormat is MangaFormat.Epub or MangaFormat.Pdf) { return volumes.OrderBy(x => x.Number).FirstOrDefault(); } diff --git a/API/Parser/Parser.cs b/API/Parser/Parser.cs index a50e6138d..c0c1b2c78 100644 --- a/API/Parser/Parser.cs +++ b/API/Parser/Parser.cs @@ -11,24 +11,38 @@ namespace API.Parser { public const string DefaultChapter = "0"; public const string DefaultVolume = "0"; + private static readonly TimeSpan RegexTimeout = TimeSpan.FromMilliseconds(250); public const string ImageFileExtensions = @"^(\.png|\.jpeg|\.jpg)"; public const string ArchiveFileExtensions = @"\.cbz|\.zip|\.rar|\.cbr|\.tar.gz|\.7zip|\.7z|\.cb7|\.cbt"; public const string BookFileExtensions = @"\.epub|\.pdf"; - public const string MangaComicFileExtensions = ArchiveFileExtensions + "|" + ImageFileExtensions + @"|\.pdf"; public const string SupportedExtensions = ArchiveFileExtensions + "|" + ImageFileExtensions + "|" + BookFileExtensions; - public static readonly Regex FontSrcUrlRegex = new Regex(@"(src:url\(.{1})" + "([^\"']*)" + @"(.{1}\))", RegexOptions.IgnoreCase | RegexOptions.Compiled); - public static readonly Regex CssImportUrlRegex = new Regex("(@import\\s[\"|'])(?[\\w\\d/\\._-]+)([\"|'];?)", RegexOptions.IgnoreCase | RegexOptions.Compiled); + public static readonly Regex FontSrcUrlRegex = new Regex(@"(src:url\(.{1})" + "([^\"']*)" + @"(.{1}\))", + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout); + public static readonly Regex CssImportUrlRegex = new Regex("(@import\\s[\"|'])(?[\\w\\d/\\._-]+)([\"|'];?)", + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout); private static readonly string XmlRegexExtensions = @"\.xml"; - private static readonly Regex ImageRegex = new Regex(ImageFileExtensions, RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex ArchiveFileRegex = new Regex(ArchiveFileExtensions, RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex XmlRegex = new Regex(XmlRegexExtensions, RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex BookFileRegex = new Regex(BookFileExtensions, RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex CoverImageRegex = new Regex(@"(?.*)(\b|_)v(?\d+-?\d+)( |_)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // NEEDLESS_Vol.4_-Simeon_6_v2[SugoiSugoi].rar new Regex( @"(?.*)(\b|_)(?!\[)(vol\.?)(?\d+(-\d+)?)(?!\])", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Historys Strongest Disciple Kenichi_v11_c90-98.zip or Dance in the Vampire Bund v16-17 new Regex( @"(?.*)(\b|_)(?!\[)v(?\d+(-\d+)?)(?!\])", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Kodomo no Jikan vol. 10 new Regex( @"(?.*)(\b|_)(vol\.? ?)(?\d+(-\d+)?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Killing Bites Vol. 0001 Ch. 0001 - Galactica Scanlations (gb) new Regex( @"(vol\.? ?)(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Tonikaku Cawaii [Volume 11].cbz new Regex( @"(volume )(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Tower Of God S01 014 (CBT) (digital).cbz new Regex( @"(?.*)(\b|_|)(S(?\d+))", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] MangaSeriesRegex = new[] @@ -68,130 +89,161 @@ namespace API.Parser // Grand Blue Dreaming - SP02 new Regex( @"(?.*)(\b|_|-|\s)(?:sp)\d", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // [SugoiSugoi]_NEEDLESS_Vol.2_-_Disk_The_Informant_5_[ENG].rar, Yuusha Ga Shinda! - Vol.tbd Chapter 27.001 V2 Infection ①.cbz new Regex( @"^(?.*)( |_)Vol\.?(\d+|tbd)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Ichiban_Ushiro_no_Daimaou_v04_ch34_[VISCANS].zip, VanDread-v01-c01.zip new Regex( @"(?.*)(\b|_)v(?\d+-?\d*)(\s|_|-)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Gokukoku no Brynhildr - c001-008 (v01) [TrinityBAKumA], Black Bullet - v4 c17 [batoto] new Regex( @"(?.*)( - )(?:v|vo|c)\d", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Kedouin Makoto - Corpse Party Musume, Chapter 19 [Dametrans].zip new Regex( @"(?.*)(?:, Chapter )(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Mad Chimera World - Volume 005 - Chapter 026.cbz (couldn't figure out how to get Volume negative lookaround working on below regex) new Regex( @"(?.*)(\s|_|-)(?:Volume(\s|_|-)+\d+)(\s|_|-)+(?:Chapter)(\s|_|-)(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Please Go Home, Akutsu-San! - Chapter 038.5 - Volume Announcement.cbz new Regex( @"(?.*)(\s|_|-)(?!Vol)(\s|_|-)(?:Chapter)(\s|_|-)(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // [dmntsf.net] One Piece - Digital Colored Comics Vol. 20 Ch. 177 - 30 Million vs 81 Million.cbz new Regex( @"(?.*) (\b|_|-)(vol)\.?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), //Knights of Sidonia c000 (S2 LE BD Omake - BLAME!) [Habanero Scans] new Regex( @"(?.*)(\bc\d+\b)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), //Tonikaku Cawaii [Volume 11], Darling in the FranXX - Volume 01.cbz new Regex( @"(?.*)(?: _|-|\[|\()\s?vol(ume)?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Momo The Blood Taker - Chapter 027 Violent Emotion.cbz, Grand Blue Dreaming - SP02 Extra (2019) (Digital) (danke-Empire).cbz new Regex( @"(?.*)(\b|_|-|\s)(?:(chapter(\b|_|-|\s))|sp)\d", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Historys Strongest Disciple Kenichi_v11_c90-98.zip, Killing Bites Vol. 0001 Ch. 0001 - Galactica Scanlations (gb) new Regex( @"(?.*) (\b|_|-)(v|ch\.?|c)\d+", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), //Ichinensei_ni_Nacchattara_v01_ch01_[Taruby]_v1.1.zip must be before [Suihei Kiki]_Kasumi_Otoko_no_Ko_[Taruby]_v1.1.zip // due to duplicate version identifiers in file. new Regex( @"(?.*)(v|s)\d+(-\d+)?(_|\s)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), //[Suihei Kiki]_Kasumi_Otoko_no_Ko_[Taruby]_v1.1.zip new Regex( @"(?.*)(v|s)\d+(-\d+)?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Hinowa ga CRUSH! 018 (2019) (Digital) (LuCaZ).cbz new Regex( @"(?.*) (?\d+) (?:\(\d{4}\)) ", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Goblin Slayer - Brand New Day 006.5 (2019) (Digital) (danke-Empire) new Regex( @"(?.*) (?\d+(?:.\d+|-\d+)?) \(\d{4}\)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Noblesse - Episode 429 (74 Pages).7z new Regex( @"(?.*)(\s|_)(?:Episode|Ep\.?)(\s|_)(?\d+(?:.\d+|-\d+)?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Akame ga KILL! ZERO (2016-2019) (Digital) (LuCaZ) new Regex( @"(?.*)\(\d", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Tonikaku Kawaii (Ch 59-67) (Ongoing) new Regex( @"(?.*)(\s|_)\((c\s|ch\s|chapter\s)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Black Bullet (This is very loose, keep towards bottom) new Regex( @"(?.*)(_)(v|vo|c|volume)( |_)\d+", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // [Hidoi]_Amaenaideyo_MS_vol01_chp02.rar new Regex( @"(?.*)( |_)(vol\d+)?( |_)(?:Chp\.? ?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Mahoutsukai to Deshi no Futekisetsu na Kankei Chp. 1 new Regex( @"(?.*)( |_)(?:Chp.? ?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Corpse Party -The Anthology- Sachikos game of love Hysteric Birthday 2U Chapter 01 new Regex( @"^(?!Vol)(?.*)( |_)Chapter( |_)(\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Fullmetal Alchemist chapters 101-108.cbz new Regex( @"^(?!vol)(?.*)( |_)(chapters( |_)?)\d+-?\d*", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Umineko no Naku Koro ni - Episode 1 - Legend of the Golden Witch #1 new Regex( @"^(?!Vol\.?)(?.*)( |_|-)(?.*)ch\d+-?\d?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Magi - Ch.252-005.cbz new Regex( @"(?.*)( ?- ?)Ch\.\d+-?\d*", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // [BAA]_Darker_than_Black_Omake-1.zip new Regex( @"^(?!Vol)(?.*)(-)\d+-?\d*", // This catches a lot of stuff ^(?!Vol)(?.*)( |_)(\d+) - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Kodoja #001 (March 2016) new Regex( @"(?.*)(\s|_|-)#", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Baketeriya ch01-05.zip, Akiiro Bousou Biyori - 01.jpg, Beelzebub_172_RHS.zip, Cynthia the Mission 29.rar new Regex( @"^(?!Vol\.?)(?.*)( |_|-)(?.*)( |_|-)(ch?)\d+", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] ComicSeriesRegex = new[] @@ -199,51 +251,63 @@ namespace API.Parser // Invincible Vol 01 Family matters (2005) (Digital) new Regex( @"(?.*)(\b|_)(vol\.?)( |_)(?\d+(-\d+)?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // 04 - Asterix the Gladiator (1964) (Digital-Empire) (WebP by Doc MaKS) new Regex( @"^(?\d+) (- |_)?(?.*(\d{4})?)( |_)(\(|\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // 01 Spider-Man & Wolverine 01.cbr new Regex( @"^(?\d+) (?:- )?(?.*) (\d+)?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Wildcat (1 of 3) new Regex( @"(?.*(\d{4})?)( |_)(?:\((?\d+) of \d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus) new Regex( @"^(?.*)(?: |_)v\d+", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Amazing Man Comics chapter 25 new Regex( @"^(?.*)(?: |_)c(hapter) \d+", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Amazing Man Comics issue #25 new Regex( @"^(?.*)(?: |_)i(ssue) #\d+", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Catwoman - Trail of the Gun 01, Batman & Grendel (1996) 01 - Devil's Bones, Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus) new Regex( @"^(?.*)(?: \d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Robin the Teen Wonder #0 new Regex( @"^(?.*)(?: |_)#\d+", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Scott Pilgrim 02 - Scott Pilgrim vs. The World (2005) new Regex( @"^(?.*)(?: |_)(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // The First Asterix Frieze (WebP by Doc MaKS) new Regex( @"^(?.*)(?: |_)(?!\(\d{4}|\d{4}-\d{2}\))\(", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // MUST BE LAST: Batman & Daredevil - King of New York new Regex( @"^(?.*)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] ComicVolumeRegex = new[] @@ -251,31 +315,38 @@ namespace API.Parser // 04 - Asterix the Gladiator (1964) (Digital-Empire) (WebP by Doc MaKS) new Regex( @"^(?\d+) (- |_)?(?.*(\d{4})?)( |_)(\(|\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // 01 Spider-Man & Wolverine 01.cbr new Regex( @"^(?\d+) (?:- )?(?.*) (\d+)?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Wildcat (1 of 3) new Regex( @"(?.*(\d{4})?)( |_)(?:\((?\d+) of \d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus) new Regex( @"^(?.*)(?: |_)v(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Scott Pilgrim 02 - Scott Pilgrim vs. The World (2005) new Regex( @"^(?.*)(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Catwoman - Trail of the Gun 01, Batman & Grendel (1996) 01 - Devil's Bones, Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus) new Regex( @"^(?.*)(?\d+))", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Robin the Teen Wonder #0 new Regex( @"^(?.*)(?: |_)#(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] ComicChapterRegex = new[] @@ -283,38 +354,46 @@ namespace API.Parser // Batman & Wildcat (1 of 3) new Regex( @"(?.*(\d{4})?)( |_)(?:\((?\d+) of \d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus) new Regex( @"^(?.*)(?: |_)v(?\d+)(?: |_)(c? ?)(?(\d+(\.\d)?)-?(\d+(\.\d)?)?)(c? ?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Catwoman - Trail of the Gun 01, Batman & Grendel (1996) 01 - Devil's Bones, Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus) new Regex( @"^(?.*)(?: (?\d+))", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Batman & Robin the Teen Wonder #0 new Regex( @"^(?.*)(?: |_)#(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Invincible 070.5 - Invincible Returns 1 (2010) (digital) (Minutemen-InnerDemons).cbr new Regex( @"^(?.*)(?: |_)(c? ?)(?(\d+(\.\d)?)-?(\d+(\.\d)?)?)(c? ?)-", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Amazing Man Comics chapter 25 new Regex( @"^(?!Vol)(?.*)( |_)c(hapter)( |_)(?\d*)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Amazing Man Comics issue #25 new Regex( @"^(?!Vol)(?.*)( |_)i(ssue)( |_) #(?\d*)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] ReleaseGroupRegex = new[] { // [TrinityBAKumA Finella&anon], [BAA]_, [SlowManga&OverloadScans], [batoto] new Regex(@"(?:\[(?(?!\s).+?(?(?!\s).+?(?(\d+(\.\d)?)-?(\d+(\.\d)?)?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // [Suihei Kiki]_Kasumi_Otoko_no_Ko_[Taruby]_v1.1.zip new Regex( @"v\d+\.(?\d+(?:.\d+|-\d+)?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Umineko no Naku Koro ni - Episode 3 - Banquet of the Golden Witch #02.cbz (Rare case, if causes issue remove) new Regex( @"^(?.*)(?: |_)#(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Green Worldz - Chapter 027 new Regex( @"^(?!Vol)(?.*)\s?(?\d+(?:\.?[\d-])?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Hinowa ga CRUSH! 018 (2019) (Digital) (LuCaZ).cbz, Hinowa ga CRUSH! 018.5 (2019) (Digital) (LuCaZ).cbz new Regex( @"^(?!Vol)(?.*)\s(?\d+(?:.\d+|-\d+)?)(?:\s\(\d{4}\))?(\b|_|-)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Tower Of God S01 014 (CBT) (digital).cbz new Regex( @"(?.*)\sS(?\d+)\s(?\d+(?:.\d+|-\d+)?)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Beelzebub_01_[Noodles].zip, Beelzebub_153b_RHS.zip new Regex( @"^((?!v|vo|vol|Volume).)*(\s|_)(?\.?\d+(?:.\d+|-\d+)?)(?b)?(\s|_|\[|\()", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Yumekui-Merry_DKThias_Chapter21.zip new Regex( @"Chapter(?\d+(-\d+)?)", //(?:.\d+|-\d+)? - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // [Hidoi]_Amaenaideyo_MS_vol01_chp02.rar new Regex( @"(?.*)(\s|_)(vol\d+)?(\s|_)Chp\.? ?(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Vol 1 Chapter 2 new Regex( @"(?((vol|volume|v))?(\s|_)?\.?\d+)(\s|_)(Chp|Chapter)\.?(\s|_)?(?\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] MangaEditionRegex = { // Tenjo Tenge {Full Contact Edition} v01 (2011) (Digital) (ASTC).cbz new Regex( @"(?({|\(|\[).* Edition(}|\)|\]))", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Tenjo Tenge {Full Contact Edition} v01 (2011) (Digital) (ASTC).cbz new Regex( @"(\b|_)(?Omnibus(( |_)?Edition)?)(\b|_)?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // To Love Ru v01 Uncensored (Ch.001-007) new Regex( @"(\b|_)(?Uncensored)(\b|_)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // AKIRA - c003 (v01) [Full Color] [Darkhorse].cbz new Regex( @"(\b|_)(?Full(?: |_)Color)(\b|_)?", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] CleanupRegex = @@ -388,15 +481,18 @@ namespace API.Parser // (), {}, [] new Regex( @"(?(\{\}|\[\]|\(\)))", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // (Complete) new Regex( @"(?(\{Complete\}|\[Complete\]|\(Complete\)))", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), // Anything in parenthesis new Regex( @"\(.*\)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; private static readonly Regex[] MangaSpecialRegex = @@ -404,7 +500,8 @@ namespace API.Parser // All Keywords, does not account for checking if contains volume/chapter identification. Parser.Parse() will handle. new Regex( @"(?Specials?|OneShot|One\-Shot|Omake|Extra( Chapter)?|Art Collection|Side( |_)Stories|Bonus)", - RegexOptions.IgnoreCase | RegexOptions.Compiled), + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout), }; // If SP\d+ is in the filename, we force treat it as a special regardless if volume or chapter might have been found. diff --git a/API/Services/ArchiveService.cs b/API/Services/ArchiveService.cs index af43381fa..951cd7db8 100644 --- a/API/Services/ArchiveService.cs +++ b/API/Services/ArchiveService.cs @@ -387,11 +387,10 @@ namespace API.Services if (!archive.HasFiles() && !needsFlattening) return; archive.ExtractToDirectory(extractPath, true); - if (needsFlattening) - { - _logger.LogDebug("Extracted archive is nested in root folder, flattening..."); - new DirectoryInfo(extractPath).Flatten(); - } + if (!needsFlattening) return; + + _logger.LogDebug("Extracted archive is nested in root folder, flattening..."); + new DirectoryInfo(extractPath).Flatten(); } /// diff --git a/API/Services/BookService.cs b/API/Services/BookService.cs index 84136aa84..190e867cb 100644 --- a/API/Services/BookService.cs +++ b/API/Services/BookService.cs @@ -13,11 +13,13 @@ using API.Entities.Enums; using API.Interfaces.Services; using API.Parser; using Docnet.Core; +using Docnet.Core.Converters; using Docnet.Core.Models; using Docnet.Core.Readers; using ExCSS; using HtmlAgilityPack; using Microsoft.Extensions.Logging; +using Microsoft.IO; using VersOne.Epub; using Image = NetVips.Image; using Point = System.Drawing.Point; @@ -28,6 +30,7 @@ namespace API.Services { private readonly ILogger _logger; private readonly StylesheetParser _cssParser = new (); + private static readonly RecyclableMemoryStreamManager StreamManager = new (); public BookService(ILogger logger) { @@ -375,7 +378,6 @@ namespace API.Services var pages = docReader.GetPageCount(); for (var pageNumber = 0; pageNumber < pages; pageNumber++) { - using var pageReader = docReader.GetPageReader(pageNumber); using var stream = GetPdfPage(docReader, pageNumber); File.WriteAllBytes(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"), stream.ToArray()); } @@ -405,7 +407,7 @@ namespace API.Services if (!createThumbnail) return coverImageContent.ReadContent(); - using var stream = new MemoryStream(coverImageContent.ReadContent()); + using var stream = StreamManager.GetStream("BookService.GetCoverImage", coverImageContent.ReadContent()); using var thumbnail = Image.ThumbnailStream(stream, MetadataService.ThumbnailWidth); return thumbnail.WriteToBuffer(".jpg"); @@ -447,23 +449,19 @@ namespace API.Services private static MemoryStream GetPdfPage(IDocReader docReader, int pageNumber) { using var pageReader = docReader.GetPageReader(pageNumber); - var rawBytes = pageReader.GetImage(); + var rawBytes = pageReader.GetImage(new NaiveTransparencyRemover()); var width = pageReader.GetPageWidth(); var height = pageReader.GetPageHeight(); - using var doc = new Bitmap(width, height, PixelFormat.Format32bppArgb); using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); AddBytesToBitmap(bmp, rawBytes); - for (int y = 0; y < bmp.Height; y++) + // Removes 1px margin on left/right side after bitmap is copied out + for (var y = 0; y < bmp.Height; y++) { bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y)); } - using var g = Graphics.FromImage(doc); - g.FillRegion(Brushes.White, new Region(new Rectangle(0, 0, width, height))); - g.DrawImage(bmp, new Point(0, 0)); - g.Save(); - var stream = new MemoryStream(); - doc.Save(stream, ImageFormat.Jpeg); + var stream = StreamManager.GetStream("BookService.GetPdfPage"); + bmp.Save(stream, ImageFormat.Jpeg); return stream; } diff --git a/API/Services/MetadataService.cs b/API/Services/MetadataService.cs index 7b414afec..8c4d71130 100644 --- a/API/Services/MetadataService.cs +++ b/API/Services/MetadataService.cs @@ -95,7 +95,7 @@ namespace API.Services if (ShouldFindCoverImage(series.CoverImage, forceUpdate)) { series.Volumes ??= new List(); - var firstCover = series.Volumes.GetCoverImage(series.Library.Type); + var firstCover = series.Volumes.GetCoverImage(series.Format); byte[] coverImage = null; if (firstCover == null && series.Volumes.Any()) { diff --git a/UI/Web/src/app/_models/search-result.ts b/UI/Web/src/app/_models/search-result.ts index 1a1fe9aa6..216ba60b7 100644 --- a/UI/Web/src/app/_models/search-result.ts +++ b/UI/Web/src/app/_models/search-result.ts @@ -1,3 +1,5 @@ +import { MangaFormat } from "./manga-format"; + export interface SearchResult { seriesId: number; libraryId: number; @@ -6,4 +8,5 @@ export interface SearchResult { originalName: string; sortName: string; coverImage: string; // byte64 encoded + format: MangaFormat; } diff --git a/UI/Web/src/app/_services/server.service.ts b/UI/Web/src/app/_services/server.service.ts index 9d4e9e848..1837b9fe0 100644 --- a/UI/Web/src/app/_services/server.service.ts +++ b/UI/Web/src/app/_services/server.service.ts @@ -16,10 +16,6 @@ export class ServerService { return this.httpClient.post(this.baseUrl + 'server/restart', {}); } - fetchLogs() { - return this.httpClient.get(this.baseUrl + 'server/logs', {responseType: 'blob' as 'text'}); - } - getServerInfo() { return this.httpClient.get(this.baseUrl + 'server/server-info'); } diff --git a/UI/Web/src/app/admin/dashboard/dashboard.component.ts b/UI/Web/src/app/admin/dashboard/dashboard.component.ts index 756ae605a..86333759f 100644 --- a/UI/Web/src/app/admin/dashboard/dashboard.component.ts +++ b/UI/Web/src/app/admin/dashboard/dashboard.component.ts @@ -4,6 +4,7 @@ import { ToastrService } from 'ngx-toastr'; import { ServerService } from 'src/app/_services/server.service'; import { saveAs } from 'file-saver'; import { Title } from '@angular/platform-browser'; +import { DownloadService } from 'src/app/shared/_services/download.service'; @@ -23,7 +24,8 @@ export class DashboardComponent implements OnInit { counter = this.tabs.length + 1; active = this.tabs[0]; - constructor(public route: ActivatedRoute, private serverService: ServerService, private toastr: ToastrService, private titleService: Title) { + constructor(public route: ActivatedRoute, private serverService: ServerService, + private toastr: ToastrService, private titleService: Title, private downloadService: DownloadService) { this.route.fragment.subscribe(frag => { const tab = this.tabs.filter(item => item.fragment === frag); if (tab.length > 0) { @@ -46,10 +48,7 @@ export class DashboardComponent implements OnInit { } fetchLogs() { - this.serverService.fetchLogs().subscribe(res => { - const blob = new Blob([res], {type: 'text/plain;charset=utf-8'}); - saveAs(blob, 'kavita.zip'); - }); + this.downloadService.downloadLogs(); } } diff --git a/UI/Web/src/app/admin/manage-settings/manage-settings.component.scss b/UI/Web/src/app/admin/manage-settings/manage-settings.component.scss index 52237a3ea..bdbc0edee 100644 --- a/UI/Web/src/app/admin/manage-settings/manage-settings.component.scss +++ b/UI/Web/src/app/admin/manage-settings/manage-settings.component.scss @@ -1,11 +1,8 @@ -@import '../../../assets/themes/dark.scss'; - .accent { font-style: italic; font-size: 0.7rem; - background-color: $dark-form-background; + background-color: lightgray; padding: 10px; - color: lightgray; + color: black; border-radius: 6px; - box-shadow: inset 0px 0px 8px 1px $dark-form-background } \ No newline at end of file diff --git a/UI/Web/src/app/nav-header/nav-header.component.html b/UI/Web/src/app/nav-header/nav-header.component.html index aac0bffa8..8d912f51c 100644 --- a/UI/Web/src/app/nav-header/nav-header.component.html +++ b/UI/Web/src/app/nav-header/nav-header.component.html @@ -34,6 +34,7 @@
    + diff --git a/UI/Web/src/app/nav-header/nav-header.component.ts b/UI/Web/src/app/nav-header/nav-header.component.ts index 0323b5bf3..4a42df8ef 100644 --- a/UI/Web/src/app/nav-header/nav-header.component.ts +++ b/UI/Web/src/app/nav-header/nav-header.component.ts @@ -3,6 +3,7 @@ import { Component, HostListener, Inject, OnDestroy, OnInit, ViewChild } from '@ import { Router } from '@angular/router'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; +import { UtilityService } from '../shared/_services/utility.service'; import { SearchResult } from '../_models/search-result'; import { AccountService } from '../_services/account.service'; import { ImageService } from '../_services/image.service'; diff --git a/UI/Web/src/app/series-detail/series-detail.component.html b/UI/Web/src/app/series-detail/series-detail.component.html index 39e4ffdff..7530729f8 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.html +++ b/UI/Web/src/app/series-detail/series-detail.component.html @@ -85,7 +85,7 @@
    Type
    -  {{utilityService.mangaFormat(series.format)}} + {{utilityService.mangaFormat(series.format)}}
    diff --git a/UI/Web/src/app/shared/_services/download.service.ts b/UI/Web/src/app/shared/_services/download.service.ts index ad8d7752e..cb6db908e 100644 --- a/UI/Web/src/app/shared/_services/download.service.ts +++ b/UI/Web/src/app/shared/_services/download.service.ts @@ -1,4 +1,4 @@ -import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Series } from 'src/app/_models/series'; import { environment } from 'src/environments/environment'; @@ -46,14 +46,18 @@ export class DownloadService { return this.httpClient.get(this.baseUrl + 'download/chapter?chapterId=' + chapterId, {observe: 'response', responseType: 'blob' as 'text'}); } + downloadLogs() { + this.httpClient.get(this.baseUrl + 'server/logs', {observe: 'response', responseType: 'blob' as 'text'}).subscribe(resp => { + this.preformSave(resp.body || '', this.getFilenameFromHeader(resp.headers, 'logs')); + }); + } + downloadSeries(series: Series) { this.downloadSeriesSize(series.id).subscribe(async size => { if (size >= this.SIZE_WARNING && !await this.confirmService.confirm('The series is ' + this.humanFileSize(size) + '. Are you sure you want to continue?')) { return; } this.downloadSeriesAPI(series.id).subscribe(resp => { - //const filename = series.name + '.zip'; - //this.preformSave(res, filename); this.preformSave(resp.body || '', this.getFilenameFromHeader(resp.headers, series.name)); }); }); diff --git a/UI/Web/src/app/shared/series-format/series-format.component.html b/UI/Web/src/app/shared/series-format/series-format.component.html new file mode 100644 index 000000000..bafb1421c --- /dev/null +++ b/UI/Web/src/app/shared/series-format/series-format.component.html @@ -0,0 +1,4 @@ + +   + + \ No newline at end of file diff --git a/UI/Web/src/app/shared/series-format/series-format.component.scss b/UI/Web/src/app/shared/series-format/series-format.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/UI/Web/src/app/shared/series-format/series-format.component.ts b/UI/Web/src/app/shared/series-format/series-format.component.ts new file mode 100644 index 000000000..21e7832f1 --- /dev/null +++ b/UI/Web/src/app/shared/series-format/series-format.component.ts @@ -0,0 +1,23 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { MangaFormat } from 'src/app/_models/manga-format'; +import { UtilityService } from '../_services/utility.service'; + +@Component({ + selector: 'app-series-format', + templateUrl: './series-format.component.html', + styleUrls: ['./series-format.component.scss'] +}) +export class SeriesFormatComponent implements OnInit { + + @Input() format: MangaFormat = MangaFormat.UNKNOWN; + + get MangaFormat(): typeof MangaFormat { + return MangaFormat; + } + + constructor(public utilityService: UtilityService) { } + + ngOnInit(): void { + } + +} diff --git a/UI/Web/src/app/shared/shared.module.ts b/UI/Web/src/app/shared/shared.module.ts index 0623a9f37..5e7b60c8a 100644 --- a/UI/Web/src/app/shared/shared.module.ts +++ b/UI/Web/src/app/shared/shared.module.ts @@ -16,6 +16,7 @@ import { TagBadgeComponent } from './tag-badge/tag-badge.component'; import { CardDetailLayoutComponent } from './card-detail-layout/card-detail-layout.component'; import { ShowIfScrollbarDirective } from './show-if-scrollbar.directive'; import { A11yClickDirective } from './a11y-click.directive'; +import { SeriesFormatComponent } from './series-format/series-format.component'; @NgModule({ @@ -31,7 +32,8 @@ import { A11yClickDirective } from './a11y-click.directive'; TagBadgeComponent, CardDetailLayoutComponent, ShowIfScrollbarDirective, - A11yClickDirective + A11yClickDirective, + SeriesFormatComponent ], imports: [ CommonModule, @@ -54,7 +56,8 @@ import { A11yClickDirective } from './a11y-click.directive'; TagBadgeComponent, CardDetailLayoutComponent, ShowIfScrollbarDirective, - A11yClickDirective + A11yClickDirective, + SeriesFormatComponent ] }) export class SharedModule { } diff --git a/UI/Web/src/assets/themes/dark.scss b/UI/Web/src/assets/themes/dark.scss index c02edfdd8..310b1075c 100644 --- a/UI/Web/src/assets/themes/dark.scss +++ b/UI/Web/src/assets/themes/dark.scss @@ -23,6 +23,12 @@ $dark-item-accent-bg: #292d32; color: #4ac694; } + .accent { + background-color: $dark-form-background !important; + color: lightgray !important; + box-shadow: inset 0px 0px 8px 1px $dark-form-background !important; + } + .breadcrumb { background-color: $dark-item-accent-bg; From 107b70226c793bad0fd51463ef825cc33ef0dbcc Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 24 Jul 2021 17:17:28 -0500 Subject: [PATCH 21/23] Feature/performance pdf (#427) * Added Timeout for Regex matching to ensure malicious filenames don't crash system * Refactored GetCoverImage to use series format rather than library type * Refactored download logs to use the download service * Fixed accent color not looking well on light theme * Refactored series format into dedicated component and added to search results * Switch to using MemoryManager for Streams to attempt to minimize GC pressure and reduced bitmap manipulation for transparency hack. * Refactored PDF extraction to re-use the same MemoryStream for all pages * Debug code for another issue that only users with OpenMediaVault can run --- API/Extensions/DirectoryInfoExtensions.cs | 4 +++- API/Services/ArchiveService.cs | 1 + API/Services/BookService.cs | 15 ++++++++------- UI/Web/src/app/_models/search-result.ts | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/API/Extensions/DirectoryInfoExtensions.cs b/API/Extensions/DirectoryInfoExtensions.cs index 892c690b3..e5518438f 100644 --- a/API/Extensions/DirectoryInfoExtensions.cs +++ b/API/Extensions/DirectoryInfoExtensions.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using System.Linq; using API.Comparators; @@ -78,6 +79,7 @@ namespace API.Extensions foreach (var subDirectory in directory.EnumerateDirectories()) { + Console.WriteLine($"Flattening {subDirectory}"); FlattenDirectory(root, subDirectory, ref directoryIndex); } } diff --git a/API/Services/ArchiveService.cs b/API/Services/ArchiveService.cs index 951cd7db8..66a5e2618 100644 --- a/API/Services/ArchiveService.cs +++ b/API/Services/ArchiveService.cs @@ -383,6 +383,7 @@ namespace API.Services private void ExtractArchiveEntries(ZipArchive archive, string extractPath) { + // TODO: In cases where we try to extract, but there are InvalidPathChars, we need to inform the user var needsFlattening = ArchiveNeedsFlattening(archive); if (!archive.HasFiles() && !needsFlattening) return; diff --git a/API/Services/BookService.cs b/API/Services/BookService.cs index 190e867cb..0fe910fdf 100644 --- a/API/Services/BookService.cs +++ b/API/Services/BookService.cs @@ -376,9 +376,11 @@ namespace API.Services using var docReader = DocLib.Instance.GetDocReader(fileFilePath, new PageDimensions(1080, 1920)); var pages = docReader.GetPageCount(); + using var stream = StreamManager.GetStream("BookService.GetPdfPage"); for (var pageNumber = 0; pageNumber < pages; pageNumber++) { - using var stream = GetPdfPage(docReader, pageNumber); + // IDEA! Move stream out and use the same stream + GetPdfPage(docReader, pageNumber, stream); File.WriteAllBytes(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"), stream.ToArray()); } } @@ -427,8 +429,8 @@ namespace API.Services using var docReader = DocLib.Instance.GetDocReader(fileFilePath, new PageDimensions(1080, 1920)); if (docReader.GetPageCount() == 0) return Array.Empty(); - using var stream = GetPdfPage(docReader, 0); - stream.Seek(0, SeekOrigin.Begin); + using var stream = StreamManager.GetStream("BookService.GetPdfPage"); + GetPdfPage(docReader, 0, stream); if (!createThumbnail) return stream.ToArray(); @@ -446,7 +448,7 @@ namespace API.Services return Array.Empty(); } - private static MemoryStream GetPdfPage(IDocReader docReader, int pageNumber) + private static void GetPdfPage(IDocReader docReader, int pageNumber, Stream stream) { using var pageReader = docReader.GetPageReader(pageNumber); var rawBytes = pageReader.GetImage(new NaiveTransparencyRemover()); @@ -459,10 +461,9 @@ namespace API.Services { bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y)); } - - var stream = StreamManager.GetStream("BookService.GetPdfPage"); + stream.Seek(0, SeekOrigin.Begin); bmp.Save(stream, ImageFormat.Jpeg); - return stream; + stream.Seek(0, SeekOrigin.Begin); } private static string RemoveWhiteSpaceFromStylesheets(string body) diff --git a/UI/Web/src/app/_models/search-result.ts b/UI/Web/src/app/_models/search-result.ts index 216ba60b7..96619cc0f 100644 --- a/UI/Web/src/app/_models/search-result.ts +++ b/UI/Web/src/app/_models/search-result.ts @@ -7,6 +7,6 @@ export interface SearchResult { name: string; originalName: string; sortName: string; - coverImage: string; // byte64 encoded + coverImage: string; // byte64 encoded (not used) format: MangaFormat; } From 4f3461710c36ba65a446fd304f6610412b9f3647 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 24 Jul 2021 19:14:38 -0500 Subject: [PATCH 22/23] More Polishing (#428) # Added - Added: Added a new button on admin dashboard to clear cache for the whole server # Changed - Changed: Moved the download logs to the new System page - Changed: Tag Badges now show the correct cursor to help indication actions. For example, Collection badges on series detail page can be clicked, while type cannot. # Fixed - Fixed: Fixed an issue in develop builds where Pagination no longer worked due to Header not being exposed - Fixed: After Scanning a series, clear out any cached chapters ======================================================= * After Scanning a series, clear out any cached chapters. * Implemented cursor overrides for tag badges * Fixed pagination no longer working due to Pagination header not being able to be read from the UI. * Fixed some css things with icons within tagbadges not taking the selection mode styling * Moved download logs button to the system page * Implemented the ability to clear cache for the whole server from admin dashboard * Removed debug code * Up the Regex Timeout for the Github Build System --- API.Tests/Services/ScannerServiceTests.cs | 3 +- API/Controllers/ServerController.cs | 13 ++++++- API/Extensions/DirectoryInfoExtensions.cs | 1 - API/Interfaces/Services/ICacheService.cs | 11 +++--- API/Parser/Parser.cs | 5 ++- API/Services/ArchiveService.cs | 1 - API/Services/BookService.cs | 1 - API/Services/CacheService.cs | 3 +- API/Services/Tasks/ScannerService.cs | 6 ++- API/Startup.cs | 6 ++- UI/Web/src/app/_services/server.service.ts | 4 ++ .../admin/dashboard/dashboard.component.html | 4 -- .../admin/dashboard/dashboard.component.ts | 9 +---- .../manage-system.component.html | 13 +++++++ .../manage-system/manage-system.component.ts | 15 +++++++- .../library-detail.component.ts | 7 ++-- .../series-detail.component.html | 6 +-- .../series-detail/series-detail.component.ts | 5 +++ .../shared/tag-badge/tag-badge.component.html | 2 +- .../shared/tag-badge/tag-badge.component.scss | 24 ++++++++++++ .../shared/tag-badge/tag-badge.component.ts | 38 ++++++++++++++++++- 21 files changed, 141 insertions(+), 36 deletions(-) diff --git a/API.Tests/Services/ScannerServiceTests.cs b/API.Tests/Services/ScannerServiceTests.cs index 70244a8f1..c25a7012d 100644 --- a/API.Tests/Services/ScannerServiceTests.cs +++ b/API.Tests/Services/ScannerServiceTests.cs @@ -34,6 +34,7 @@ namespace API.Tests.Services private readonly IImageService _imageService = Substitute.For(); private readonly ILogger _metadataLogger = Substitute.For>(); private readonly IDirectoryService _directoryService = Substitute.For(); + private readonly ICacheService _cacheService = Substitute.For(); private readonly DbConnection _connection; private readonly DataContext _context; @@ -53,7 +54,7 @@ namespace API.Tests.Services IMetadataService metadataService = Substitute.For(unitOfWork, _metadataLogger, _archiveService, _bookService, _imageService); - _scannerService = new ScannerService(unitOfWork, _logger, _archiveService, metadataService, _bookService); + _scannerService = new ScannerService(unitOfWork, _logger, _archiveService, metadataService, _bookService, _cacheService); } private async Task SeedDb() diff --git a/API/Controllers/ServerController.cs b/API/Controllers/ServerController.cs index 2fd460f79..929f0d0ae 100644 --- a/API/Controllers/ServerController.cs +++ b/API/Controllers/ServerController.cs @@ -22,15 +22,17 @@ namespace API.Controllers private readonly IConfiguration _config; private readonly IBackupService _backupService; private readonly IArchiveService _archiveService; + private readonly ICacheService _cacheService; public ServerController(IHostApplicationLifetime applicationLifetime, ILogger logger, IConfiguration config, - IBackupService backupService, IArchiveService archiveService) + IBackupService backupService, IArchiveService archiveService, ICacheService cacheService) { _applicationLifetime = applicationLifetime; _logger = logger; _config = config; _backupService = backupService; _archiveService = archiveService; + _cacheService = cacheService; } [HttpPost("restart")] @@ -42,6 +44,15 @@ namespace API.Controllers return Ok(); } + [HttpPost("clear-cache")] + public ActionResult ClearCache() + { + _logger.LogInformation("{UserName} is clearing cache of server from admin dashboard", User.GetUsername()); + _cacheService.Cleanup(); + + return Ok(); + } + /// /// Returns non-sensitive information about the current system /// diff --git a/API/Extensions/DirectoryInfoExtensions.cs b/API/Extensions/DirectoryInfoExtensions.cs index e5518438f..a922e7313 100644 --- a/API/Extensions/DirectoryInfoExtensions.cs +++ b/API/Extensions/DirectoryInfoExtensions.cs @@ -79,7 +79,6 @@ namespace API.Extensions foreach (var subDirectory in directory.EnumerateDirectories()) { - Console.WriteLine($"Flattening {subDirectory}"); FlattenDirectory(root, subDirectory, ref directoryIndex); } } diff --git a/API/Interfaces/Services/ICacheService.cs b/API/Interfaces/Services/ICacheService.cs index 830b6bb42..f2d6cfa71 100644 --- a/API/Interfaces/Services/ICacheService.cs +++ b/API/Interfaces/Services/ICacheService.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; using API.Entities; namespace API.Interfaces.Services @@ -22,11 +23,11 @@ namespace API.Interfaces.Services /// Clears cache directory of all volumes. This can be invoked from deleting a library or a series. ///
    /// Volumes that belong to that library. Assume the library might have been deleted before this invocation. - void CleanupChapters(int[] chapterIds); - + void CleanupChapters(IEnumerable chapterIds); + /// - /// Returns the absolute path of a cached page. + /// Returns the absolute path of a cached page. /// /// Chapter entity with Files populated. /// Page number to look for @@ -35,4 +36,4 @@ namespace API.Interfaces.Services void EnsureCacheDirectory(); } -} \ No newline at end of file +} diff --git a/API/Parser/Parser.cs b/API/Parser/Parser.cs index c0c1b2c78..914508f9f 100644 --- a/API/Parser/Parser.cs +++ b/API/Parser/Parser.cs @@ -11,7 +11,7 @@ namespace API.Parser { public const string DefaultChapter = "0"; public const string DefaultVolume = "0"; - private static readonly TimeSpan RegexTimeout = TimeSpan.FromMilliseconds(250); + private static readonly TimeSpan RegexTimeout = TimeSpan.FromMilliseconds(500); public const string ImageFileExtensions = @"^(\.png|\.jpeg|\.jpg)"; public const string ArchiveFileExtensions = @"\.cbz|\.zip|\.rar|\.cbr|\.tar.gz|\.7zip|\.7z|\.cb7|\.cbt"; @@ -507,7 +507,8 @@ namespace API.Parser // If SP\d+ is in the filename, we force treat it as a special regardless if volume or chapter might have been found. private static readonly Regex SpecialMarkerRegex = new Regex( @"(?SP\d+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled + RegexOptions.IgnoreCase | RegexOptions.Compiled, + RegexTimeout ); diff --git a/API/Services/ArchiveService.cs b/API/Services/ArchiveService.cs index 66a5e2618..a03188a5d 100644 --- a/API/Services/ArchiveService.cs +++ b/API/Services/ArchiveService.cs @@ -301,7 +301,6 @@ namespace API.Services entry.WriteTo(ms); ms.Position = 0; - var serializer = new XmlSerializer(typeof(ComicInfo)); var info = (ComicInfo) serializer.Deserialize(ms); return info; diff --git a/API/Services/BookService.cs b/API/Services/BookService.cs index 0fe910fdf..ea8fb10aa 100644 --- a/API/Services/BookService.cs +++ b/API/Services/BookService.cs @@ -379,7 +379,6 @@ namespace API.Services using var stream = StreamManager.GetStream("BookService.GetPdfPage"); for (var pageNumber = 0; pageNumber < pages; pageNumber++) { - // IDEA! Move stream out and use the same stream GetPdfPage(docReader, pageNumber, stream); File.WriteAllBytes(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"), stream.ToArray()); } diff --git a/API/Services/CacheService.cs b/API/Services/CacheService.cs index 174419090..3d557ed7f 100644 --- a/API/Services/CacheService.cs +++ b/API/Services/CacheService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -113,7 +114,7 @@ namespace API.Services _logger.LogInformation("Cache directory purged"); } - public void CleanupChapters(int[] chapterIds) + public void CleanupChapters(IEnumerable chapterIds) { _logger.LogInformation("Running Cache cleanup on Volumes"); diff --git a/API/Services/Tasks/ScannerService.cs b/API/Services/Tasks/ScannerService.cs index a4d683db3..33d2d8ea9 100644 --- a/API/Services/Tasks/ScannerService.cs +++ b/API/Services/Tasks/ScannerService.cs @@ -26,16 +26,18 @@ namespace API.Services.Tasks private readonly IArchiveService _archiveService; private readonly IMetadataService _metadataService; private readonly IBookService _bookService; + private readonly ICacheService _cacheService; private readonly NaturalSortComparer _naturalSort = new (); public ScannerService(IUnitOfWork unitOfWork, ILogger logger, IArchiveService archiveService, - IMetadataService metadataService, IBookService bookService) + IMetadataService metadataService, IBookService bookService, ICacheService cacheService) { _unitOfWork = unitOfWork; _logger = logger; _archiveService = archiveService; _metadataService = metadataService; _bookService = bookService; + _cacheService = cacheService; } [DisableConcurrentExecution(timeoutInSeconds: 360)] @@ -46,6 +48,7 @@ namespace API.Services.Tasks var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(seriesId); var library = await _unitOfWork.LibraryRepository.GetFullLibraryForIdAsync(libraryId, seriesId); var dirs = FindHighestDirectoriesFromFiles(library, files); + var chapterIds = await _unitOfWork.SeriesRepository.GetChapterIdsForSeriesAsync(new []{ seriesId }); _logger.LogInformation("Beginning file scan on {SeriesName}", series.Name); var scanner = new ParseScannedFiles(_bookService, _logger); @@ -71,6 +74,7 @@ namespace API.Services.Tasks totalFiles, parsedSeries.Keys.Count, sw.ElapsedMilliseconds + scanElapsedTime, series.Name); CleanupUserProgress(); BackgroundJob.Enqueue(() => _metadataService.RefreshMetadata(libraryId, forceUpdate)); + BackgroundJob.Enqueue(() => _cacheService.CleanupChapters(chapterIds)); } else { diff --git a/API/Startup.cs b/API/Startup.cs index f5cbfc734..3741399f9 100644 --- a/API/Startup.cs +++ b/API/Startup.cs @@ -101,7 +101,11 @@ namespace API // Ordering is important. Cors, authentication, authorization if (env.IsDevelopment()) { - app.UseCors(policy => policy.AllowAnyHeader().AllowAnyMethod().WithOrigins("http://localhost:4200").WithExposedHeaders("Content-Disposition")); + app.UseCors(policy => policy + .AllowAnyHeader() + .AllowAnyMethod() + .WithOrigins("http://localhost:4200") + .WithExposedHeaders("Content-Disposition", "Pagination")); } app.UseResponseCaching(); diff --git a/UI/Web/src/app/_services/server.service.ts b/UI/Web/src/app/_services/server.service.ts index 1837b9fe0..3abec515b 100644 --- a/UI/Web/src/app/_services/server.service.ts +++ b/UI/Web/src/app/_services/server.service.ts @@ -19,4 +19,8 @@ export class ServerService { getServerInfo() { return this.httpClient.get(this.baseUrl + 'server/server-info'); } + + clearCache() { + return this.httpClient.post(this.baseUrl + 'server/clear-cache', {}); + } } diff --git a/UI/Web/src/app/admin/dashboard/dashboard.component.html b/UI/Web/src/app/admin/dashboard/dashboard.component.html index c206f7c34..2830cbf4d 100644 --- a/UI/Web/src/app/admin/dashboard/dashboard.component.html +++ b/UI/Web/src/app/admin/dashboard/dashboard.component.html @@ -1,10 +1,6 @@
    - {{utilityService.mangaFormat(series.format)}} + {{utilityService.mangaFormat(series.format)}}
    diff --git a/UI/Web/src/app/series-detail/series-detail.component.ts b/UI/Web/src/app/series-detail/series-detail.component.ts index 4d07be6bc..1eb89bda8 100644 --- a/UI/Web/src/app/series-detail/series-detail.component.ts +++ b/UI/Web/src/app/series-detail/series-detail.component.ts @@ -6,6 +6,7 @@ import { ToastrService } from 'ngx-toastr'; import { take } from 'rxjs/operators'; import { ConfirmConfig } from '../shared/confirm-dialog/_models/confirm-config'; import { ConfirmService } from '../shared/confirm.service'; +import { TagBadgeCursor } from '../shared/tag-badge/tag-badge.component'; import { CardDetailsModalComponent } from '../shared/_modals/card-details-modal/card-details-modal.component'; import { DownloadService } from '../shared/_services/download.service'; import { UtilityService } from '../shared/_services/utility.service'; @@ -74,6 +75,10 @@ export class SeriesDetailComponent implements OnInit { return MangaFormat; } + get TagBadgeCursor(): typeof TagBadgeCursor { + return TagBadgeCursor; + } + constructor(private route: ActivatedRoute, private seriesService: SeriesService, private ratingConfig: NgbRatingConfig, private router: Router, private modalService: NgbModal, public readerService: ReaderService, diff --git a/UI/Web/src/app/shared/tag-badge/tag-badge.component.html b/UI/Web/src/app/shared/tag-badge/tag-badge.component.html index 9054ff705..b1e1b9a27 100644 --- a/UI/Web/src/app/shared/tag-badge/tag-badge.component.html +++ b/UI/Web/src/app/shared/tag-badge/tag-badge.component.html @@ -1,3 +1,3 @@ -
    +
    \ No newline at end of file diff --git a/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss b/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss index 5a05bed5c..8c9d013a2 100644 --- a/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss +++ b/UI/Web/src/app/shared/tag-badge/tag-badge.component.scss @@ -20,4 +20,28 @@ $bdr-color: #f2f2f2; margin-right: 0px; cursor: pointer; } +} + +::ng-deep .selectable-cursor { + cursor: default !important; + + i { + cursor: default !important; + } +} + +::ng-deep .not-allowed-cursor { + cursor: not-allowed !important; + + i { + cursor: not-allowed !important; + } +} + +::ng-deep .clickable-cursor { + cursor: pointer !important; + + i { + cursor: pointer !important; + } } \ No newline at end of file diff --git a/UI/Web/src/app/shared/tag-badge/tag-badge.component.ts b/UI/Web/src/app/shared/tag-badge/tag-badge.component.ts index 6d7fb0615..58e9e93e5 100644 --- a/UI/Web/src/app/shared/tag-badge/tag-badge.component.ts +++ b/UI/Web/src/app/shared/tag-badge/tag-badge.component.ts @@ -1,4 +1,25 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; + +/** + * What type of cursor to apply to the tag badge + */ +export enum TagBadgeCursor { + /** + * Allows the user to select text + * cursor: default + */ + Selectable, + /** + * Informs the user they can click and interact with badge + * cursor: pointer + */ + Clickable, + /** + * Informs the user they cannot click or interact with badge + * cursor: not-allowed + */ + NotAllowed, +} @Component({ selector: 'app-tag-badge', @@ -7,9 +28,24 @@ import { Component, OnInit } from '@angular/core'; }) export class TagBadgeComponent implements OnInit { + @Input() selectionMode: TagBadgeCursor = TagBadgeCursor.Selectable; + + cursor: string = 'default'; + constructor() { } ngOnInit(): void { + switch (this.selectionMode) { + case TagBadgeCursor.Selectable: + this.cursor = 'selectable-cursor'; + break; + case TagBadgeCursor.NotAllowed: + this.cursor = 'not-allowed-cursor'; + break; + case TagBadgeCursor.Clickable: + this.cursor = 'clickable-cursor'; + break; + } } } From d97e81d53ef8478c197732c9c891cf9662ed527a Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sun, 25 Jul 2021 10:50:16 -0500 Subject: [PATCH 23/23] Release v0.4.3 (#414) * Ensure that after we assign a role to a user, we show it immediately * Cached libraryType api as that is not going to change in a viewing session. Moved some components around to tighten bundles. * Cleaned up more TODOs * Refactored Configuration to use getter and setters so that the interface is a lot cleaner. Updated HashUtil to use JWT Secret instead of Machine name (as docker machine name is random each boot). * Added debug code to Startup for Chris to test with on Docker * Removed debug code * Version bump, readme updates --- Kavita.Common/Kavita.Common.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kavita.Common/Kavita.Common.csproj b/Kavita.Common/Kavita.Common.csproj index 284571b1a..d5b17196c 100644 --- a/Kavita.Common/Kavita.Common.csproj +++ b/Kavita.Common/Kavita.Common.csproj @@ -4,7 +4,7 @@ net5.0 kavitareader.com Kavita - 0.4.2.1 + 0.4.3.0 en

    Admin Dashboard

    -
    - -
    -