From 36c0be109747500dd9f345a2af3a63833bbdd992 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 4 Jan 2023 09:31:32 -0500 Subject: [PATCH 01/79] Upgrade smtp library, but not tests --- server/smtp_server.go | 36 +++++++++++++++++------------------- server/smtp_server_test.go | 8 ++++---- server/util.go | 4 ++-- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/server/smtp_server.go b/server/smtp_server.go index 3f4b9b6..733457e 100644 --- a/server/smtp_server.go +++ b/server/smtp_server.go @@ -34,6 +34,9 @@ type smtpBackend struct { mu sync.Mutex } +var _ smtp.Backend = (*smtpBackend)(nil) +var _ smtp.Session = (*smtpSession)(nil) + func newMailBackend(conf *Config, handler func(http.ResponseWriter, *http.Request)) *smtpBackend { return &smtpBackend{ config: conf, @@ -41,14 +44,9 @@ func newMailBackend(conf *Config, handler func(http.ResponseWriter, *http.Reques } } -func (b *smtpBackend) Login(state *smtp.ConnectionState, username, password string) (smtp.Session, error) { - log.Debug("%s Incoming mail, login with user %s", logSMTPPrefix(state), username) - return &smtpSession{backend: b, state: state}, nil -} - -func (b *smtpBackend) AnonymousLogin(state *smtp.ConnectionState) (smtp.Session, error) { - log.Debug("%s Incoming mail, anonymous login", logSMTPPrefix(state)) - return &smtpSession{backend: b, state: state}, nil +func (b *smtpBackend) NewSession(conn *smtp.Conn) (smtp.Session, error) { + log.Debug("%s Incoming mail", logSMTPPrefix(conn)) + return &smtpSession{backend: b, conn: conn}, nil } func (b *smtpBackend) Counts() (total int64, success int64, failure int64) { @@ -60,23 +58,23 @@ func (b *smtpBackend) Counts() (total int64, success int64, failure int64) { // smtpSession is returned after EHLO. type smtpSession struct { backend *smtpBackend - state *smtp.ConnectionState + conn *smtp.Conn topic string mu sync.Mutex } -func (s *smtpSession) AuthPlain(username, password string) error { - log.Debug("%s AUTH PLAIN (with username %s)", logSMTPPrefix(s.state), username) +func (s *smtpSession) AuthPlain(username, _ string) error { + log.Debug("%s AUTH PLAIN (with username %s)", logSMTPPrefix(s.conn), username) return nil } -func (s *smtpSession) Mail(from string, opts smtp.MailOptions) error { - log.Debug("%s MAIL FROM: %s (with options: %#v)", logSMTPPrefix(s.state), from, opts) +func (s *smtpSession) Mail(from string, opts *smtp.MailOptions) error { + log.Debug("%s MAIL FROM: %s (with options: %#v)", logSMTPPrefix(s.conn), from, opts) return nil } func (s *smtpSession) Rcpt(to string) error { - log.Debug("%s RCPT TO: %s", logSMTPPrefix(s.state), to) + log.Debug("%s RCPT TO: %s", logSMTPPrefix(s.conn), to) return s.withFailCount(func() error { conf := s.backend.config addressList, err := mail.ParseAddressList(to) @@ -114,9 +112,9 @@ func (s *smtpSession) Data(r io.Reader) error { return err } if log.IsTrace() { - log.Trace("%s DATA: %s", logSMTPPrefix(s.state), string(b)) + log.Trace("%s DATA: %s", logSMTPPrefix(s.conn), string(b)) } else if log.IsDebug() { - log.Debug("%s DATA: %d byte(s)", logSMTPPrefix(s.state), len(b)) + log.Debug("%s DATA: %d byte(s)", logSMTPPrefix(s.conn), len(b)) } msg, err := mail.ReadMessage(bytes.NewReader(b)) if err != nil { @@ -156,9 +154,9 @@ func (s *smtpSession) Data(r io.Reader) error { func (s *smtpSession) publishMessage(m *message) error { // Extract remote address (for rate limiting) - remoteAddr, _, err := net.SplitHostPort(s.state.RemoteAddr.String()) + remoteAddr, _, err := net.SplitHostPort(s.conn.Conn().RemoteAddr().String()) if err != nil { - remoteAddr = s.state.RemoteAddr.String() + remoteAddr = s.conn.Conn().RemoteAddr().String() } // Call HTTP handler with fake HTTP request @@ -198,7 +196,7 @@ func (s *smtpSession) withFailCount(fn func() error) error { if err != nil { // Almost all of these errors are parse errors, and user input errors. // We do not want to spam the log with WARN messages. - log.Debug("%s Incoming mail error: %s", logSMTPPrefix(s.state), err.Error()) + log.Debug("%s Incoming mail error: %s", logSMTPPrefix(s.conn), err.Error()) s.backend.failure++ } return err diff --git a/server/smtp_server_test.go b/server/smtp_server_test.go index c0de707..be99d9e 100644 --- a/server/smtp_server_test.go +++ b/server/smtp_server_test.go @@ -34,8 +34,8 @@ Content-Type: text/html; charset="UTF-8" require.Equal(t, "and one more", r.Header.Get("Title")) require.Equal(t, "what's up", readAll(t, r.Body)) }) - session, _ := backend.AnonymousLogin(fakeConnState(t, "1.2.3.4")) - require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{})) + session, _ := backend.NewSession(fakeConnState(t, "1.2.3.4")) + require.Nil(t, session.Mail("phil@example.com", &smtp.MailOptions{})) require.Nil(t, session.Rcpt("ntfy-mytopic@ntfy.sh")) require.Nil(t, session.Data(strings.NewReader(email))) } @@ -303,12 +303,12 @@ func newTestBackend(t *testing.T, handler func(http.ResponseWriter, *http.Reques return conf, backend } -func fakeConnState(t *testing.T, remoteAddr string) *smtp.ConnectionState { +func fakeConnState(t *testing.T, remoteAddr string) *smtp.Conn { ip, err := net.ResolveIPAddr("ip", remoteAddr) if err != nil { t.Fatal(err) } - return &smtp.ConnectionState{ + return &smtp.Conn{ Hostname: "myhostname", LocalAddr: ip, RemoteAddr: ip, diff --git a/server/util.go b/server/util.go index 269a9d5..0d21f41 100644 --- a/server/util.go +++ b/server/util.go @@ -57,8 +57,8 @@ func logHTTPPrefix(v *visitor, r *http.Request) string { return fmt.Sprintf("%s HTTP %s %s", v.ip, r.Method, requestURI) } -func logSMTPPrefix(state *smtp.ConnectionState) string { - return fmt.Sprintf("%s/%s SMTP", state.Hostname, state.RemoteAddr.String()) +func logSMTPPrefix(conn *smtp.Conn) string { + return fmt.Sprintf("%s/%s SMTP", conn.Hostname(), conn.Conn().RemoteAddr().String()) } func renderHTTPRequest(r *http.Request) string { From 432cc2003e878665f337d487afc72e01df9d0258 Mon Sep 17 00:00:00 2001 From: Rycoh Date: Fri, 10 Feb 2023 18:55:34 +0100 Subject: [PATCH 02/79] Added translation using Weblate (Romanian) --- web/public/static/langs/ro.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 web/public/static/langs/ro.json diff --git a/web/public/static/langs/ro.json b/web/public/static/langs/ro.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/web/public/static/langs/ro.json @@ -0,0 +1 @@ +{} From 020f561ad49e83739926175dfaf75b70536f251d Mon Sep 17 00:00:00 2001 From: Rycoh Date: Fri, 10 Feb 2023 17:55:50 +0000 Subject: [PATCH 03/79] Translated using Weblate (Romanian) Currently translated at 4.7% (9 of 189 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ro/ --- web/public/static/langs/ro.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ro.json b/web/public/static/langs/ro.json index 0967ef4..394b9dd 100644 --- a/web/public/static/langs/ro.json +++ b/web/public/static/langs/ro.json @@ -1 +1,11 @@ -{} +{ + "action_bar_show_menu": "Afișează meniu", + "action_bar_send_test_notification": "Trimite notificare de probă", + "action_bar_clear_notifications": "Șterge toate notificările", + "action_bar_settings": "Setări", + "action_bar_unsubscribe": "Dezabonare", + "action_bar_logo_alt": "logo-ul ntfy", + "action_bar_toggle_mute": "Oprire/activare notificări", + "message_bar_type_message": "Scrie un mesaj aici", + "message_bar_error_publishing": "Eroare la publicarea notificării" +} From bed60b71ffab41840a18824bd6f5002721253d2f Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 12 Feb 2023 21:05:24 -0500 Subject: [PATCH 04/79] Tester feedback --- server/server.go | 147 ------------------------------ server/server_account.go | 1 + server/server_account_test.go | 21 ++++- server/server_manager.go | 163 ++++++++++++++++++++++++++++++++++ server/visitor.go | 7 +- 5 files changed, 187 insertions(+), 152 deletions(-) create mode 100644 server/server_manager.go diff --git a/server/server.go b/server/server.go index 288b138..41eccec 100644 --- a/server/server.go +++ b/server/server.go @@ -1300,153 +1300,6 @@ func (s *Server) topicFromID(id string) (*topic, error) { return topics[0], nil } -func (s *Server) execManager() { - // WARNING: Make sure to only selectively lock with the mutex, and be aware that this - // there is no mutex for the entire function. - - // Expire visitors from rate visitors map - staleVisitors := 0 - log. - Tag(tagManager). - Timing(func() { - s.mu.Lock() - defer s.mu.Unlock() - for ip, v := range s.visitors { - if v.Stale() { - log.Tag(tagManager).With(v).Trace("Deleting stale visitor") - delete(s.visitors, ip) - staleVisitors++ - } - } - }). - Field("stale_visitors", staleVisitors). - Debug("Deleted %d stale visitor(s)", staleVisitors) - - // Delete expired user tokens and users - if s.userManager != nil { - log. - Tag(tagManager). - Timing(func() { - if err := s.userManager.RemoveExpiredTokens(); err != nil { - log.Tag(tagManager).Err(err).Warn("Error expiring user tokens") - } - if err := s.userManager.RemoveDeletedUsers(); err != nil { - log.Tag(tagManager).Err(err).Warn("Error deleting soft-deleted users") - } - }). - Debug("Removed expired tokens and users") - } - - // Delete expired attachments - if s.fileCache != nil { - log. - Tag(tagManager). - Timing(func() { - ids, err := s.messageCache.AttachmentsExpired() - if err != nil { - log.Tag(tagManager).Err(err).Warn("Error retrieving expired attachments") - } else if len(ids) > 0 { - if log.Tag(tagManager).IsDebug() { - log.Tag(tagManager).Debug("Deleting attachments %s", strings.Join(ids, ", ")) - } - if err := s.fileCache.Remove(ids...); err != nil { - log.Tag(tagManager).Err(err).Warn("Error deleting attachments") - } - if err := s.messageCache.MarkAttachmentsDeleted(ids...); err != nil { - log.Tag(tagManager).Err(err).Warn("Error marking attachments deleted") - } - } else { - log.Tag(tagManager).Debug("No expired attachments to delete") - } - }). - Debug("Deleted expired attachments") - } - - // Prune messages - log. - Tag(tagManager). - Timing(func() { - expiredMessageIDs, err := s.messageCache.MessagesExpired() - if err != nil { - log.Tag(tagManager).Err(err).Warn("Error retrieving expired messages") - } else if len(expiredMessageIDs) > 0 { - if err := s.fileCache.Remove(expiredMessageIDs...); err != nil { - log.Tag(tagManager).Err(err).Warn("Error deleting attachments for expired messages") - } - if err := s.messageCache.DeleteMessages(expiredMessageIDs...); err != nil { - log.Tag(tagManager).Err(err).Warn("Error marking attachments deleted") - } - } else { - log.Tag(tagManager).Debug("No expired messages to delete") - } - }). - Debug("Pruned messages") - - // Message count per topic - var messagesCached int - messageCounts, err := s.messageCache.MessageCounts() - if err != nil { - log.Tag(tagManager).Err(err).Warn("Cannot get message counts") - messageCounts = make(map[string]int) // Empty, so we can continue - } - for _, count := range messageCounts { - messagesCached += count - } - - // Remove subscriptions without subscribers - var emptyTopics, subscribers int - log. - Tag(tagManager). - Timing(func() { - s.mu.Lock() - defer s.mu.Unlock() - for _, t := range s.topics { - subs := t.SubscribersCount() - log.Tag(tagManager).Trace("- topic %s: %d subscribers", t.ID, subs) - msgs, exists := messageCounts[t.ID] - if subs == 0 && (!exists || msgs == 0) { - log.Tag(tagManager).Trace("Deleting empty topic %s", t.ID) - emptyTopics++ - delete(s.topics, t.ID) - continue - } - subscribers += subs - } - }). - Debug("Removed %d empty topic(s)", emptyTopics) - - // Mail stats - var receivedMailTotal, receivedMailSuccess, receivedMailFailure int64 - if s.smtpServerBackend != nil { - receivedMailTotal, receivedMailSuccess, receivedMailFailure = s.smtpServerBackend.Counts() - } - var sentMailTotal, sentMailSuccess, sentMailFailure int64 - if s.smtpSender != nil { - sentMailTotal, sentMailSuccess, sentMailFailure = s.smtpSender.Counts() - } - - // Print stats - s.mu.Lock() - messagesCount, topicsCount, visitorsCount := s.messages, len(s.topics), len(s.visitors) - s.mu.Unlock() - log. - Tag(tagManager). - Fields(log.Context{ - "messages_published": messagesCount, - "messages_cached": messagesCached, - "topics_active": topicsCount, - "subscribers": subscribers, - "visitors": visitorsCount, - "emails_received": receivedMailTotal, - "emails_received_success": receivedMailSuccess, - "emails_received_failure": receivedMailFailure, - "emails_sent": sentMailTotal, - "emails_sent_success": sentMailSuccess, - "emails_sent_failure": sentMailFailure, - }). - Info("Server stats") -} - func (s *Server) runSMTPServer() error { s.smtpServerBackend = newMailBackend(s.config, s.handle) s.smtpServer = smtp.NewServer(s.smtpServerBackend) diff --git a/server/server_account.go b/server/server_account.go index d7dbd98..aff9f1b 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -479,6 +479,7 @@ func (s *Server) handleAccountReservationDelete(w http.ResponseWriter, r *http.R if err := s.messageCache.ExpireMessages(topic); err != nil { return err } + s.pruneMessages() } return s.writeJSON(w, newSuccessResponse()) } diff --git a/server/server_account_test.go b/server/server_account_test.go index cc4f4cd..0290303 100644 --- a/server/server_account_test.go +++ b/server/server_account_test.go @@ -669,8 +669,8 @@ func TestAccount_Reservation_Delete_Messages_And_Attachments(t *testing.T) { require.Equal(t, 200, rr.Code) // Verify that messages and attachments were deleted + // This does not explicitly call the manager! time.Sleep(time.Second) - s.execManager() ms, err := s.messageCache.Messages("mytopic1", sinceAllMessages, false) require.Nil(t, err) @@ -804,10 +804,27 @@ func TestAccount_Persist_UserStats_After_Tier_Change(t *testing.T) { "Authorization": util.BasicAuth("phil", "phil"), }) require.Equal(t, 200, rr.Code) + account, _ := util.UnmarshalJSON[apiAccountResponse](io.NopCloser(rr.Body)) + require.Equal(t, int64(1), account.Stats.Messages) // Is not reset! + + // Publish another message + rr = request(t, s, "POST", "/mytopic", "hi", map[string]string{ + "Authorization": util.BasicAuth("phil", "phil"), + }) + require.Equal(t, 200, rr.Code) // Verify that message stats were persisted time.Sleep(300 * time.Millisecond) u, err = s.userManager.User("phil") require.Nil(t, err) - require.Equal(t, int64(0), u.Stats.Messages) // v.EnqueueUserStats had run! + require.Equal(t, int64(2), u.Stats.Messages) // v.EnqueueUserStats had run! + + // Stats keep counting + rr = request(t, s, "GET", "/v1/account", "", map[string]string{ + "Authorization": util.BasicAuth("phil", "phil"), + }) + require.Equal(t, 200, rr.Code) + account, _ = util.UnmarshalJSON[apiAccountResponse](io.NopCloser(rr.Body)) + require.Equal(t, int64(2), account.Stats.Messages) // Is not reset! + } diff --git a/server/server_manager.go b/server/server_manager.go new file mode 100644 index 0000000..2b80ae1 --- /dev/null +++ b/server/server_manager.go @@ -0,0 +1,163 @@ +package server + +import ( + "heckel.io/ntfy/log" + "strings" +) + +func (s *Server) execManager() { + // WARNING: Make sure to only selectively lock with the mutex, and be aware that this + // there is no mutex for the entire function. + + // Prune all the things + s.pruneVisitors() + s.pruneTokens() + s.pruneAttachments() + s.pruneMessages() + + // Message count per topic + var messagesCached int + messageCounts, err := s.messageCache.MessageCounts() + if err != nil { + log.Tag(tagManager).Err(err).Warn("Cannot get message counts") + messageCounts = make(map[string]int) // Empty, so we can continue + } + for _, count := range messageCounts { + messagesCached += count + } + + // Remove subscriptions without subscribers + var emptyTopics, subscribers int + log. + Tag(tagManager). + Timing(func() { + s.mu.Lock() + defer s.mu.Unlock() + for _, t := range s.topics { + subs := t.SubscribersCount() + log.Tag(tagManager).Trace("- topic %s: %d subscribers", t.ID, subs) + msgs, exists := messageCounts[t.ID] + if subs == 0 && (!exists || msgs == 0) { + log.Tag(tagManager).Trace("Deleting empty topic %s", t.ID) + emptyTopics++ + delete(s.topics, t.ID) + continue + } + subscribers += subs + } + }). + Debug("Removed %d empty topic(s)", emptyTopics) + + // Mail stats + var receivedMailTotal, receivedMailSuccess, receivedMailFailure int64 + if s.smtpServerBackend != nil { + receivedMailTotal, receivedMailSuccess, receivedMailFailure = s.smtpServerBackend.Counts() + } + var sentMailTotal, sentMailSuccess, sentMailFailure int64 + if s.smtpSender != nil { + sentMailTotal, sentMailSuccess, sentMailFailure = s.smtpSender.Counts() + } + + // Print stats + s.mu.Lock() + messagesCount, topicsCount, visitorsCount := s.messages, len(s.topics), len(s.visitors) + s.mu.Unlock() + log. + Tag(tagManager). + Fields(log.Context{ + "messages_published": messagesCount, + "messages_cached": messagesCached, + "topics_active": topicsCount, + "subscribers": subscribers, + "visitors": visitorsCount, + "emails_received": receivedMailTotal, + "emails_received_success": receivedMailSuccess, + "emails_received_failure": receivedMailFailure, + "emails_sent": sentMailTotal, + "emails_sent_success": sentMailSuccess, + "emails_sent_failure": sentMailFailure, + }). + Info("Server stats") +} + +func (s *Server) pruneVisitors() { + staleVisitors := 0 + log. + Tag(tagManager). + Timing(func() { + s.mu.Lock() + defer s.mu.Unlock() + for ip, v := range s.visitors { + if v.Stale() { + log.Tag(tagManager).With(v).Trace("Deleting stale visitor") + delete(s.visitors, ip) + staleVisitors++ + } + } + }). + Field("stale_visitors", staleVisitors). + Debug("Deleted %d stale visitor(s)", staleVisitors) +} + +func (s *Server) pruneTokens() { + if s.userManager != nil { + log. + Tag(tagManager). + Timing(func() { + if err := s.userManager.RemoveExpiredTokens(); err != nil { + log.Tag(tagManager).Err(err).Warn("Error expiring user tokens") + } + if err := s.userManager.RemoveDeletedUsers(); err != nil { + log.Tag(tagManager).Err(err).Warn("Error deleting soft-deleted users") + } + }). + Debug("Removed expired tokens and users") + } +} + +func (s *Server) pruneAttachments() { + if s.fileCache != nil { + log. + Tag(tagManager). + Timing(func() { + ids, err := s.messageCache.AttachmentsExpired() + if err != nil { + log.Tag(tagManager).Err(err).Warn("Error retrieving expired attachments") + } else if len(ids) > 0 { + if log.Tag(tagManager).IsDebug() { + log.Tag(tagManager).Debug("Deleting attachments %s", strings.Join(ids, ", ")) + } + if err := s.fileCache.Remove(ids...); err != nil { + log.Tag(tagManager).Err(err).Warn("Error deleting attachments") + } + if err := s.messageCache.MarkAttachmentsDeleted(ids...); err != nil { + log.Tag(tagManager).Err(err).Warn("Error marking attachments deleted") + } + } else { + log.Tag(tagManager).Debug("No expired attachments to delete") + } + }). + Debug("Deleted expired attachments") + } +} + +func (s *Server) pruneMessages() { + log. + Tag(tagManager). + Timing(func() { + expiredMessageIDs, err := s.messageCache.MessagesExpired() + if err != nil { + log.Tag(tagManager).Err(err).Warn("Error retrieving expired messages") + } else if len(expiredMessageIDs) > 0 { + if err := s.fileCache.Remove(expiredMessageIDs...); err != nil { + log.Tag(tagManager).Err(err).Warn("Error deleting attachments for expired messages") + } + if err := s.messageCache.DeleteMessages(expiredMessageIDs...); err != nil { + log.Tag(tagManager).Err(err).Warn("Error marking attachments deleted") + } + } else { + log.Tag(tagManager).Debug("No expired messages to delete") + } + }). + Debug("Pruned messages") +} diff --git a/server/visitor.go b/server/visitor.go index 0ef06c7..04bd822 100644 --- a/server/visitor.go +++ b/server/visitor.go @@ -159,8 +159,9 @@ func (v *visitor) contextNoLock() log.Context { fields["user_id"] = v.user.ID fields["user_name"] = v.user.Name if v.user.Tier != nil { - fields["tier_id"] = v.user.Tier.ID - fields["tier_name"] = v.user.Tier.Name + for field, value := range v.user.Tier.Context() { + fields[field] = value + } } if v.user.Billing.StripeCustomerID != "" { fields["stripe_customer_id"] = v.user.Billing.StripeCustomerID @@ -331,7 +332,7 @@ func (v *visitor) SetUser(u *user.User) { shouldResetLimiters := v.user.TierID() != u.TierID() // TierID works with nil receiver v.user = u if shouldResetLimiters { - v.resetLimitersNoLock(0, 0, true) + v.resetLimitersNoLock(u.Stats.Messages, u.Stats.Emails, true) } } From 8bde80a3d23e3be787fc63028050f96eb926744e Mon Sep 17 00:00:00 2001 From: SticksDev Date: Sun, 12 Feb 2023 21:08:37 -0500 Subject: [PATCH 05/79] Add iOS docs to the dev docs Imports old dev docs Also adds my currently open PR #10 on the docs to improve them. --- docs/develop.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/docs/develop.md b/docs/develop.md index 5e7004b..8bc4a47 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -327,7 +327,80 @@ To build your own version with Firebase, you must: ``` ## iOS app -The ntfy iOS app source code is available [on GitHub](https://github.com/binwiederhier/ntfy-ios). + +## Requirements +!!! note + These requirements are strictly based off of my development on this app. There may be other versions of macOS / XCode that work. Feel free to test on other versions! + +1. macOS Monterey or later +1. XCode 13.2+ +1. A physical iOS device (for push notifications, I could not get them to work in the XCode simulator) +1. The [macOS development branch for ntfy](https://github.com/Copephobia/ntfy/tree/macos-development) (for APNS configuration) +1. Firebase account +1. Apple Developer license? (I forget if its possible to do testing without purchasing the license) + +## Setup - Apple Developer/iOS Instant Notification Setup !!! info - I haven't had time to move the build instructions here. Please check out the repository instead. + Along with this step, the "Setup - PLIST Deployment and Configuration" step is also required for these changes to take effect in the iOS app. + +1. [Create a new key in Apple Developer Member Center](https://developer.apple.com/account/resources/authkeys/add) + 1. Select "Apple Push Notifications service (APNs)" +1. Download the newly created key (should have a file name similar to `AuthKey_ZZZZZZ.p8`, where `ZZZZZZ` is the **Key ID**) +1. Record your **Team ID** - it can be seen in the top-right corner of the page, or on your Account > Membership page +1. Next, navigate to "Project Settings" in the firebase console for your project, and select the iOS app you created. Then, click "Cloud Messaging" in the left sidebar, and scroll down to the "APNs Authentication Key" section. Click "Upload Key", and upload the key you downloaded from Apple Developer. + +!!! warning + If you don't do the above setups for APNS, **notifications will not post instantly or sometimes at all**. This is because of the missing APNS key, which is required for firebase to send notifications to the iOS app. See below for a snip from the firebase docs. + +> If you don't have an APNs authentication key, you can still send notifications to iOS devices, but they won't be delivered instantly. Instead, they'll be delivered when the device wakes up to check for new notifications or when your application sends a firebase request to check for them. The time to check for new notifications can vary from a few seconds to hours, days or even weeks. Enabling APNs authentication keys ensures that notifications are delivered instantly and is strongly recommended. + +## Setup - Firebase + +1. If you haven't already, create a Google / Firebase account +1. Visit the [Firebase console](https://console.firebase.google.com) +1. Create a new Firebase project: + 1. Enter a project name + 1. Disable Google Analytics (currently iOS app does not support analytics) +1. On the "Project settings" page, add an iOS app + 1. Apple bundle ID - "com.copephobia.ntfy-ios" (this can be changed to match XCode's ntfy.sh target > "Bundle Identifier" value) + 1. Register the app + 1. Download the config file - GoogleInfo.plist (this will need to be included in the ntfy-ios repository / XCode) +1. Generate a new service account private key for the ntfy server + 1. Go to "Project settings" > "Service accounts" + 1. Click "Generate new private key" to generate and download a private key to use for sending messages via the ntfy server + +## Setup - ntfy server + +1. Checkout the [macOS development branch for ntfy](https://github.com/Copephobia/ntfy/tree/macos-development) +1. If not already made, make the `/etc/ntfy/` directory and move the service account private key to that folder +1. Copy the `server/server.yml` file from the ntfy repository to `/etc/ntfy/` +1. Modify the `/etc/ntfy/server.yml` file `firebase-key-file` value to the path of the private key +1. Install go: `brew install go` +1. In the ntfy repository, run `make build-simple` + +## Setup - XCode + +1. Follow step 4 of [https://firebase.google.com/docs/ios/setup](Add Firebase to your Apple project) to install the firebase-ios-sdk in XCode, if it's not already present - you can select any packages in addition to Firebase Core / Firebase Messaging +1. Similarly, install the SQLite.swift package dependency in XCode +1. When running the debug build, ensure XCode is pointed to the connected iOS device - registering for push notifications does not work in the iOS simulators + +## Setup - PLIST Deployment and Configuration +To have intstant notifications/better notification delivery when using firebase, you will need to add the `GoogleService-Info.plist` file to your project. Here's how to do that: + +1. In XCode, find the NTFY app target. **Not** the NSE app target. +1. Find the Asset/ folder in the project navigator +1. Drag the `GoogleService-Info.plist` file into the Asset/ folder that you get from the firebase console. It can be found in the "Project settings" > "General" > "Your apps" with a button labled "GoogleService-Info.plist" + +After that, you should be all set! + +## Useful resources + +- https://www.raywenderlich.com/14958063-modern-efficient-core-data +- https://www.hackingwithswift.com/books/ios-swiftui/how-to-combine-core-data-and-swiftui +- https://stackoverflow.com/a/41783666/1440785 +- https://stackoverflow.com/questions/47374903/viewing-core-data-data-from-your-app-on-a-device +- https://debashishdas3100.medium.com/save-push-notifications-to-coredata-userdefaults-ios-swift-5-ea074390b57 +- https://cocoacasts.com/cocoa-fundamentals-how-to-access-builds-settings-in-swifti +- https://www.hackingwithswift.com/articles/216/complete-guide-to-navigationview-in-swiftui +- https://stackoverflow.com/a/70731861/1440785 From 9e20ee35e1a93d07eec4fe5f240745a61787aba6 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 12 Feb 2023 21:13:26 -0500 Subject: [PATCH 06/79] Thanks to @overtone1000 and @Joachim256 for your sponsorship and donation --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2d56343..ca977ec 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,8 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + + I'd also like to thank JetBrains for providing their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/) to me for free, and [DigitalOcean](https://m.do.co/c/442b929528db) (*referral link*) for supporting the project: From 355424c0daf9b452a4182635f9784478d23dfa92 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 13 Feb 2023 13:20:05 -0500 Subject: [PATCH 07/79] Fix trace logging --- server/server.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/server/server.go b/server/server.go index 41eccec..75c61a6 100644 --- a/server/server.go +++ b/server/server.go @@ -325,7 +325,7 @@ func (s *Server) handle(w http.ResponseWriter, r *http.Request) { return } - if log.IsTrace() { + if logvr(v, r).IsTrace() { logvr(v, r).Field("http_request", renderHTTPRequest(r)).Trace("HTTP request started") } else if log.IsDebug() { logvr(v, r).Debug("HTTP request started") @@ -628,20 +628,18 @@ func (s *Server) handlePublishWithoutResponse(r *http.Request, v *visitor) (*mes m.Message = emptyMessageBody } delayed := m.Time > time.Now().Unix() - logvrm(v, r, m). + ev := logvrm(v, r, m). Tag(tagPublish). Fields(log.Context{ "message_delayed": delayed, "message_firebase": firebase, "message_unifiedpush": unifiedpush, "message_email": email, - }). - Debug("Received message") - if log.IsTrace() { - logvrm(v, r, m). - Tag(tagPublish). - Field("message_body", util.MaybeMarshalJSON(m)). - Trace("Message body") + }) + if ev.IsTrace() { + ev.Field("message_body", util.MaybeMarshalJSON(m)).Trace("Received message") + } else if ev.IsDebug() { + ev.Debug("Received message") } if !delayed { if err := t.Publish(v, m); err != nil { From 70aa384bc35c0818c0efc13f2bd607bdef922522 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 13 Feb 2023 21:35:58 -0500 Subject: [PATCH 08/79] Docs for access tokens --- client/options.go | 5 ++ cmd/publish.go | 12 +++ docs/config.md | 33 ++++++++ docs/publish.md | 188 +++++++++++++++++++++++++++++++++++++++++++--- server/server.go | 1 - 5 files changed, 227 insertions(+), 12 deletions(-) diff --git a/client/options.go b/client/options.go index fdcbe1d..dbca8c0 100644 --- a/client/options.go +++ b/client/options.go @@ -87,6 +87,11 @@ func WithBasicAuth(user, pass string) PublishOption { return WithHeader("Authorization", util.BasicAuth(user, pass)) } +// WithBearerAuth adds the Authorization header for Bearer auth to the request +func WithBearerAuth(token string) PublishOption { + return WithHeader("Authorization", fmt.Sprintf("Bearer %s", token)) +} + // WithNoCache instructs the server not to cache the message server-side func WithNoCache() PublishOption { return WithHeader("X-Cache", "no") diff --git a/cmd/publish.go b/cmd/publish.go index 83d7911..be00dfd 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -35,6 +35,7 @@ var flagsPublish = append( &cli.StringFlag{Name: "file", Aliases: []string{"f"}, EnvVars: []string{"NTFY_FILE"}, Usage: "file to upload as an attachment"}, &cli.StringFlag{Name: "email", Aliases: []string{"mail", "e"}, EnvVars: []string{"NTFY_EMAIL"}, Usage: "also send to e-mail address"}, &cli.StringFlag{Name: "user", Aliases: []string{"u"}, EnvVars: []string{"NTFY_USER"}, Usage: "username[:password] used to auth against the server"}, + &cli.StringFlag{Name: "token", Aliases: []string{"k"}, EnvVars: []string{"NTFY_TOKEN"}, Usage: "access token used to auth against the server"}, &cli.IntFlag{Name: "wait-pid", Aliases: []string{"wait_pid", "pid"}, EnvVars: []string{"NTFY_WAIT_PID"}, Usage: "wait until PID exits before publishing"}, &cli.BoolFlag{Name: "wait-cmd", Aliases: []string{"wait_cmd", "cmd", "done"}, EnvVars: []string{"NTFY_WAIT_CMD"}, Usage: "run command and wait until it finishes before publishing"}, &cli.BoolFlag{Name: "no-cache", Aliases: []string{"no_cache", "C"}, EnvVars: []string{"NTFY_NO_CACHE"}, Usage: "do not cache message server-side"}, @@ -99,10 +100,18 @@ func execPublish(c *cli.Context) error { file := c.String("file") email := c.String("email") user := c.String("user") + token := c.String("token") noCache := c.Bool("no-cache") noFirebase := c.Bool("no-firebase") quiet := c.Bool("quiet") pid := c.Int("wait-pid") + + // Checks + if user != "" && token != "" { + return errors.New("cannot set both --user and --token") + } + + // Do the things topic, message, command, err := parseTopicMessageCommand(c) if err != nil { return err @@ -144,6 +153,9 @@ func execPublish(c *cli.Context) error { if noFirebase { options = append(options, client.WithNoFirebase()) } + if token != "" { + options = append(options, client.WithBearerAuth(token)) + } if user != "" { var pass string parts := strings.SplitN(user, ":", 2) diff --git a/docs/config.md b/docs/config.md index fd5c615..d8b0ef3 100644 --- a/docs/config.md +++ b/docs/config.md @@ -222,6 +222,39 @@ User `ben` has three topic-specific entries. He can read, but not write to topic to topic `garagedoor` and all topics starting with the word `alerts` (wildcards). Clients that are not authenticated (called `*`/`everyone`) only have read access to the `announcements` and `server-stats` topics. +### Access tokens +In addition to username/password auth, ntfy also provides authentication via access tokens. Access tokens are useful +to avoid having to configure your password across multiple publishing/subscribing applications. For instance, you may +want to use a dedicated token to publish from your backup host, and one from your home automation system. + +!!! info + As of today, access tokens grant users **full access to the user account**. Aside from changing the password, + and deleting the account, every action can be performed with a token. Granular access tokens are on the roadmap, + but not yet implemented. + +The `ntfy token` command can be used to manage access tokens for users. Tokens can have labels, and they can expire +automatically (or never expire). Each user can have up to 20 tokens (hardcoded). + +**Example commands** (type `ntfy token --help` or `ntfy token COMMAND --help` for more details): +``` +ntfy token list # Shows list of tokens for all users +ntfy token list phil # Shows list of tokens for user phil +ntfy token add phil # Create token for user phil which never expires +ntfy token add --expires=2d phil # Create token for user phil which expires in 2 days +ntfy token remove phil tk_th2sxr... # Delete token +``` + +**Creating an access token:** +``` +$ ntfy token add --expires=30d --label="backups" phil +$ ntfy token list +user phil +- tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 (backups), expires 15 Mar 23 14:33 EDT, accessed from 0.0.0.0 at 13 Feb 23 13:33 EST +``` + +Once an access token is created, you can **use it to authenticate against the ntfy server, e.g. when you publish or +subscribe to topics**. To learn how, check out [authenticate via access tokens](publish.md#access-tokens). + ### Example: Private instance The easiest way to configure a private instance is to set `auth-default-access` to `deny-all` in the `server.yml`: diff --git a/docs/publish.md b/docs/publish.md index e69be44..8476ca6 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -2591,23 +2591,22 @@ title `You've Got Mail` to topic `sometopic` (see [ntfy.sh/sometopic](https://nt
Publishing a message via e-mail
-## Advanced features - -### Authentication +## Authentication Depending on whether the server is configured to support [access control](config.md#access-control), some topics may be read/write protected so that only users with the correct credentials can subscribe or publish to them. To publish/subscribe to protected topics, you can: -* Use [basic auth](#basic-auth), e.g. `Authorization: Basic dGVzdHVzZXI6ZmFrZXBhc3N3b3Jk` -* or use the [`auth` query parameter](#query-param), e.g. `?auth=QmFzaWMgZEdWemRIVnpaWEk2Wm1GclpYQmhjM04zYjNKaw` +* Use [username & password](#username-password) via Basic auth, e.g. `Authorization: Basic dGVzdHVzZXI6ZmFrZXBhc3N3b3Jk` +* Use [access tokens](#bearer-auth) via Bearer/Basic auth, e.g. `Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2` +* or use either with the [`auth` query parameter](#query-param), e.g. `?auth=QmFzaWMgZEdWemRIVnpaWEk2Wm1GclpYQmhjM04zYjNKaw` !!! warning - Base64 only encodes username and password. It **is not encrypting it**. For your self-hosted server, - **be sure to use HTTPS to avoid eavesdropping** and exposing your password. + When using Basic auth, base64 only encodes username and password. It **is not encrypting it**. For your + self-hosted server, **be sure to use HTTPS to avoid eavesdropping** and exposing your password. -#### Basic auth -Here's an example using [Basic auth](https://en.wikipedia.org/wiki/Basic_access_authentication), with a user `testuser` -and password `fakepassword`: +### Username & password +The simplest way to authenticate against a ntfy server is to use [Basic auth](https://en.wikipedia.org/wiki/Basic_access_authentication). +Here's an example with a user `testuser` and password `fakepassword`: === "Command line (curl)" ``` @@ -2701,7 +2700,172 @@ The following command will generate the appropriate value for you on *nix system echo "Basic $(echo -n 'testuser:fakepassword' | base64)" ``` -#### Query param +### Access tokens +In addition to username/password auth, ntfy also provides authentication via access tokens. Access tokens are useful +to avoid having to configure your password across multiple publishing/subscribing applications. For instance, you may +want to use a dedicated token to publish from your backup host, and one from your home automation system. + +You can create access tokens using the `ntfy token` command, or in the web app in the "Account" section (when logged in). +See [access tokens](config.md#access-tokens) for details. + +Once an access token is created, you can use it to authenticate against the ntfy server, e.g. when you publish or +subscribe to topics. Here's an example using [Bearer auth](https://swagger.io/docs/specification/authentication/bearer-authentication/), +with the token `tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2`: + +=== "Command line (curl)" + ``` + curl \ + -H "Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2" \ + -d "Look ma, with auth" \ + https://ntfy.example.com/mysecrets + ``` + +=== "ntfy CLI" + ``` + ntfy publish \ + --token tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 \ + ntfy.example.com/mysecrets \ + "Look ma, with auth" + ``` + +=== "HTTP" + ``` http + POST /mysecrets HTTP/1.1 + Host: ntfy.example.com + Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 + + Look ma, with auth + ``` + +=== "JavaScript" + ``` javascript + fetch('https://ntfy.example.com/mysecrets', { + method: 'POST', // PUT works too + body: 'Look ma, with auth', + headers: { + 'Authorization': 'Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2' + } + }) + ``` + +=== "Go" + ``` go + req, _ := http.NewRequest("POST", "https://ntfy.example.com/mysecrets", + strings.NewReader("Look ma, with auth")) + req.Header.Set("Authorization", "Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2") + http.DefaultClient.Do(req) + ``` + +=== "PowerShell" + ``` powershell + $uri = "https://ntfy.example.com/mysecrets" + $headers = @{Authorization="Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2"} + $message = "Look ma, with auth" + Invoke-RestMethod -Uri $uri -Body $message -Headers $headers -Method "Post" -UseBasicParsing + ``` + +=== "Python" + ``` python + requests.post("https://ntfy.example.com/mysecrets", + data="Look ma, with auth", + headers={ + "Authorization": "Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2" + }) + ``` + +=== "PHP" + ``` php-inline + file_get_contents('https://ntfy.example.com/mysecrets', false, stream_context_create([ + 'http' => [ + 'method' => 'POST', // PUT also works + 'header' => + 'Content-Type: text/plain\r\n' . + 'Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2', + 'content' => 'Look ma, with auth' + ] + ])); + ``` + +Alternatively, you can use [Basic Auth](https://en.wikipedia.org/wiki/Basic_access_authentication) to send the +access token. When sending an empty username, the basic auth password is treated by the ntfy server as an +access token. This is primarily useful to make `curl` calls easier, e.g. `curl -u:tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 ...`: + +=== "Command line (curl)" + ``` + curl \ + -u :tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 \ + -d "Look ma, with auth" \ + https://ntfy.example.com/mysecrets + ``` + +=== "ntfy CLI" + ``` + ntfy publish \ + --token tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 \ + ntfy.example.com/mysecrets \ + "Look ma, with auth" + ``` + +=== "HTTP" + ``` http + POST /mysecrets HTTP/1.1 + Host: ntfy.example.com + Authorization: Basic OnRrX0FnUWRxN21WQm9GRDM3elFWTjI5Umh1TXpOSXoy + + Look ma, with auth + ``` + +=== "JavaScript" + ``` javascript + fetch('https://ntfy.example.com/mysecrets', { + method: 'POST', // PUT works too + body: 'Look ma, with auth', + headers: { + 'Authorization': 'Basic OnRrX0FnUWRxN21WQm9GRDM3elFWTjI5Umh1TXpOSXoy' + } + }) + ``` + +=== "Go" + ``` go + req, _ := http.NewRequest("POST", "https://ntfy.example.com/mysecrets", + strings.NewReader("Look ma, with auth")) + req.Header.Set("Authorization", "Basic OnRrX0FnUWRxN21WQm9GRDM3elFWTjI5Umh1TXpOSXoy") + http.DefaultClient.Do(req) + ``` + +=== "PowerShell" + ``` powershell + $uri = "https://ntfy.example.com/mysecrets" + $headers = @{Authorization="Basic OnRrX0FnUWRxN21WQm9GRDM3elFWTjI5Umh1TXpOSXoy"} + $message = "Look ma, with auth" + Invoke-RestMethod -Uri $uri -Body $message -Headers $headers -Method "Post" -UseBasicParsing + ``` + +=== "Python" + ``` python + requests.post("https://ntfy.example.com/mysecrets", + data="Look ma, with auth", + headers={ + "Authorization": "Basic OnRrX0FnUWRxN21WQm9GRDM3elFWTjI5Umh1TXpOSXoy" + }) + ``` + +=== "PHP" + ``` php-inline + file_get_contents('https://ntfy.example.com/mysecrets', false, stream_context_create([ + 'http' => [ + 'method' => 'POST', // PUT also works + 'header' => + 'Content-Type: text/plain\r\n' . + 'Authorization: Basic OnRrX0FnUWRxN21WQm9GRDM3elFWTjI5Umh1TXpOSXoy', + 'content' => 'Look ma, with auth' + ] + ])); + ``` + + +### Query param Here's an example using the `auth` query parameter: === "Command line (curl)" @@ -2786,6 +2950,8 @@ The following command will generate the appropriate value for you on *nix system echo -n "Basic `echo -n 'testuser:fakepassword' | base64`" | base64 | tr -d '=' ``` +## Advanced features + ### Message caching !!! info If `Cache: no` is used, messages will only be delivered to connected subscribers, and won't be re-delivered if a diff --git a/server/server.go b/server/server.go index 75c61a6..b0d5724 100644 --- a/server/server.go +++ b/server/server.go @@ -38,7 +38,6 @@ import ( - HIGH Docs - tiers - api - - tokens */ From 610adb062be703a26650491a8fe011a19173afca Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 13:58:49 -0500 Subject: [PATCH 09/79] More docs --- docs/config.md | 235 +++++++++++++++++++++++++++++++++++----------- docs/publish.md | 3 - server/server.go | 5 +- server/server.yml | 2 +- 4 files changed, 183 insertions(+), 62 deletions(-) diff --git a/docs/config.md b/docs/config.md index d8b0ef3..c735844 100644 --- a/docs/config.md +++ b/docs/config.md @@ -161,6 +161,7 @@ ntfy user add --role=admin phil # Add admin user phil ntfy user del phil # Delete user phil ntfy user change-pass phil # Change password for user phil ntfy user change-role phil admin # Make user phil an admin +ntfy user change-tier phil pro # Change phil's tier to "pro" ``` ### Access control list (ACL) @@ -787,6 +788,69 @@ Note that the self-hosted server literally sends the message `New message` for e may be `Some other message`. This is so that if iOS cannot talk to the self-hosted server (in time, or at all), it'll show `New message` as a popup. +## Tiers +ntfy supports associating users to pre-defined tiers. Tiers can be used to grant users higher limits, such as +daily message limits, attachment size, or make it possible for users to reserve topics. If [payments are enabled](#payments), +tiers can be paid or unpaid, and users can upgrade/downgrade between them. If payments are disabled, then the only way +to switch between tiers is with the `ntfy user change-tier` command (see [users and roles](#users-and-roles)). + +By default, **newly created users have no tier**, and all usage limits are read from the `server.yml` config file. +Once a user is associated with a tier, some limits are overridden based on the tier. + +The `ntfy tier` command can be used to manage all available tiers. By default, there are no pre-defined tiers. + +**Example commands** (type `ntfy token --help` or `ntfy token COMMAND --help` for more details): +``` +ntfy tier add pro # Add tier with code "pro", using the defaults +ntfy tier change --name="Pro" pro # Update the name of an existing tier +ntfy tier del starter # Delete an existing tier +ntfy user change-tier phil pro # Switch user "phil" to tier "pro" +``` + +**Creating a tier (full example):** +``` +ntfy tier add \ + --name="Pro" \ + --message-limit=10000 \ + --message-expiry-duration=24h \ + --email-limit=50 \ + --reservation-limit=10 \ + --attachment-file-size-limit=100M \ + --attachment-total-size-limit=1G \ + --attachment-expiry-duration=12h \ + --attachment-bandwidth-limit=5G \ + --stripe-price-id=price_123456 \ + pro +``` + +## Payments +ntfy supports paid [tiers](#tiers) via [Stripe](https://stripe.com/) as a payment provider. If payments are enabled, +users can register, login and switch plans in the web app. The web app will behave slightly differently if payments +are enabled (e.g. showing an upgrade banner, or "ntfy Pro" tags). + +!!! info + The ntfy payments integration is very tailored to ntfy.sh and Stripe. I do not intend to support arbitrary use + cases. + +To enable payments, sign up with [Stripe](https://stripe.com/), set the `stripe-secret-key` and `stripe-webhook-key` +config options: + +* `stripe-secret-key` is the key used for the Stripe API communication. Setting this values + enables payments in the ntfy web app (e.g. Upgrade dialog). See [API keys](https://dashboard.stripe.com/apikeys). +* `stripe-webhook-key` is the key required to validate the authenticity of incoming webhooks from Stripe. + Webhooks are essential up keep the local database in sync with the payment provider. See [Webhooks](https://dashboard.stripe.com/webhooks). + +In addition to setting these two options, you also need to define a [Stripe webhook](https://dashboard.stripe.com/webhooks) +for the `customer.subscription.updated` and `customer.subscription.deleted` event, which points +to `https://ntfy.example.com/v1/account/billing/webhook`. + +Here's an example: + +``` yaml +stripe-secret-key: "sk_live_ZmhzZGtmbGhkc2tqZmhzYcO2a2hmbGtnaHNkbGtnaGRsc2hnbG" +stripe-webhook-key: "whsec_ZnNkZnNIRExBSFNES0hBRFNmaHNka2ZsaGR" +``` + ## Rate limiting !!! info Be aware that if you are running ntfy behind a proxy, you must set the `behind-proxy` flag. @@ -821,7 +885,15 @@ request every 5s (defined by `visitor-request-limit-replenish`) * `visitor-request-limit-replenish` is the rate at which the bucket is refilled (one request per x). Defaults to 5s. * `visitor-request-limit-exempt-hosts` is a comma-separated list of hostnames and IPs to be exempt from request rate limiting; hostnames are resolved at the time the server is started. Defaults to an empty list. - + +### Message limits +By default, the number of messages a visitor can send is governed entirely by the [request limit](#request-limits). +For instance, if the request limit allows for 15,000 requests per day, and all of those requests are POST/PUT requests +to publish messages, then that is the daily message limit. + +To limit the number of daily messages per visitor, you can set `visitor-message-daily-limit`. This defines the number +of messages a visitor can send in a day. This counter is reset every day at midnight (UTC). + ### Attachment limits Aside from the global file size and total attachment cache limits (see [above](#attachments)), there are two relevant per-visitor limits: @@ -995,18 +1067,57 @@ and [here](https://easyengine.io/tutorials/nginx/block-wp-login-php-bruteforce-a maxretry = 10 ``` -## Debugging/tracing +## Logging & debugging +By default, ntfy logs to the console (stderr), with an `info` log level, and in a human-readable text format. + +ntfy supports five different log levels, can also write to a file, log as JSON, and even supports granular +log level overrides for easier debugging. Some options (`log-level` and `log-level-overrides`) can be hot reloaded +by calling `kill -HUP $pid` or `systemctl reload ntfy`. + +The following config options define the logging behavior: + +* `log-format` defines the output format, can be `text` (default) or `json` +* `log-file` is a filename to write logs to. If this is not set, ntfy logs to stderr. +* `log-level` defines the default log level, can be one of `trace`, `debug`, `info` (default), `warn` or `error`. + Be aware that `debug` (and particularly `trace`) can be **very verbose**. Only turn them on briefly for debugging purposes. +* `log-level-overrides` lets you override the log level if certain fields match. This is incredibly powerful + for debugging certain parts of the system (e.g. only the account management, or only a certain visitor). + This is an array of strings in the format: + - `field=value -> level` to match a value exactly, e.g. `tag=manager -> trace` + - `field -> level` to match any value, e.g. `time_taken_ms -> debug` + +**Logging config (good for production use):** +``` yaml +log-level: info +log-format: json +log-file: /var/log/ntfy.log +``` + +**Temporary debugging:** If something's not working right, you can debug/trace through what the ntfy server is doing by setting the `log-level` -to `DEBUG` or `TRACE`. The `DEBUG` setting will output information about each published message, but not the message -contents. The `TRACE` setting will also print the message contents. +to `debug` or `trace`. The `debug` setting will output information about each published message, but not the message +contents. The `trace` setting will also print the message contents. + +Alternatively, you can set `log-level-overrides` for only certain fields, such as a visitor's IP address (`visitor_ip`), +a username (`user_name`), or a tag (`tag`). There are dozens of fields you can use to override log levels. To learn what +they are, either turn the log-level to `trace` and observe, or reference the [source code](https://github.com/binwiederhier/ntfy). + +Here's an example that will output only `info` log events, except when they match either of the defined overrides: +``` yaml +log-level: info +log-level-overrides: + - "tag=manager -> trace" + - "visitor_ip=1.2.3.4 -> debug" + - "time_taken_ms -> debug" +``` !!! warning - Both options are very verbose and should only be enabled in production for short periods of time. Otherwise, - you're going to run out of disk space pretty quickly. + The `debug` and `trace` log levels are very verbose, and using `log-level-overrides` has a + performance penalty. Only use it for temporary debugging. -You can also hot-reload the `log-level` by sending the `SIGHUP` signal to the process after editing the `server.yml` file. -You can do so by calling `systemctl reload ntfy` (if ntfy is running inside systemd), or by calling `kill -HUP $(pidof ntfy)`. -If successful, you'll see something like this: +You can also hot-reload the `log-level` and `log-level-overrides` by sending the `SIGHUP` signal to the process after +editing the `server.yml` file. You can do so by calling `systemctl reload ntfy` (if ntfy is running inside systemd), +or by calling `kill -HUP $(pidof ntfy)`. If successful, you'll see something like this: ``` $ ntfy serve @@ -1062,6 +1173,7 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `visitor-attachment-daily-bandwidth-limit` | `NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT` | *size* | 500M | Rate limiting: Total daily attachment download/upload traffic limit per visitor. This is to protect your bandwidth costs from exploding. | | `visitor-email-limit-burst` | `NTFY_VISITOR_EMAIL_LIMIT_BURST` | *number* | 16 | Rate limiting:Initial limit of e-mails per visitor | | `visitor-email-limit-replenish` | `NTFY_VISITOR_EMAIL_LIMIT_REPLENISH` | *duration* | 1h | Rate limiting: Strongly related to `visitor-email-limit-burst`: The rate at which the bucket is refilled | +| `visitor-message-daily-limit` | `NTFY_VISITOR_MESSAGE_DAILY_LIMIT` | *number* | - | Rate limiting: Allowed number of messages per day per visitor, reset every day at midnight (UTC). By default, this value is unset. | | `visitor-request-limit-burst` | `NTFY_VISITOR_REQUEST_LIMIT_BURST` | *number* | 60 | Rate limiting: Allowed GET/PUT/POST requests per second, per visitor. This setting is the initial bucket of requests each visitor has | | `visitor-request-limit-replenish` | `NTFY_VISITOR_REQUEST_LIMIT_REPLENISH` | *duration* | 5s | Rate limiting: Strongly related to `visitor-request-limit-burst`: The rate at which the bucket is refilled | | `visitor-request-limit-exempt-hosts` | `NTFY_VISITOR_REQUEST_LIMIT_EXEMPT_HOSTS` | *comma-separated host/IP list* | - | Rate limiting: List of hostnames and IPs to be exempt from request rate limiting | @@ -1090,58 +1202,71 @@ CATEGORY: DESCRIPTION: Run the ntfy server and listen for incoming requests - + The command will load the configuration from /etc/ntfy/server.yml. Config options can be overridden using the command line options. - + Examples: ntfy serve # Starts server in the foreground (on port 80) ntfy serve --listen-http :8080 # Starts server with alternate port OPTIONS: - --attachment-cache-dir value, --attachment_cache_dir value cache directory for attached files [$NTFY_ATTACHMENT_CACHE_DIR] - --attachment-expiry-duration value, --attachment_expiry_duration value, -X value duration after which uploaded attachments will be deleted (e.g. 3h, 20h) (default: 3h) [$NTFY_ATTACHMENT_EXPIRY_DURATION] - --attachment-file-size-limit value, --attachment_file_size_limit value, -Y value per-file attachment size limit (e.g. 300k, 2M, 100M) (default: 15M) [$NTFY_ATTACHMENT_FILE_SIZE_LIMIT] - --attachment-total-size-limit value, --attachment_total_size_limit value, -A value limit of the on-disk attachment cache (default: 5G) [$NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT] - --auth-default-access value, --auth_default_access value, -p value default permissions if no matching entries in the auth database are found (default: "read-write") [$NTFY_AUTH_DEFAULT_ACCESS] - --auth-file value, --auth_file value, -H value auth database file used for access control [$NTFY_AUTH_FILE] - --base-url value, --base_url value, -B value externally visible base URL for this host (e.g. https://ntfy.sh) [$NTFY_BASE_URL] - --behind-proxy, --behind_proxy, -P if set, use X-Forwarded-For header to determine visitor IP address (for rate limiting) (default: false) [$NTFY_BEHIND_PROXY] - --cache-duration since, --cache_duration since, -b since buffer messages for this time to allow since requests (default: 12h0m0s) [$NTFY_CACHE_DURATION] - --cache-file value, --cache_file value, -C value cache file used for message caching [$NTFY_CACHE_FILE] - --cache-batch-size value, --cache_batch_size value max size of messages to batch together when writing to message cache (if zero, writes are synchronous) (default: 0) [$NTFY_BATCH_SIZE] - --cache-batch-timeout value, --cache_batch_timeout value timeout for batched async writes to the message cache (if zero, writes are synchronous) (default: 0s) [$NTFY_CACHE_BATCH_TIMEOUT] - --cache-startup-queries value, --cache_startup_queries value queries run when the cache database is initialized [$NTFY_CACHE_STARTUP_QUERIES] - --cert-file value, --cert_file value, -E value certificate file, if listen-https is set [$NTFY_CERT_FILE] - --config value, -c value config file (default: /etc/ntfy/server.yml) [$NTFY_CONFIG_FILE] - --debug, -d enable debug logging (default: false) [$NTFY_DEBUG] - --firebase-key-file value, --firebase_key_file value, -F value Firebase credentials file; if set additionally publish to FCM topic [$NTFY_FIREBASE_KEY_FILE] - --global-topic-limit value, --global_topic_limit value, -T value total number of topics allowed (default: 15000) [$NTFY_GLOBAL_TOPIC_LIMIT] - --keepalive-interval value, --keepalive_interval value, -k value interval of keepalive messages (default: 45s) [$NTFY_KEEPALIVE_INTERVAL] - --key-file value, --key_file value, -K value private key file, if listen-https is set [$NTFY_KEY_FILE] - --listen-http value, --listen_http value, -l value ip:port used to as HTTP listen address (default: ":80") [$NTFY_LISTEN_HTTP] - --listen-https value, --listen_https value, -L value ip:port used to as HTTPS listen address [$NTFY_LISTEN_HTTPS] - --listen-unix value, --listen_unix value, -U value listen on unix socket path [$NTFY_LISTEN_UNIX] - --log-level value, --log_level value set log level (default: "INFO") [$NTFY_LOG_LEVEL] - --manager-interval value, --manager_interval value, -m value interval of for message pruning and stats printing (default: 1m0s) [$NTFY_MANAGER_INTERVAL] - --no-log-dates, --no_log_dates disable the date/time prefix (default: false) [$NTFY_NO_LOG_DATES] - --smtp-sender-addr value, --smtp_sender_addr value SMTP server address (host:port) for outgoing emails [$NTFY_SMTP_SENDER_ADDR] - --smtp-sender-from value, --smtp_sender_from value SMTP sender address (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_FROM] - --smtp-sender-pass value, --smtp_sender_pass value SMTP password (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_PASS] - --smtp-sender-user value, --smtp_sender_user value SMTP user (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_USER] - --smtp-server-addr-prefix value, --smtp_server_addr_prefix value SMTP email address prefix for topics to prevent spam (e.g. 'ntfy-') [$NTFY_SMTP_SERVER_ADDR_PREFIX] - --smtp-server-domain value, --smtp_server_domain value SMTP domain for incoming e-mail, e.g. ntfy.sh [$NTFY_SMTP_SERVER_DOMAIN] - --smtp-server-listen value, --smtp_server_listen value SMTP server address (ip:port) for incoming emails, e.g. :25 [$NTFY_SMTP_SERVER_LISTEN] - --trace enable tracing (very verbose, be careful) (default: false) [$NTFY_TRACE] - --upstream-base-url value, --upstream_base_url value forward poll request to an upstream server, this is needed for iOS push notifications for self-hosted servers [$NTFY_UPSTREAM_BASE_URL] - --visitor-attachment-daily-bandwidth-limit value, --visitor_attachment_daily_bandwidth_limit value total daily attachment download/upload bandwidth limit per visitor (default: "500M") [$NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT] - --visitor-attachment-total-size-limit value, --visitor_attachment_total_size_limit value total storage limit used for attachments per visitor (default: "100M") [$NTFY_VISITOR_ATTACHMENT_TOTAL_SIZE_LIMIT] - --visitor-email-limit-burst value, --visitor_email_limit_burst value initial limit of e-mails per visitor (default: 16) [$NTFY_VISITOR_EMAIL_LIMIT_BURST] - --visitor-email-limit-replenish value, --visitor_email_limit_replenish value interval at which burst limit is replenished (one per x) (default: 1h0m0s) [$NTFY_VISITOR_EMAIL_LIMIT_REPLENISH] - --visitor-request-limit-burst value, --visitor_request_limit_burst value initial limit of requests per visitor (default: 60) [$NTFY_VISITOR_REQUEST_LIMIT_BURST] - --visitor-request-limit-exempt-hosts value, --visitor_request_limit_exempt_hosts value hostnames and/or IP addresses of hosts that will be exempt from the visitor request limit [$NTFY_VISITOR_REQUEST_LIMIT_EXEMPT_HOSTS] - --visitor-request-limit-replenish value, --visitor_request_limit_replenish value interval at which burst limit is replenished (one per x) (default: 5s) [$NTFY_VISITOR_REQUEST_LIMIT_REPLENISH] - --visitor-subscription-limit value, --visitor_subscription_limit value number of subscriptions per visitor (default: 30) [$NTFY_VISITOR_SUBSCRIPTION_LIMIT] - --web-root value, --web_root value sets web root to landing page (home), web app (app) or disabled (disable) (default: "app") [$NTFY_WEB_ROOT] + --debug, -d enable debug logging (default: false) [$NTFY_DEBUG] + --trace enable tracing (very verbose, be careful) (default: false) [$NTFY_TRACE] + --no-log-dates, --no_log_dates disable the date/time prefix (default: false) [$NTFY_NO_LOG_DATES] + --log-level value, --log_level value set log level (default: "INFO") [$NTFY_LOG_LEVEL] + --log-level-overrides value, --log_level_overrides value [ --log-level-overrides value, --log_level_overrides value ] set log level overrides [$NTFY_LOG_LEVEL_OVERRIDES] + --log-format value, --log_format value set log format (default: "text") [$NTFY_LOG_FORMAT] + --log-file value, --log_file value set log file, default is STDOUT [$NTFY_LOG_FILE] + --config value, -c value config file (default: /etc/ntfy/server.yml) [$NTFY_CONFIG_FILE] + --base-url value, --base_url value, -B value externally visible base URL for this host (e.g. https://ntfy.sh) [$NTFY_BASE_URL] + --listen-http value, --listen_http value, -l value ip:port used to as HTTP listen address (default: ":80") [$NTFY_LISTEN_HTTP] + --listen-https value, --listen_https value, -L value ip:port used to as HTTPS listen address [$NTFY_LISTEN_HTTPS] + --listen-unix value, --listen_unix value, -U value listen on unix socket path [$NTFY_LISTEN_UNIX] + --listen-unix-mode value, --listen_unix_mode value file permissions of unix socket, e.g. 0700 (default: system default) [$NTFY_LISTEN_UNIX_MODE] + --key-file value, --key_file value, -K value private key file, if listen-https is set [$NTFY_KEY_FILE] + --cert-file value, --cert_file value, -E value certificate file, if listen-https is set [$NTFY_CERT_FILE] + --firebase-key-file value, --firebase_key_file value, -F value Firebase credentials file; if set additionally publish to FCM topic [$NTFY_FIREBASE_KEY_FILE] + --cache-file value, --cache_file value, -C value cache file used for message caching [$NTFY_CACHE_FILE] + --cache-duration since, --cache_duration since, -b since buffer messages for this time to allow since requests (default: 12h0m0s) [$NTFY_CACHE_DURATION] + --cache-batch-size value, --cache_batch_size value max size of messages to batch together when writing to message cache (if zero, writes are synchronous) (default: 0) [$NTFY_BATCH_SIZE] + --cache-batch-timeout value, --cache_batch_timeout value timeout for batched async writes to the message cache (if zero, writes are synchronous) (default: 0s) [$NTFY_CACHE_BATCH_TIMEOUT] + --cache-startup-queries value, --cache_startup_queries value queries run when the cache database is initialized [$NTFY_CACHE_STARTUP_QUERIES] + --auth-file value, --auth_file value, -H value auth database file used for access control [$NTFY_AUTH_FILE] + --auth-startup-queries value, --auth_startup_queries value queries run when the auth database is initialized [$NTFY_AUTH_STARTUP_QUERIES] + --auth-default-access value, --auth_default_access value, -p value default permissions if no matching entries in the auth database are found (default: "read-write") [$NTFY_AUTH_DEFAULT_ACCESS] + --attachment-cache-dir value, --attachment_cache_dir value cache directory for attached files [$NTFY_ATTACHMENT_CACHE_DIR] + --attachment-total-size-limit value, --attachment_total_size_limit value, -A value limit of the on-disk attachment cache (default: 5G) [$NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT] + --attachment-file-size-limit value, --attachment_file_size_limit value, -Y value per-file attachment size limit (e.g. 300k, 2M, 100M) (default: 15M) [$NTFY_ATTACHMENT_FILE_SIZE_LIMIT] + --attachment-expiry-duration value, --attachment_expiry_duration value, -X value duration after which uploaded attachments will be deleted (e.g. 3h, 20h) (default: 3h) [$NTFY_ATTACHMENT_EXPIRY_DURATION] + --keepalive-interval value, --keepalive_interval value, -k value interval of keepalive messages (default: 45s) [$NTFY_KEEPALIVE_INTERVAL] + --manager-interval value, --manager_interval value, -m value interval of for message pruning and stats printing (default: 1m0s) [$NTFY_MANAGER_INTERVAL] + --disallowed-topics value, --disallowed_topics value [ --disallowed-topics value, --disallowed_topics value ] topics that are not allowed to be used [$NTFY_DISALLOWED_TOPICS] + --web-root value, --web_root value sets web root to landing page (home), web app (app) or disabled (disable) (default: "app") [$NTFY_WEB_ROOT] + --enable-signup, --enable_signup allows users to sign up via the web app, or API (default: false) [$NTFY_ENABLE_SIGNUP] + --enable-login, --enable_login allows users to log in via the web app, or API (default: false) [$NTFY_ENABLE_LOGIN] + --enable-reservations, --enable_reservations allows users to reserve topics (if their tier allows it) (default: false) [$NTFY_ENABLE_RESERVATIONS] + --upstream-base-url value, --upstream_base_url value forward poll request to an upstream server, this is needed for iOS push notifications for self-hosted servers [$NTFY_UPSTREAM_BASE_URL] + --smtp-sender-addr value, --smtp_sender_addr value SMTP server address (host:port) for outgoing emails [$NTFY_SMTP_SENDER_ADDR] + --smtp-sender-user value, --smtp_sender_user value SMTP user (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_USER] + --smtp-sender-pass value, --smtp_sender_pass value SMTP password (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_PASS] + --smtp-sender-from value, --smtp_sender_from value SMTP sender address (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_FROM] + --smtp-server-listen value, --smtp_server_listen value SMTP server address (ip:port) for incoming emails, e.g. :25 [$NTFY_SMTP_SERVER_LISTEN] + --smtp-server-domain value, --smtp_server_domain value SMTP domain for incoming e-mail, e.g. ntfy.sh [$NTFY_SMTP_SERVER_DOMAIN] + --smtp-server-addr-prefix value, --smtp_server_addr_prefix value SMTP email address prefix for topics to prevent spam (e.g. 'ntfy-') [$NTFY_SMTP_SERVER_ADDR_PREFIX] + --global-topic-limit value, --global_topic_limit value, -T value total number of topics allowed (default: 15000) [$NTFY_GLOBAL_TOPIC_LIMIT] + --visitor-subscription-limit value, --visitor_subscription_limit value number of subscriptions per visitor (default: 30) [$NTFY_VISITOR_SUBSCRIPTION_LIMIT] + --visitor-attachment-total-size-limit value, --visitor_attachment_total_size_limit value total storage limit used for attachments per visitor (default: "100M") [$NTFY_VISITOR_ATTACHMENT_TOTAL_SIZE_LIMIT] + --visitor-attachment-daily-bandwidth-limit value, --visitor_attachment_daily_bandwidth_limit value total daily attachment download/upload bandwidth limit per visitor (default: "500M") [$NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT] + --visitor-request-limit-burst value, --visitor_request_limit_burst value initial limit of requests per visitor (default: 60) [$NTFY_VISITOR_REQUEST_LIMIT_BURST] + --visitor-request-limit-replenish value, --visitor_request_limit_replenish value interval at which burst limit is replenished (one per x) (default: 5s) [$NTFY_VISITOR_REQUEST_LIMIT_REPLENISH] + --visitor-request-limit-exempt-hosts value, --visitor_request_limit_exempt_hosts value hostnames and/or IP addresses of hosts that will be exempt from the visitor request limit [$NTFY_VISITOR_REQUEST_LIMIT_EXEMPT_HOSTS] + --visitor-message-daily-limit value, --visitor_message_daily_limit value max messages per visitor per day, derived from request limit if unset (default: 0) [$NTFY_VISITOR_MESSAGE_DAILY_LIMIT] + --visitor-email-limit-burst value, --visitor_email_limit_burst value initial limit of e-mails per visitor (default: 16) [$NTFY_VISITOR_EMAIL_LIMIT_BURST] + --visitor-email-limit-replenish value, --visitor_email_limit_replenish value interval at which burst limit is replenished (one per x) (default: 1h0m0s) [$NTFY_VISITOR_EMAIL_LIMIT_REPLENISH] + --behind-proxy, --behind_proxy, -P if set, use X-Forwarded-For header to determine visitor IP address (for rate limiting) (default: false) [$NTFY_BEHIND_PROXY] + --stripe-secret-key value, --stripe_secret_key value key used for the Stripe API communication, this enables payments [$NTFY_STRIPE_SECRET_KEY] + --stripe-webhook-key value, --stripe_webhook_key value key required to validate the authenticity of incoming webhooks from Stripe [$NTFY_STRIPE_WEBHOOK_KEY] + --help, -h show help (default: false) ``` diff --git a/docs/publish.md b/docs/publish.md index 8476ca6..d0071fd 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -3150,9 +3150,6 @@ that you can use to try out what [authentication and access control](#authentica |------------------------------------------------|-----------------------------------|------------------------------------------------------|--------------------------------------| | [announcements](https://ntfy.sh/announcements) | `*` (unauthenticated) | Read-only for everyone | Release announcements and such | | [stats](https://ntfy.sh/stats) | `*` (unauthenticated) | Read-only for everyone | Daily statistics about ntfy.sh usage | -| [mytopic-rw](https://ntfy.sh/mytopic-rw) | `testuser` (password: `testuser`) | Read-write for `testuser`, no access for anyone else | Test topic | -| [mytopic-ro](https://ntfy.sh/mytopic-ro) | `testuser` (password: `testuser`) | Read-only for `testuser`, no access for anyone else | Test topic | -| [mytopic-wo](https://ntfy.sh/mytopic-wo) | `testuser` (password: `testuser`) | Write-only for `testuser`, no access for anyone else | Test topic | ## Limitations There are a few limitations to the API to prevent abuse and to keep the server healthy. Almost all of these settings diff --git a/server/server.go b/server/server.go index b0d5724..169ccd7 100644 --- a/server/server.go +++ b/server/server.go @@ -35,9 +35,8 @@ import ( /* - MEDIUM fail2ban to work with ntfy log not nginx log -- HIGH Docs - - tiers - - api +- HIGH test for delayed sending +- LOW https://github.com/binwiederhier/ntfy/actions/runs/4169886276/jobs/7218312719 */ diff --git a/server/server.yml b/server/server.yml index 6e348c1..91ae8b0 100644 --- a/server/server.yml +++ b/server/server.yml @@ -246,7 +246,7 @@ # Logging options # -# By default, ntfy logs to the console (stderr), with a "info" log level, and in a human-readable text format. +# By default, ntfy logs to the console (stderr), with an "info" log level, and in a human-readable text format. # ntfy supports five different log levels, can also write to a file, log as JSON, and even supports granular # log level overrides for easier debugging. Some options (log-level and log-level-overrides) can be hot reloaded # by calling "kill -HUP $pid" or "systemctl reload ntfy". From 66cf54e4586a6db8ff660861935521ff47ce59d1 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 14:05:41 -0500 Subject: [PATCH 10/79] Fix delayed messages expiry, thanks to @karmanyaahm --- server/server.go | 2 +- server/server_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/server/server.go b/server/server.go index 169ccd7..d910284 100644 --- a/server/server.go +++ b/server/server.go @@ -618,7 +618,7 @@ func (s *Server) handlePublishWithoutResponse(r *http.Request, v *visitor) (*mes } m.Sender = v.IP() m.User = v.MaybeUserID() - m.Expires = time.Now().Add(v.Limits().MessageExpiryDuration).Unix() + m.Expires = time.Unix(m.Time, 0).Add(v.Limits().MessageExpiryDuration).Unix() if err := s.handlePublishBody(r, v, m, body, unifiedpush); err != nil { return nil, err } diff --git a/server/server_test.go b/server/server_test.go index 375a590..fb78523 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -324,6 +324,18 @@ func TestServer_PublishAt(t *testing.T) { require.Equal(t, "9.9.9.9", messages[0].Sender.String()) // It's stored in the DB though! } +func TestServer_PublishAt_Expires(t *testing.T) { + s := newTestServer(t, newTestConfig(t)) + + response := request(t, s, "PUT", "/mytopic", "a message", map[string]string{ + "In": "2 days", + }) + require.Equal(t, 200, response.Code) + m := toMessage(t, response.Body.String()) + require.True(t, m.Expires > time.Now().Add(12*time.Hour+48*time.Hour-time.Minute).Unix()) + require.True(t, m.Expires < time.Now().Add(12*time.Hour+48*time.Hour+time.Minute).Unix()) +} + func TestServer_PublishAtWithCacheError(t *testing.T) { s := newTestServer(t, newTestConfig(t)) From 80292f1f4df9ce20627499d2f17fff2ea9c2c053 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 14:26:30 -0500 Subject: [PATCH 11/79] Tiny changes --- docs/config.md | 2 +- server/server.go | 8 -------- web/src/components/Account.js | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/docs/config.md b/docs/config.md index c735844..0a2e6aa 100644 --- a/docs/config.md +++ b/docs/config.md @@ -838,7 +838,7 @@ config options: * `stripe-secret-key` is the key used for the Stripe API communication. Setting this values enables payments in the ntfy web app (e.g. Upgrade dialog). See [API keys](https://dashboard.stripe.com/apikeys). * `stripe-webhook-key` is the key required to validate the authenticity of incoming webhooks from Stripe. - Webhooks are essential up keep the local database in sync with the payment provider. See [Webhooks](https://dashboard.stripe.com/webhooks). + Webhooks are essential to keep the local database in sync with the payment provider. See [Webhooks](https://dashboard.stripe.com/webhooks). In addition to setting these two options, you also need to define a [Stripe webhook](https://dashboard.stripe.com/webhooks) for the `customer.subscription.updated` and `customer.subscription.deleted` event, which points diff --git a/server/server.go b/server/server.go index d910284..4334800 100644 --- a/server/server.go +++ b/server/server.go @@ -32,14 +32,6 @@ import ( "unicode/utf8" ) -/* - -- MEDIUM fail2ban to work with ntfy log not nginx log -- HIGH test for delayed sending -- LOW https://github.com/binwiederhier/ntfy/actions/runs/4169886276/jobs/7218312719 - -*/ - // Server is the main server, providing the UI and API for ntfy type Server struct { config *Config diff --git a/web/src/components/Account.js b/web/src/components/Account.js index f815668..224999b 100644 --- a/web/src/components/Account.js +++ b/web/src/components/Account.js @@ -451,7 +451,7 @@ const Tokens = () => { + Link: }} /> From 31a87935a5dd48352bd3d487a9288039a40a0ecc Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 14:39:22 -0500 Subject: [PATCH 12/79] Refine iOS docs --- docs/develop.md | 56 +++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/docs/develop.md b/docs/develop.md index 8bc4a47..a53c503 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -327,22 +327,21 @@ To build your own version with Firebase, you must: ``` ## iOS app +Building the iOS app is very involved. Please report any inconsistencies or issues with it. The requirements are +strictly based off of my development on this app. There may be other versions of macOS / XCode that work. -## Requirements -!!! note - These requirements are strictly based off of my development on this app. There may be other versions of macOS / XCode that work. Feel free to test on other versions! - +### Requirements 1. macOS Monterey or later 1. XCode 13.2+ -1. A physical iOS device (for push notifications, I could not get them to work in the XCode simulator) -1. The [macOS development branch for ntfy](https://github.com/Copephobia/ntfy/tree/macos-development) (for APNS configuration) +1. A physical iOS device (for push notifications, Firebase does not work in the XCode simulator) 1. Firebase account -1. Apple Developer license? (I forget if its possible to do testing without purchasing the license) +1. Apple Developer license? (I forget if it's possible to do testing without purchasing the license) -## Setup - Apple Developer/iOS Instant Notification Setup +### Apple setup !!! info - Along with this step, the "Setup - PLIST Deployment and Configuration" step is also required for these changes to take effect in the iOS app. + Along with this step, the [PLIST Deployment](#plist-deployment-and-configuration) step is also required + for these changes to take effect in the iOS app. 1. [Create a new key in Apple Developer Member Center](https://developer.apple.com/account/resources/authkeys/add) 1. Select "Apple Push Notifications service (APNs)" @@ -353,9 +352,13 @@ To build your own version with Firebase, you must: !!! warning If you don't do the above setups for APNS, **notifications will not post instantly or sometimes at all**. This is because of the missing APNS key, which is required for firebase to send notifications to the iOS app. See below for a snip from the firebase docs. -> If you don't have an APNs authentication key, you can still send notifications to iOS devices, but they won't be delivered instantly. Instead, they'll be delivered when the device wakes up to check for new notifications or when your application sends a firebase request to check for them. The time to check for new notifications can vary from a few seconds to hours, days or even weeks. Enabling APNs authentication keys ensures that notifications are delivered instantly and is strongly recommended. +If you don't have an APNs authentication key, you can still send notifications to iOS devices, but they won't be delivered +instantly. Instead, they'll be delivered when the device wakes up to check for new notifications or when your application +sends a firebase request to check for them. The time to check for new notifications can vary from a few seconds to hours, +days or even weeks. Enabling APNs authentication keys ensures that notifications are delivered instantly and is strongly +recommended. -## Setup - Firebase +### Firebase setup 1. If you haven't already, create a Google / Firebase account 1. Visit the [Firebase console](https://console.firebase.google.com) @@ -370,37 +373,30 @@ To build your own version with Firebase, you must: 1. Go to "Project settings" > "Service accounts" 1. Click "Generate new private key" to generate and download a private key to use for sending messages via the ntfy server -## Setup - ntfy server +### ntfy server +Note that the ntfy server is not officially supported on macOS. It should, however, be able to run on macOS using these +steps: -1. Checkout the [macOS development branch for ntfy](https://github.com/Copephobia/ntfy/tree/macos-development) 1. If not already made, make the `/etc/ntfy/` directory and move the service account private key to that folder 1. Copy the `server/server.yml` file from the ntfy repository to `/etc/ntfy/` 1. Modify the `/etc/ntfy/server.yml` file `firebase-key-file` value to the path of the private key 1. Install go: `brew install go` -1. In the ntfy repository, run `make build-simple` +1. In the ntfy repository, run `make cli-darwin-server`. -## Setup - XCode +### XCode setup -1. Follow step 4 of [https://firebase.google.com/docs/ios/setup](Add Firebase to your Apple project) to install the firebase-ios-sdk in XCode, if it's not already present - you can select any packages in addition to Firebase Core / Firebase Messaging +1. Follow step 4 of [https://firebase.google.com/docs/ios/setup](Add Firebase to your Apple project) to install the + `firebase-ios-sdk` in XCode, if it's not already present - you can select any packages in addition to Firebase Core / Firebase Messaging 1. Similarly, install the SQLite.swift package dependency in XCode 1. When running the debug build, ensure XCode is pointed to the connected iOS device - registering for push notifications does not work in the iOS simulators -## Setup - PLIST Deployment and Configuration -To have intstant notifications/better notification delivery when using firebase, you will need to add the `GoogleService-Info.plist` file to your project. Here's how to do that: +### PLIST config +To have instant notifications/better notification delivery when using firebase, you will need to add the +`GoogleService-Info.plist` file to your project. Here's how to do that: 1. In XCode, find the NTFY app target. **Not** the NSE app target. 1. Find the Asset/ folder in the project navigator -1. Drag the `GoogleService-Info.plist` file into the Asset/ folder that you get from the firebase console. It can be found in the "Project settings" > "General" > "Your apps" with a button labled "GoogleService-Info.plist" +1. Drag the `GoogleService-Info.plist` file into the Asset/ folder that you get from the firebase console. It can be + found in the "Project settings" > "General" > "Your apps" with a button labled "GoogleService-Info.plist" After that, you should be all set! - -## Useful resources - -- https://www.raywenderlich.com/14958063-modern-efficient-core-data -- https://www.hackingwithswift.com/books/ios-swiftui/how-to-combine-core-data-and-swiftui -- https://stackoverflow.com/a/41783666/1440785 -- https://stackoverflow.com/questions/47374903/viewing-core-data-data-from-your-app-on-a-device -- https://debashishdas3100.medium.com/save-push-notifications-to-coredata-userdefaults-ios-swift-5-ea074390b57 -- https://cocoacasts.com/cocoa-fundamentals-how-to-access-builds-settings-in-swifti -- https://www.hackingwithswift.com/articles/216/complete-guide-to-navigationview-in-swiftui -- https://stackoverflow.com/a/70731861/1440785 From 5472c8513f8bd4508b8a8f86268665adad08d4e5 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 14:40:41 -0500 Subject: [PATCH 13/79] Release notes --- docs/releases.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/releases.md b/docs/releases.md index a688bf8..1ae4779 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -20,6 +20,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Small wording change for `client.yml` ([#562](https://github.com/binwiederhier/ntfy/pull/562), thanks to [@fleopaulD](https://github.com/fleopaulD)) * Fix K8s install docs ([#582](https://github.com/binwiederhier/ntfy/pull/582), thanks to [@Remedan](https://github.com/Remedan)) * Updated Jellyseer docs ([#604](https://github.com/binwiederhier/ntfy/pull/604), thanks to [@Y0ngg4n](https://github.com/Y0ngg4n)) +* Updated iOS developer docs ([#605](https://github.com/binwiederhier/ntfy/pull/605), thanks to [@SticksDev](https://github.com/SticksDev)) **Additional languages:** From 8d7ff4d7db0d1553775bb9356af57f434a080132 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 20:56:02 -0500 Subject: [PATCH 14/79] SMTP server tests --- docs/releases.md | 1 + go.mod | 34 ++-- go.sum | 34 ++++ server/smtp_server_test.go | 394 +++++++++++++++++++++++-------------- 4 files changed, 293 insertions(+), 170 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 1ae4779..fc510e5 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -13,6 +13,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Fix `chown` issues with RHEL-like based systems ([#566](https://github.com/binwiederhier/ntfy/issues/566)/[#565](https://github.com/binwiederhier/ntfy/pull/565), thanks to [@danieldemus](https://github.com/danieldemus)) * Removed `upx` (binary packing) for all builds due to false virus warnings ([#576](https://github.com/binwiederhier/ntfy/issues/576), thanks to [@shawnhwei](https://github.com/shawnhwei) for reporting) +* Upgraded `go-smtp` library and tests to v0.16.0 ([#569](https://github.com/binwiederhier/ntfy/issues/569)) **Documentation:** diff --git a/go.mod b/go.mod index dda12d4..6cd4fd5 100644 --- a/go.mod +++ b/go.mod @@ -4,22 +4,22 @@ go 1.18 require ( cloud.google.com/go/firestore v1.9.0 // indirect - cloud.google.com/go/storage v1.28.1 // indirect + cloud.google.com/go/storage v1.29.0 // indirect github.com/BurntSushi/toml v1.2.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/emersion/go-smtp v0.15.0 + github.com/emersion/go-smtp v0.16.0 github.com/gabriel-vasile/mimetype v1.4.1 github.com/gorilla/websocket v1.5.0 github.com/mattn/go-sqlite3 v1.14.16 github.com/olebedev/when v0.0.0-20221205223600-4d190b02b8d8 github.com/stretchr/testify v1.8.1 - github.com/urfave/cli/v2 v2.23.7 - golang.org/x/crypto v0.4.0 - golang.org/x/oauth2 v0.3.0 // indirect + github.com/urfave/cli/v2 v2.24.3 + golang.org/x/crypto v0.6.0 + golang.org/x/oauth2 v0.5.0 // indirect golang.org/x/sync v0.1.0 - golang.org/x/term v0.3.0 + golang.org/x/term v0.5.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.105.0 + google.golang.org/api v0.110.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -28,11 +28,11 @@ require github.com/pkg/errors v0.9.1 // indirect require firebase.google.com/go/v4 v4.10.0 require ( - cloud.google.com/go v0.107.0 // indirect - cloud.google.com/go/compute v1.14.0 // indirect + cloud.google.com/go v0.109.0 // indirect + cloud.google.com/go/compute v1.18.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.9.0 // indirect - cloud.google.com/go/longrunning v0.3.0 // indirect + cloud.google.com/go/iam v0.10.0 // indirect + cloud.google.com/go/longrunning v0.4.1 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -42,20 +42,20 @@ require ( github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.7.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/net v0.4.0 // indirect - golang.org/x/sys v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine/v2 v2.0.2 // indirect - google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef // indirect - google.golang.org/grpc v1.51.0 // indirect + google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc // indirect + google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0ad0057..2ee309f 100644 --- a/go.sum +++ b/go.sum @@ -1,18 +1,28 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.107.0 h1:qkj22L7bgkl6vIeZDlOY2po43Mx/TIa2Wsa7VR+PEww= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.109.0 h1:38CZoKGlCnPZjGdyj0ZfpoGae0/wgNfy5F0byyxg0Gk= +cloud.google.com/go v0.109.0/go.mod h1:2sYycXt75t/CSB5R9M2wPU1tJmire7AQZTPtITcGBVE= cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= cloud.google.com/go/iam v0.9.0 h1:bK6Or6mxhuL8lnj1i9j0yMo2wE/IeTO2cWlfUrf/TZs= cloud.google.com/go/iam v0.9.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= +cloud.google.com/go/iam v0.10.0 h1:fpP/gByFs6US1ma53v7VxhvbJpO2Aapng6wabJ99MuI= +cloud.google.com/go/iam v0.10.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/storage v1.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI= cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= firebase.google.com/go/v4 v4.10.0 h1:dgK/8uwfJbzc5LZK/GyRRfIkZEDObN9q0kgEXsjlXN4= firebase.google.com/go/v4 v4.10.0/go.mod h1:m0gLwPY9fxKggizzglgCNWOGnFnVPifLpqZzo5u3e/A= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= @@ -35,6 +45,8 @@ github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead h1:fI1Jck0vUrXT8b github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-smtp v0.15.0 h1:3+hMGMGrqP/lqd7qoxZc1hTU8LY8gHV9RFGWlqSDmP8= github.com/emersion/go-smtp v0.15.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= +github.com/emersion/go-smtp v0.16.0 h1:eB9CY9527WdEZSs5sWisTmilDX7gG+Q/2IdRcmubpa8= +github.com/emersion/go-smtp v0.16.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -77,6 +89,8 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.2.1 h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg= github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -101,6 +115,8 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/urfave/cli/v2 v2.23.7 h1:YHDQ46s3VghFHFf1DdF+Sh7H4RqhcM+t0TmZRJx4oJY= github.com/urfave/cli/v2 v2.23.7/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/urfave/cli/v2 v2.24.3 h1:7Q1w8VN8yE0MJEHP06bv89PjYsN4IHWED2s1v/Zlfm0= +github.com/urfave/cli/v2 v2.24.3/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= @@ -109,6 +125,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -124,9 +142,13 @@ golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -140,15 +162,21 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -161,6 +189,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.105.0 h1:t6P9Jj+6XTn4U9I2wycQai6Q/Kz7iOT+QzjJ3G2V4x8= google.golang.org/api v0.105.0/go.mod h1:qh7eD5FJks5+BcE+cjBIm6Gz8vioK7EHvnlniqXBnqI= +google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -172,6 +202,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY= google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc h1:ijGwO+0vL2hJt5gaygqP2j6PfflOBrRot0IczKbmtio= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -179,6 +211,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/server/smtp_server_test.go b/server/smtp_server_test.go index be99d9e..80aa645 100644 --- a/server/smtp_server_test.go +++ b/server/smtp_server_test.go @@ -1,16 +1,23 @@ package server import ( + "bufio" "github.com/emersion/go-smtp" "github.com/stretchr/testify/require" + "io" "net" "net/http" "strings" "testing" + "time" ) func TestSmtpBackend_Multipart(t *testing.T) { - email := `MIME-Version: 1.0 + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: ntfy-mytopic@ntfy.sh +DATA +MIME-Version: 1.0 Date: Tue, 28 Dec 2021 00:30:10 +0100 Message-ID: Subject: and one more @@ -28,20 +35,25 @@ Content-Type: text/html; charset="UTF-8"
what's up

---000000000000f3320b05d42915c9--` - _, backend := newTestBackend(t, func(w http.ResponseWriter, r *http.Request) { +--000000000000f3320b05d42915c9-- +. +` + s, c, _, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "/mytopic", r.URL.Path) require.Equal(t, "and one more", r.Header.Get("Title")) require.Equal(t, "what's up", readAll(t, r.Body)) }) - session, _ := backend.NewSession(fakeConnState(t, "1.2.3.4")) - require.Nil(t, session.Mail("phil@example.com", &smtp.MailOptions{})) - require.Nil(t, session.Rcpt("ntfy-mytopic@ntfy.sh")) - require.Nil(t, session.Data(strings.NewReader(email))) + defer s.Close() + defer c.Close() + writeAndReadUntilLine(t, email, c, scanner, "250 2.0.0 OK: queued") } func TestSmtpBackend_MultipartNoBody(t *testing.T) { - email := `MIME-Version: 1.0 + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: ntfy-emailtest@ntfy.sh +DATA +MIME-Version: 1.0 Date: Tue, 28 Dec 2021 01:33:34 +0100 Message-ID: Subject: This email has a subject but no body @@ -59,20 +71,25 @@ Content-Type: text/html; charset="UTF-8"

---000000000000bcf4a405d429f8d4--` - _, backend := newTestBackend(t, func(w http.ResponseWriter, r *http.Request) { +--000000000000bcf4a405d429f8d4-- +. +` + s, c, _, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "/emailtest", r.URL.Path) require.Equal(t, "", r.Header.Get("Title")) // We flipped message and body require.Equal(t, "This email has a subject but no body", readAll(t, r.Body)) }) - session, _ := backend.AnonymousLogin(fakeConnState(t, "1.2.3.4")) - require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{})) - require.Nil(t, session.Rcpt("ntfy-emailtest@ntfy.sh")) - require.Nil(t, session.Data(strings.NewReader(email))) + defer s.Close() + defer c.Close() + writeAndReadUntilLine(t, email, c, scanner, "250 2.0.0 OK: queued") } func TestSmtpBackend_Plaintext(t *testing.T) { - email := `Date: Tue, 28 Dec 2021 00:30:10 +0100 + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: mytopic@ntfy.sh +DATA +Date: Tue, 28 Dec 2021 00:30:10 +0100 Message-ID: Subject: and one more From: Phil @@ -80,56 +97,68 @@ To: mytopic@ntfy.sh Content-Type: text/plain; charset="UTF-8" what's up +. ` - conf, backend := newTestBackend(t, func(w http.ResponseWriter, r *http.Request) { + s, c, conf, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "/mytopic", r.URL.Path) require.Equal(t, "and one more", r.Header.Get("Title")) require.Equal(t, "what's up", readAll(t, r.Body)) }) conf.SMTPServerAddrPrefix = "" - session, _ := backend.AnonymousLogin(fakeConnState(t, "1.2.3.4")) - require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{})) - require.Nil(t, session.Rcpt("mytopic@ntfy.sh")) - require.Nil(t, session.Data(strings.NewReader(email))) + defer s.Close() + defer c.Close() + writeAndReadUntilLine(t, email, c, scanner, "250 2.0.0 OK: queued") } func TestSmtpBackend_Plaintext_No_ContentType(t *testing.T) { - email := `Subject: Very short mail + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: mytopic@ntfy.sh +DATA +Subject: Very short mail what's up +. ` - conf, backend := newTestBackend(t, func(w http.ResponseWriter, r *http.Request) { + s, c, conf, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "/mytopic", r.URL.Path) require.Equal(t, "Very short mail", r.Header.Get("Title")) require.Equal(t, "what's up", readAll(t, r.Body)) }) conf.SMTPServerAddrPrefix = "" - session, _ := backend.AnonymousLogin(fakeConnState(t, "1.2.3.4")) - require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{})) - require.Nil(t, session.Rcpt("mytopic@ntfy.sh")) - require.Nil(t, session.Data(strings.NewReader(email))) + defer s.Close() + defer c.Close() + writeAndReadUntilLine(t, email, c, scanner, "250 2.0.0 OK: queued") } func TestSmtpBackend_Plaintext_EncodedSubject(t *testing.T) { - email := `Date: Tue, 28 Dec 2021 00:30:10 +0100 + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: ntfy-mytopic@ntfy.sh +DATA +Date: Tue, 28 Dec 2021 00:30:10 +0100 Subject: =?UTF-8?B?VGhyZWUgc2FudGFzIPCfjoXwn46F8J+OhQ==?= From: Phil To: ntfy-mytopic@ntfy.sh Content-Type: text/plain; charset="UTF-8" what's up +. ` - _, backend := newTestBackend(t, func(w http.ResponseWriter, r *http.Request) { + s, c, _, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "Three santas 🎅🎅🎅", r.Header.Get("Title")) }) - session, _ := backend.AnonymousLogin(fakeConnState(t, "1.2.3.4")) - require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{})) - require.Nil(t, session.Rcpt("ntfy-mytopic@ntfy.sh")) - require.Nil(t, session.Data(strings.NewReader(email))) + defer s.Close() + defer c.Close() + writeAndReadUntilLine(t, email, c, scanner, "250 2.0.0 OK: queued") } func TestSmtpBackend_Plaintext_TooLongTruncate(t *testing.T) { - email := `Date: Tue, 28 Dec 2021 00:30:10 +0100 + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: mytopic@ntfy.sh +DATA +Date: Tue, 28 Dec 2021 00:30:10 +0100 Message-ID: Subject: and one more From: Phil @@ -148,60 +177,61 @@ so i'm gonna fill the rest of this with AAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp and with BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB that should do it +. ` - conf, backend := newTestBackend(t, func(w http.ResponseWriter, r *http.Request) { + s, c, conf, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { expected := `you know this is a string. it's a long string. it's supposed to be longer than the max message length @@ -214,68 +244,71 @@ so i'm gonna fill the rest of this with AAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... -...................................................................... +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp and with BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBB` require.Equal(t, 4096, len(expected)) // Sanity check require.Equal(t, expected, readAll(t, r.Body)) }) + defer s.Close() + defer c.Close() conf.SMTPServerAddrPrefix = "" - session, _ := backend.AnonymousLogin(fakeConnState(t, "1.2.3.4")) - require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{})) - require.Nil(t, session.Rcpt("mytopic@ntfy.sh")) - require.Nil(t, session.Data(strings.NewReader(email))) + writeAndReadUntilLine(t, email, c, scanner, "250 2.0.0 OK: queued") } func TestSmtpBackend_Unsupported(t *testing.T) { - email := `Date: Tue, 28 Dec 2021 00:30:10 +0100 + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: ntfy-mytopic@ntfy.sh +DATA +Date: Tue, 28 Dec 2021 00:30:10 +0100 Message-ID: Subject: and one more From: Phil @@ -283,34 +316,89 @@ To: mytopic@ntfy.sh Content-Type: text/SOMETHINGELSE what's up +. ` - conf, backend := newTestBackend(t, func(http.ResponseWriter, *http.Request) { - // Nothing. + s, c, _, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { + t.Fatal("This should not be called") }) - conf.SMTPServerAddrPrefix = "" - session, _ := backend.Login(fakeConnState(t, "1.2.3.4"), "user", "pass") - require.Nil(t, session.Mail("phil@example.com", smtp.MailOptions{})) - require.Nil(t, session.Rcpt("mytopic@ntfy.sh")) - require.Equal(t, errUnsupportedContentType, session.Data(strings.NewReader(email))) + defer s.Close() + defer c.Close() + writeAndReadUntilLine(t, email, c, scanner, "554 5.0.0 Error: transaction failed, blame it on the weather: unsupported content type") } -func newTestBackend(t *testing.T, handler func(http.ResponseWriter, *http.Request)) (*Config, *smtpBackend) { - conf := newTestConfig(t) +func TestSmtpBackend_InvalidAddress(t *testing.T) { + email := `EHLO example.com +MAIL FROM: phil@example.com +RCPT TO: unsupported@ntfy.sh +DATA +Date: Tue, 28 Dec 2021 00:30:10 +0100 +Subject: and one more +From: Phil +To: mytopic@ntfy.sh +Content-Type: text/plain + +what's up +. +` + s, c, _, scanner := newTestSMTPServer(t, func(w http.ResponseWriter, r *http.Request) { + t.Fatal("This should not be called") + }) + defer s.Close() + defer c.Close() + writeAndReadUntilLine(t, email, c, scanner, "451 4.0.0 invalid address") +} + +type smtpHandlerFunc func(http.ResponseWriter, *http.Request) + +func newTestSMTPServer(t *testing.T, handler smtpHandlerFunc) (s *smtp.Server, c net.Conn, conf *Config, scanner *bufio.Scanner) { + conf = newTestConfig(t) conf.SMTPServerListen = ":25" conf.SMTPServerDomain = "ntfy.sh" conf.SMTPServerAddrPrefix = "ntfy-" backend := newMailBackend(conf, handler) - return conf, backend -} - -func fakeConnState(t *testing.T, remoteAddr string) *smtp.Conn { - ip, err := net.ResolveIPAddr("ip", remoteAddr) + l, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatal(err) } - return &smtp.Conn{ - Hostname: "myhostname", - LocalAddr: ip, - RemoteAddr: ip, + s = smtp.NewServer(backend) + s.Domain = conf.SMTPServerDomain + s.AllowInsecureAuth = true + go func() { + require.Nil(t, s.Serve(l)) + }() + c, err = net.Dial("tcp", l.Addr().String()) + if err != nil { + t.Fatal(err) } + scanner = bufio.NewScanner(c) + return +} + +func writeAndReadUntilLine(t *testing.T, email string, conn net.Conn, scanner *bufio.Scanner, expectedLine string) { + _, err := io.WriteString(conn, email) + require.Nil(t, err) + readUntilLine(t, conn, scanner, expectedLine) +} + +func readUntilLine(t *testing.T, conn net.Conn, scanner *bufio.Scanner, expectedLine string) { + cancelChan := make(chan bool) + go func() { + select { + case <-cancelChan: + case <-time.After(3 * time.Second): + conn.Close() + t.Error("Failed waiting for expected output") + } + }() + var output string + for scanner.Scan() { + text := scanner.Text() + if strings.TrimSpace(text) == expectedLine { + cancelChan <- true + return + } + output += text + "\n" + //fmt.Println(text) + } + t.Fatalf("Expected line '%s' not found in output:\n%s", expectedLine, output) } From f2f5a06be175e09513d459f7c0b48b6bec7622a9 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 20:58:29 -0500 Subject: [PATCH 15/79] Bump JS deps --- web/package-lock.json | 13174 ++-------------------------------------- 1 file changed, 657 insertions(+), 12517 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 014b316..70968e7 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,7 +1,7 @@ { "name": "ntfy", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -52,32 +52,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.20.7", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", "@babel/helpers": "^7.20.7", "@babel/parser": "^7.20.7", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", + "@babel/traverse": "^7.20.12", "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -114,9 +114,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", - "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", "dependencies": { "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", @@ -181,9 +181,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", - "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", + "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -191,6 +191,7 @@ "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -437,12 +438,12 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", - "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", "dependencies": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", + "@babel/traverse": "^7.20.13", "@babel/types": "^7.20.7" }, "engines": { @@ -463,9 +464,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", - "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -552,11 +553,11 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz", - "integrity": "sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.13.tgz", + "integrity": "sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-create-class-features-plugin": "^7.20.12", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", @@ -1055,9 +1056,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", - "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz", + "integrity": "sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1400,9 +1401,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", - "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", + "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", @@ -1566,11 +1567,11 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", - "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", + "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-create-class-features-plugin": "^7.20.12", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-typescript": "^7.20.0" }, @@ -1748,23 +1749,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", - "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz", - "integrity": "sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==", + "node_modules/@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", "dependencies": { - "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.11" }, "engines": { @@ -1785,9 +1779,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz", - "integrity": "sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.20.7", @@ -1795,7 +1789,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.7", + "@babel/parser": "^7.20.13", "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" @@ -2078,18 +2072,18 @@ } }, "node_modules/@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", + "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.2", + "postcss": "^8.4", "postcss-selector-parser": "^6.0.10" } }, @@ -2266,9 +2260,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -3072,14 +3066,14 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.112", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.112.tgz", - "integrity": "sha512-KPwb1iYPXsV/P8uu0SNQrj7v7YU6wdN4Eccc2lZQyRDW+f6PJYjHBuFUTYKc408B98Jvs1XbC/z5MN45a2DWrQ==", + "version": "5.0.0-alpha.118", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.118.tgz", + "integrity": "sha512-GAEpqhnuHjRaAZLdxFNuOf2GDTp9sUawM46oHZV4VnYPFjXJDkIYFWfIQLONb0nga92OiqS5DD/scGzVKCL0Mw==", "dependencies": { - "@babel/runtime": "^7.20.7", + "@babel/runtime": "^7.20.13", "@emotion/is-prop-valid": "^1.2.0", "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.2", + "@mui/utils": "^5.11.9", "@popperjs/core": "^2.11.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -3104,20 +3098,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.11.3", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.3.tgz", - "integrity": "sha512-Bgb6//KtxY7IC7M5Pa5RKFX1wttc213mqpKqydnz3wn4BGDXfA5c0vf5nTu5zqsJeB4T3ysAJTRJhQ/E1GsZDQ==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.9.tgz", + "integrity": "sha512-YGEtucQ/Nl91VZkzYaLad47Cdui51n/hW+OQm4210g4N3/nZzBxmGeKfubEalf+ShKH4aYDS86XTO6q/TpZnjQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz", - "integrity": "sha512-I2LaOKqO8a0xcLGtIozC9xoXjZAto5G5gh0FYUMAlbsIHNHIjn4Xrw9rvjY20vZonyiGrZNMAlAXYkY6JvhF6A==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.9.tgz", + "integrity": "sha512-SPANMk6K757Q1x48nCwPGdSNb8B71d+2hPMJ0V12VWerpSsbjZtvAPi5FAn13l2O5mwWkvI0Kne+0tCgnNxMNw==", "dependencies": { - "@babel/runtime": "^7.20.6" + "@babel/runtime": "^7.20.13" }, "engines": { "node": ">=12.0.0" @@ -3138,16 +3132,16 @@ } }, "node_modules/@mui/material": { - "version": "5.11.3", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.3.tgz", - "integrity": "sha512-Oz+rMFiMtxzzDLUxKyyj4mSxF9ShmsBoJ9qvglXCYqklgSrEl1R/Z4hfPZ+2pWd5CriO8U/0CFHr4DksrlTiCw==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.9.tgz", + "integrity": "sha512-Wb3WzjzYyi/WKSl/XlF7aC8kk2NE21IoHMF7hNQMkPb0GslbWwR4OUjlBpxtG+RSZn44wMZkEDNB9Hw0TDsd8g==", "dependencies": { - "@babel/runtime": "^7.20.7", - "@mui/base": "5.0.0-alpha.112", - "@mui/core-downloads-tracker": "^5.11.3", - "@mui/system": "^5.11.2", + "@babel/runtime": "^7.20.13", + "@mui/base": "5.0.0-alpha.118", + "@mui/core-downloads-tracker": "^5.11.9", + "@mui/system": "^5.11.9", "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.2", + "@mui/utils": "^5.11.9", "@types/react-transition-group": "^4.4.5", "clsx": "^1.2.1", "csstype": "^3.1.1", @@ -3182,12 +3176,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.2.tgz", - "integrity": "sha512-qZwMaqRFPwlYmqwVKblKBGKtIjJRAj3nsvX93pOmatsXyorW7N/0IPE/swPgz1VwChXhHO75DwBEx8tB+aRMNg==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.9.tgz", + "integrity": "sha512-XMyVIFGomVCmCm92EvYlgq3zrC9K+J6r7IKl/rBJT2/xVYoRY6uM7jeB+Wxh7kXxnW9Dbqsr2yL3cx6wSD1sAg==", "dependencies": { - "@babel/runtime": "^7.20.7", - "@mui/utils": "^5.11.2", + "@babel/runtime": "^7.20.13", + "@mui/utils": "^5.11.9", "prop-types": "^15.8.1" }, "engines": { @@ -3208,11 +3202,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.0.tgz", - "integrity": "sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.9.tgz", + "integrity": "sha512-bkh2CjHKOMy98HyOc8wQXEZvhOmDa/bhxMUekFX5IG0/w4f5HJ8R6+K6nakUUYNEgjOWPYzNPrvGB8EcGbhahQ==", "dependencies": { - "@babel/runtime": "^7.20.6", + "@babel/runtime": "^7.20.13", "@emotion/cache": "^11.10.5", "csstype": "^3.1.1", "prop-types": "^15.8.1" @@ -3239,15 +3233,15 @@ } }, "node_modules/@mui/system": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.2.tgz", - "integrity": "sha512-PPkYhrcP2MkhscX6SauIl0wPgra0w1LGPtll+hIKc2Z2JbGRSrUCFif93kxejB7I1cAoCay9jWW4mnNhsOqF/g==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.9.tgz", + "integrity": "sha512-h6uarf+l3FO6l75Nf7yO+qDGrIoa1DM9nAMCUFZQsNCDKOInRzcptnm8M1w/Z3gVetfeeGoIGAYuYKbft6KZZA==", "dependencies": { - "@babel/runtime": "^7.20.7", - "@mui/private-theming": "^5.11.2", - "@mui/styled-engine": "^5.11.0", + "@babel/runtime": "^7.20.13", + "@mui/private-theming": "^5.11.9", + "@mui/styled-engine": "^5.11.9", "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.2", + "@mui/utils": "^5.11.9", "clsx": "^1.2.1", "csstype": "^3.1.1", "prop-types": "^15.8.1" @@ -3291,11 +3285,11 @@ } }, "node_modules/@mui/utils": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.2.tgz", - "integrity": "sha512-AyizuHHlGdAtH5hOOXBW3kriuIwUIKUIgg0P7LzMvzf6jPhoQbENYqY6zJqfoZ7fAWMNNYT8mgN5EftNGzwE2w==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.9.tgz", + "integrity": "sha512-eOJaqzcEs4qEwolcvFAmXGpln+uvouvOS9FUX6Wkrte+4I8rZbjODOBDVNlK+V6/ziTfD4iNKC0G+KfOTApbqg==", "dependencies": { - "@babel/runtime": "^7.20.7", + "@babel/runtime": "^7.20.13", "@types/prop-types": "^15.7.5", "@types/react-is": "^16.7.1 || ^17.0.0", "prop-types": "^15.8.1", @@ -3439,9 +3433,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", - "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.2.tgz", + "integrity": "sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA==", "engines": { "node": ">=14" } @@ -3781,12 +3775,12 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", - "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -3852,9 +3846,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz", + "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3875,20 +3869,20 @@ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "node_modules/@types/express": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", - "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.32", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", - "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3896,9 +3890,9 @@ } }, "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==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dependencies": { "@types/node": "*" } @@ -3953,9 +3947,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", + "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3988,9 +3982,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "18.0.26", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", - "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4067,9 +4061,9 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "node_modules/@types/ws": { "version": "8.5.4", @@ -4093,14 +4087,15 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", - "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", + "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", "dependencies": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/type-utils": "5.48.0", - "@typescript-eslint/utils": "5.48.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/type-utils": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", @@ -4155,11 +4150,11 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.0.tgz", - "integrity": "sha512-ehoJFf67UViwnYuz6JUneZ8qxgDk0qEWKiTLmpE8WpPEr15e2cSLtp0E6Zicx2DaYdwctUA0uLRTbLckxQpurg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.52.0.tgz", + "integrity": "sha512-kd8CRr04mNE3hw4et6+0T0NI5vli2H6dJCGzjX1r12s/FXUehLVadmvo2Nl3DN80YqAh1cVC6zYZAkpmGiVJ5g==", "dependencies": { - "@typescript-eslint/utils": "5.48.0" + "@typescript-eslint/utils": "5.52.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4173,13 +4168,13 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", - "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", "dependencies": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "debug": "^4.3.4" }, "engines": { @@ -4199,12 +4194,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", - "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dependencies": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4215,12 +4210,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", - "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", + "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", "dependencies": { - "@typescript-eslint/typescript-estree": "5.48.0", - "@typescript-eslint/utils": "5.48.0", + "@typescript-eslint/typescript-estree": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4241,9 +4236,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", - "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4253,12 +4248,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", - "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dependencies": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4309,15 +4304,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@typescript-eslint/utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", - "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", + "integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==", "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -4384,11 +4379,11 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", - "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dependencies": { - "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4558,9 +4553,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "bin": { "acorn": "bin/acorn" }, @@ -4793,15 +4788,11 @@ } }, "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" + "deep-equal": "^2.0.5" } }, "node_modules/array-flatten": { @@ -4959,18 +4950,32 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axe-core": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.1.tgz", - "integrity": "sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", + "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", "engines": { "node": ">=4" } }, "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dependencies": { + "deep-equal": "^2.0.5" + } }, "node_modules/babel-jest": { "version": "27.5.1", @@ -5345,9 +5350,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", + "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -5386,9 +5391,9 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -5400,10 +5405,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -5504,9 +5509,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "version": "1.0.30001452", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz", + "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==", "funding": [ { "type": "opencollective", @@ -5606,9 +5611,9 @@ } }, "node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "funding": [ { "type": "github", @@ -5625,9 +5630,9 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" }, "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dependencies": { "source-map": "~0.6.0" }, @@ -5824,9 +5829,9 @@ } }, "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==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -5850,9 +5855,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-js": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz", - "integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.28.0.tgz", + "integrity": "sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5860,11 +5865,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", - "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", + "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", "dependencies": { - "browserslist": "^4.21.4" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", @@ -5872,9 +5877,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz", - "integrity": "sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", + "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6190,9 +6195,9 @@ } }, "node_modules/cssdb": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz", - "integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.4.1.tgz", + "integrity": "sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" @@ -6412,15 +6417,42 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, + "node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "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==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "engines": { "node": ">=0.10.0" } @@ -6445,9 +6477,9 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -6551,9 +6583,9 @@ } }, "node_modules/dexie": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.2.tgz", - "integrity": "sha512-q5dC3HPmir2DERlX+toCBbHQXW5MsyrFqPFcovkH9N2S/UW/H3H5AWAB6iEOExeraAu+j+zRDG+zg/D7YhH0qg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.3.tgz", + "integrity": "sha512-iHayBd4UYryDCVUNa3PMsJMEnd8yjyh5p7a+RFeC8i8n476BC9wMhVvqiImq5zJZJf5Tuer+s4SSj+AA3x+ZbQ==", "engines": { "node": ">=6.0" } @@ -6758,9 +6790,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.295", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==" }, "node_modules/emittery": { "version": "0.8.1", @@ -6831,26 +6863,32 @@ } }, "node_modules/es-abstract": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", - "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dependencies": { + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", "object-inspect": "^1.12.2", "object-keys": "^1.1.1", @@ -6859,7 +6897,9 @@ "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", - "unbox-primitive": "^1.0.2" + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -6873,11 +6913,43 @@ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -7004,9 +7076,9 @@ } }, "node_modules/eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dependencies": { "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", @@ -7086,12 +7158,13 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -7144,22 +7217,24 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "engines": { @@ -7170,11 +7245,11 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -7188,11 +7263,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/eslint-plugin-jest": { "version": "25.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", @@ -7217,22 +7287,25 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", "semver": "^6.3.0" }, "engines": { @@ -7243,9 +7316,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.31.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", - "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -7259,7 +7332,7 @@ "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.8" }, @@ -7309,11 +7382,11 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", - "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.1.tgz", + "integrity": "sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg==", "dependencies": { - "@typescript-eslint/utils": "^5.13.0" + "@typescript-eslint/utils": "^5.43.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0", @@ -7526,9 +7599,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/eslint/node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -7890,9 +7963,9 @@ } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8021,6 +8094,14 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", @@ -8331,9 +8412,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -8460,6 +8541,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -8562,6 +8657,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -8627,6 +8733,11 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -8922,9 +9033,9 @@ } }, "node_modules/immer": { - "version": "9.0.17", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.17.tgz", - "integrity": "sha512-+hBruaLSQvkPfxRiTLK/mi4vLH+/VQS6z2KJahdoxlleFOI8ARqzOF17uy12eFDlqWmPoygwc5evgwcp+dlHhg==", + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", + "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -8991,11 +9102,11 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -9011,6 +9122,34 @@ "node": ">= 10" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -9138,6 +9277,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -9239,6 +9386,14 @@ "node": ">=6" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -9289,11 +9444,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -9305,6 +9486,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9317,9 +9510,9 @@ } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", @@ -11023,9 +11216,9 @@ } }, "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.19.tgz", - "integrity": "sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dependencies": { "@types/yargs-parser": "*" } @@ -11398,14 +11591,14 @@ } }, "node_modules/js-base64": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.3.tgz", - "integrity": "sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A==" + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", + "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" }, "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -11587,9 +11780,9 @@ } }, "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "engines": { "node": ">= 8" } @@ -11600,11 +11793,11 @@ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" }, "node_modules/language-tags": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.7.tgz", - "integrity": "sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dependencies": { - "language-subtag-registry": "^0.3.20" + "language-subtag-registry": "~0.3.2" } }, "node_modules/leven": { @@ -11776,9 +11969,9 @@ } }, "node_modules/memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", + "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", "dependencies": { "fs-monkey": "^1.0.3" }, @@ -11946,9 +12139,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12057,9 +12250,9 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -12132,9 +12325,24 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12285,9 +12493,9 @@ } }, "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.1.tgz", + "integrity": "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -12629,9 +12837,9 @@ } }, "node_modules/postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "funding": [ { "type": "opencollective", @@ -13044,9 +13252,9 @@ } }, "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -13058,7 +13266,7 @@ "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.21" } }, "node_modules/postcss-lab-function": { @@ -13948,9 +14156,9 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } @@ -14266,11 +14474,11 @@ } }, "node_modules/react-router": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.1.tgz", - "integrity": "sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.1.tgz", + "integrity": "sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg==", "dependencies": { - "@remix-run/router": "1.2.1" + "@remix-run/router": "1.3.2" }, "engines": { "node": ">=14" @@ -14280,12 +14488,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1.tgz", - "integrity": "sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.1.tgz", + "integrity": "sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ==", "dependencies": { - "@remix-run/router": "1.2.1", - "react-router": "6.6.1" + "@remix-run/router": "1.3.2", + "react-router": "6.8.1" }, "engines": { "node": ">=14" @@ -14517,13 +14725,13 @@ } }, "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.0.tgz", + "integrity": "sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==", "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" @@ -14532,11 +14740,6 @@ "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", @@ -14697,9 +14900,9 @@ } }, "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", "engines": { "node": ">=10" } @@ -15012,9 +15215,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dependencies": { "randombytes": "^2.1.0" } @@ -15128,9 +15331,9 @@ } }, "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15346,6 +15549,17 @@ "node": ">= 0.8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -15671,9 +15885,9 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "node_modules/tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.6.tgz", + "integrity": "sha512-BfgQWZrtqowOQMC2bwaSNe7xcIjdDEgixWGYOd6AL0CbKHJlvhfdbINeAW76l1sO+1ov/MJ93ODJ9yluRituIw==", "dependencies": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -15689,12 +15903,12 @@ "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.18", + "postcss": "^8.0.9", "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", "resolve": "^1.22.1" @@ -15775,9 +15989,9 @@ } }, "node_modules/terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "version": "5.16.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", + "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -15960,9 +16174,9 @@ } }, "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -16025,6 +16239,19 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -16034,9 +16261,9 @@ } }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -16533,15 +16760,15 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", + "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -16713,6 +16940,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -17172,12125 +17432,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==" - }, - "@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/eslint-parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", - "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, - "@babel/generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", - "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", - "requires": { - "@babel/types": "^7.20.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", - "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", - "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", - "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz", - "integrity": "sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", - "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", - "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", - "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "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/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", - "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz", - "integrity": "sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz", - "integrity": "sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "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==" - }, - "@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" - }, - "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "requires": {} - }, - "@emotion/babel-plugin": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", - "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.1.3" - } - }, - "@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "requires": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" - } - }, - "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", - "requires": { - "@emotion/memoize": "^0.8.0" - } - }, - "@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" - }, - "@emotion/react": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", - "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" - }, - "@emotion/styled": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", - "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" - } - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "requires": {} - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, - "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@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==", - "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==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "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==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.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==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "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==" - } - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mui/base": { - "version": "5.0.0-alpha.112", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.112.tgz", - "integrity": "sha512-KPwb1iYPXsV/P8uu0SNQrj7v7YU6wdN4Eccc2lZQyRDW+f6PJYjHBuFUTYKc408B98Jvs1XbC/z5MN45a2DWrQ==", - "requires": { - "@babel/runtime": "^7.20.7", - "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.2", - "@popperjs/core": "^2.11.6", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - } - }, - "@mui/core-downloads-tracker": { - "version": "5.11.3", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.3.tgz", - "integrity": "sha512-Bgb6//KtxY7IC7M5Pa5RKFX1wttc213mqpKqydnz3wn4BGDXfA5c0vf5nTu5zqsJeB4T3ysAJTRJhQ/E1GsZDQ==" - }, - "@mui/icons-material": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz", - "integrity": "sha512-I2LaOKqO8a0xcLGtIozC9xoXjZAto5G5gh0FYUMAlbsIHNHIjn4Xrw9rvjY20vZonyiGrZNMAlAXYkY6JvhF6A==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@mui/material": { - "version": "5.11.3", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.3.tgz", - "integrity": "sha512-Oz+rMFiMtxzzDLUxKyyj4mSxF9ShmsBoJ9qvglXCYqklgSrEl1R/Z4hfPZ+2pWd5CriO8U/0CFHr4DksrlTiCw==", - "requires": { - "@babel/runtime": "^7.20.7", - "@mui/base": "5.0.0-alpha.112", - "@mui/core-downloads-tracker": "^5.11.3", - "@mui/system": "^5.11.2", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.2", - "@types/react-transition-group": "^4.4.5", - "clsx": "^1.2.1", - "csstype": "^3.1.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - } - }, - "@mui/private-theming": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.2.tgz", - "integrity": "sha512-qZwMaqRFPwlYmqwVKblKBGKtIjJRAj3nsvX93pOmatsXyorW7N/0IPE/swPgz1VwChXhHO75DwBEx8tB+aRMNg==", - "requires": { - "@babel/runtime": "^7.20.7", - "@mui/utils": "^5.11.2", - "prop-types": "^15.8.1" - } - }, - "@mui/styled-engine": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.0.tgz", - "integrity": "sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ==", - "requires": { - "@babel/runtime": "^7.20.6", - "@emotion/cache": "^11.10.5", - "csstype": "^3.1.1", - "prop-types": "^15.8.1" - } - }, - "@mui/system": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.2.tgz", - "integrity": "sha512-PPkYhrcP2MkhscX6SauIl0wPgra0w1LGPtll+hIKc2Z2JbGRSrUCFif93kxejB7I1cAoCay9jWW4mnNhsOqF/g==", - "requires": { - "@babel/runtime": "^7.20.7", - "@mui/private-theming": "^5.11.2", - "@mui/styled-engine": "^5.11.0", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.2", - "clsx": "^1.2.1", - "csstype": "^3.1.1", - "prop-types": "^15.8.1" - } - }, - "@mui/types": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", - "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", - "requires": {} - }, - "@mui/utils": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.2.tgz", - "integrity": "sha512-AyizuHHlGdAtH5hOOXBW3kriuIwUIKUIgg0P7LzMvzf6jPhoQbENYqY6zJqfoZ7fAWMNNYT8mgN5EftNGzwE2w==", - "requires": { - "@babel/runtime": "^7.20.7", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^16.7.1 || ^17.0.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - } - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "requires": { - "eslint-scope": "5.1.1" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", - "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" - }, - "@remix-run/router": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", - "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==" - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/babel__core": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", - "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "@types/express": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", - "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.32", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", - "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@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==", - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@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==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "@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==" - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "18.0.26", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", - "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "requires": { - "@types/node": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - }, - "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" - }, - "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", - "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", - "requires": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/type-utils": "5.48.0", - "@typescript-eslint/utils": "5.48.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.0.tgz", - "integrity": "sha512-ehoJFf67UViwnYuz6JUneZ8qxgDk0qEWKiTLmpE8WpPEr15e2cSLtp0E6Zicx2DaYdwctUA0uLRTbLckxQpurg==", - "requires": { - "@typescript-eslint/utils": "5.48.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", - "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", - "requires": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", - "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", - "requires": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", - "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", - "requires": { - "@typescript-eslint/typescript-estree": "5.48.0", - "@typescript-eslint/utils": "5.48.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", - "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==" - }, - "@typescript-eslint/typescript-estree": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", - "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", - "requires": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@typescript-eslint/utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", - "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", - "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", - "requires": { - "@typescript-eslint/types": "5.48.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@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==" - }, - "@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==" - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "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==", - "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==" - } - } - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } - }, - "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==" - }, - "address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==" - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "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==", - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "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.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "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==" - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "axe-core": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.1.tgz", - "integrity": "sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==" - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "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==", - "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": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "requires": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "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==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "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==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "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==" - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "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==", - "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.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==" - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==" - }, - "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" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "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==" - }, - "check-types": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", - "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "requires": { - "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==" - } - } - }, - "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" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "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==" - }, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "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==", - "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==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "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==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "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==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "core-js": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz", - "integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==" - }, - "core-js-compat": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", - "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz", - "integrity": "sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "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" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "requires": {} - }, - "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "requires": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.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==" - } - } - }, - "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "requires": {} - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "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==" - }, - "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==", - "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==" - } - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssdb": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz", - "integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "requires": { - "cssnano-preset-default": "^5.2.13", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "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==", - "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==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "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==" - } - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "dependencies": { - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { - "punycode": "^2.1.1" - } - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - } - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "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==" - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - } - }, - "dexie": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.2.tgz", - "integrity": "sha512-q5dC3HPmir2DERlX+toCBbHQXW5MsyrFqPFcovkH9N2S/UW/H3H5AWAB6iEOExeraAu+j+zRDG+zg/D7YhH0qg==" - }, - "dexie-react-hooks": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.1.tgz", - "integrity": "sha512-Cam5JP6PxHN564RvWEoe8cqLhosW0O4CAZ9XEVYeGHJBa6KEJlOpd9CUpV3kmU9dm2MrW97/lk7qkf1xpij7gA==", - "requires": {} - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "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==" - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "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==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", - "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "requires": { - "has": "^1.0.3" - } - }, - "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==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "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" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", - "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.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==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } - } - }, - "eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - } - }, - "eslint-plugin-react": { - "version": "7.31.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", - "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "requires": {} - }, - "eslint-plugin-testing-library": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", - "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", - "requires": { - "@typescript-eslint/utils": "^5.13.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - }, - "eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "requires": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "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==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.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==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "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==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.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==" - }, - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "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==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "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.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "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==" - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "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.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "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==" - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "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-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "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==", - "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" - } - }, - "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==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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==", - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "requires": { - "void-elements": "3.1.0" - } - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "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==", - "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==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "i18next": { - "version": "21.10.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz", - "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==", - "requires": { - "@babel/runtime": "^7.17.2" - } - }, - "i18next-browser-languagedetector": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.8.tgz", - "integrity": "sha512-Svm+MduCElO0Meqpj1kJAriTC6OhI41VhlT/A0UPjGoPZBhAHIaGE5EfsHlTpgdH09UVX7rcc72pSDDBeKSQQA==", - "requires": { - "@babel/runtime": "^7.19.0" - } - }, - "i18next-http-backend": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-1.4.5.tgz", - "integrity": "sha512-tLuHWuLWl6CmS07o+UB6EcQCaUjrZ1yhdseIN7sfq0u7phsMePJ8pqlGhIAdRDPF/q7ooyo5MID5DRFBCH+x5w==", - "requires": { - "cross-fetch": "3.1.5" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "immer": { - "version": "9.0.17", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.17.tgz", - "integrity": "sha512-+hBruaLSQvkPfxRiTLK/mi4vLH+/VQS6z2KJahdoxlleFOI8ARqzOF17uy12eFDlqWmPoygwc5evgwcp+dlHhg==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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==" - }, - "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "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==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "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==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "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==", - "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==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "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==" - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "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" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "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==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.19.tgz", - "integrity": "sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "dependencies": { - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - }, - "string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "requires": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==" - } - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - } - } - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.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==" - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-base64": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.3.tgz", - "integrity": "sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A==" - }, - "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==" - }, - "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==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "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.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { - "punycode": "^2.1.1" - } - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "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==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "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==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "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==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "language-tags": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.7.tgz", - "integrity": "sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==", - "requires": { - "language-subtag-registry": "^0.3.20" - } - }, - "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==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "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==", - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "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==", - "requires": { - "semver": "^6.0.0" - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "requires": { - "tmpl": "1.0.5" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mini-css-extract-plugin": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", - "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "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==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "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": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "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==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "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==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "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==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "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==" - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "requires": { - "callsites": "^3.0.0" - } - }, - "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==", - "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" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" - }, - "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==", - "requires": { - "find-up": "^4.0.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==", - "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==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.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==", - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "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==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } - } - }, - "postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "requires": {} - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} - }, - "postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "requires": {} - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "requires": {} - }, - "postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "requires": {} - }, - "postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "requires": {} - }, - "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - } - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "requires": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "requires": {} - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "requires": {} - }, - "postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "requires": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "requires": {} - }, - "postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "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==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - } - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - } - } - }, - "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==" - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "requires": { - "asap": "~2.0.6" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "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==" - } - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "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==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "requires": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-i18next": { - "version": "11.18.6", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", - "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", - "requires": { - "@babel/runtime": "^7.14.5", - "html-parse-stringify": "^3.0.1" - } - }, - "react-infinite-scroll-component": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-infinite-scroll-component/-/react-infinite-scroll-component-6.1.0.tgz", - "integrity": "sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ==", - "requires": { - "throttle-debounce": "^2.1.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" - }, - "react-router": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.1.tgz", - "integrity": "sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ==", - "requires": { - "@remix-run/router": "1.2.1" - } - }, - "react-router-dom": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1.tgz", - "integrity": "sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g==", - "requires": { - "@remix-run/router": "1.2.1", - "react-router": "6.6.1" - } - }, - "react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "requires": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "fsevents": "^2.3.2", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "requires": { - "pify": "^2.3.0" - } - }, - "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==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "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==" - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - } - } - }, - "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==" - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.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==" - }, - "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==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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==" - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" - }, - "sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "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": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "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==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "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": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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==", - "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==" - }, - "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.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==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "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==" - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "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==", - "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" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-generator": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", - "requires": { - "stackframe": "^1.3.4" - } - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "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==" - } - } - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "stacktrace-gps": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", - "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", - "requires": { - "source-map": "0.5.6", - "stackframe": "^1.3.4" - }, - "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==" - } - } - }, - "stacktrace-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", - "requires": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "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==" - } - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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==" - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" - }, - "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==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "requires": {} - }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, - "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.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "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==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "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" - }, - "dependencies": { - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "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==", - "requires": { - "boolbase": "~1.0.0" - } - } - } - }, - "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==" - }, - "tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", - "requires": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.18", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - }, - "dependencies": { - "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==" - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" - }, - "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" - } - } - }, - "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==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - } - }, - "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==", - "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": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" - }, - "throttle-debounce": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", - "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==" - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "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==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - } - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - } - } - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "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==" - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "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==" - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "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==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "peer": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" - }, - "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==", - "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==", - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "requires": {} - } - } - }, - "webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "requires": { - "tapable": "^2.0.0", - "webpack-sources": "^2.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==" - }, - "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - } - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "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==" - }, - "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==", - "requires": { - "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "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==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - } - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "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==", - "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" - } - }, - "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==" - }, - "workbox-background-sync": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-broadcast-update": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-build": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-core": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==" - }, - "workbox-expiration": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-google-analytics": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", - "requires": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-navigation-preload": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-precaching": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-range-requests": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-recipes": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", - "requires": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-routing": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-strategies": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-streams": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "workbox-sw": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==" - }, - "workbox-webpack-plugin": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", - "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", - "requires": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.5.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "workbox-window": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "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" - }, - "dependencies": { - "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" - } - }, - "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==" - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "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==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - }, - "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==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "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.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, - "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==" - } } } From dfaab8c386834a3bf720465e4e331eac7e1c2ac5 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 21:45:03 -0500 Subject: [PATCH 16/79] Bump version --- docs/install.md | 60 ++++++++++++++++++++++++------------------------ docs/releases.md | 8 ++++++- go.sum | 34 --------------------------- 3 files changed, 37 insertions(+), 65 deletions(-) diff --git a/docs/install.md b/docs/install.md index 70ee219..3af9f89 100644 --- a/docs/install.md +++ b/docs/install.md @@ -26,37 +26,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_x86_64.tar.gz - tar zxvf ntfy_1.30.1_linux_x86_64.tar.gz - sudo cp -a ntfy_1.30.1_linux_x86_64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.30.1_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_x86_64.tar.gz + tar zxvf ntfy_1.31.0_linux_x86_64.tar.gz + sudo cp -a ntfy_1.31.0_linux_x86_64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_x86_64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_armv6.tar.gz - tar zxvf ntfy_1.30.1_linux_armv6.tar.gz - sudo cp -a ntfy_1.30.1_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.30.1_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv6.tar.gz + tar zxvf ntfy_1.31.0_linux_armv6.tar.gz + sudo cp -a ntfy_1.31.0_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_armv7.tar.gz - tar zxvf ntfy_1.30.1_linux_armv7.tar.gz - sudo cp -a ntfy_1.30.1_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.30.1_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv7.tar.gz + tar zxvf ntfy_1.31.0_linux_armv7.tar.gz + sudo cp -a ntfy_1.31.0_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_arm64.tar.gz - tar zxvf ntfy_1.30.1_linux_arm64.tar.gz - sudo cp -a ntfy_1.30.1_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.30.1_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_arm64.tar.gz + tar zxvf ntfy_1.31.0_linux_arm64.tar.gz + sudo cp -a ntfy_1.31.0_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -106,7 +106,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -114,7 +114,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -122,7 +122,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -130,7 +130,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -140,28 +140,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -189,18 +189,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_macOS_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_macOS_all.tar.gz > ntfy_1.30.1_macOS_all.tar.gz -tar zxvf ntfy_1.30.1_macOS_all.tar.gz -sudo cp -a ntfy_1.30.1_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_macOS_all.tar.gz > ntfy_1.31.0_macOS_all.tar.gz +tar zxvf ntfy_1.31.0_macOS_all.tar.gz +sudo cp -a ntfy_1.31.0_macOS_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_1.30.1_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_1.31.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -212,7 +212,7 @@ ntfy --help ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v1.30.1/ntfy_1.30.1_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_windows_x86_64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index fc510e5..e389133 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,13 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -## ntfy server v1.31.0 (UNRELEASED) +## ntfy server v1.31.0 +Released February 14, 2023 + +This is a tiny release before the really big release, and also the last before the big v2.0.0. The most interesting +things in this release are the new preliminary health endpoint to allow monitoring in K8s (and others), and the removal +of `upx` binary packing (which was causing erroneous virus flagging). Aside from that, the `go-smtp` library did a +breaking-change upgrade, which required some work to get working again. **Features:** diff --git a/go.sum b/go.sum index 2ee309f..b925c17 100644 --- a/go.sum +++ b/go.sum @@ -1,26 +1,16 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.107.0 h1:qkj22L7bgkl6vIeZDlOY2po43Mx/TIa2Wsa7VR+PEww= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go v0.109.0 h1:38CZoKGlCnPZjGdyj0ZfpoGae0/wgNfy5F0byyxg0Gk= cloud.google.com/go v0.109.0/go.mod h1:2sYycXt75t/CSB5R9M2wPU1tJmire7AQZTPtITcGBVE= -cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/iam v0.9.0 h1:bK6Or6mxhuL8lnj1i9j0yMo2wE/IeTO2cWlfUrf/TZs= -cloud.google.com/go/iam v0.9.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= cloud.google.com/go/iam v0.10.0 h1:fpP/gByFs6US1ma53v7VxhvbJpO2Aapng6wabJ99MuI= cloud.google.com/go/iam v0.10.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/storage v1.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= firebase.google.com/go/v4 v4.10.0 h1:dgK/8uwfJbzc5LZK/GyRRfIkZEDObN9q0kgEXsjlXN4= @@ -43,8 +33,6 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead h1:fI1Jck0vUrXT8bnphprS1EoVRe2Q5CKCX8iDlpqjQ/Y= github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= -github.com/emersion/go-smtp v0.15.0 h1:3+hMGMGrqP/lqd7qoxZc1hTU8LY8gHV9RFGWlqSDmP8= -github.com/emersion/go-smtp v0.15.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/emersion/go-smtp v0.16.0 h1:eB9CY9527WdEZSs5sWisTmilDX7gG+Q/2IdRcmubpa8= github.com/emersion/go-smtp v0.16.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -87,8 +75,6 @@ github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1V github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.2.1 h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= @@ -113,8 +99,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/urfave/cli/v2 v2.23.7 h1:YHDQ46s3VghFHFf1DdF+Sh7H4RqhcM+t0TmZRJx4oJY= -github.com/urfave/cli/v2 v2.23.7/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/urfave/cli/v2 v2.24.3 h1:7Q1w8VN8yE0MJEHP06bv89PjYsN4IHWED2s1v/Zlfm0= github.com/urfave/cli/v2 v2.24.3/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -123,8 +107,6 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -140,13 +122,9 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= -golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -160,21 +138,15 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= @@ -187,8 +159,6 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.105.0 h1:t6P9Jj+6XTn4U9I2wycQai6Q/Kz7iOT+QzjJ3G2V4x8= -google.golang.org/api v0.105.0/go.mod h1:qh7eD5FJks5+BcE+cjBIm6Gz8vioK7EHvnlniqXBnqI= google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -200,8 +170,6 @@ google.golang.org/appengine/v2 v2.0.2/go.mod h1:PkgRUWz4o1XOvbqtWTkBtCitEJ5Tp4Ho google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc h1:ijGwO+0vL2hJt5gaygqP2j6PfflOBrRot0IczKbmtio= google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -209,8 +177,6 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= From 396e61cdb3effcb6ddcce550162319e9d2ce16ef Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 22:00:04 -0500 Subject: [PATCH 17/79] Bump go build version in CI --- .github/workflows/build.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/test.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c1e2a24..92816e6 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -8,7 +8,7 @@ jobs: name: Install Go uses: actions/setup-go@v2 with: - go-version: '1.18.x' + go-version: '1.19.x' - name: Install node uses: actions/setup-node@v2 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6ce2297..be13b96 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -11,7 +11,7 @@ jobs: name: Install Go uses: actions/setup-go@v2 with: - go-version: '1.18.x' + go-version: '1.19.x' - name: Install node uses: actions/setup-node@v2 diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 852654a..544857c 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -8,7 +8,7 @@ jobs: name: Install Go uses: actions/setup-go@v2 with: - go-version: '1.18.x' + go-version: '1.19.x' - name: Install node uses: actions/setup-node@v2 From ca68494203037316ad143fabedab7837c3b371c4 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 14 Feb 2023 23:22:03 -0500 Subject: [PATCH 18/79] Forum posts --- docs/integrations.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/integrations.md b/docs/integrations.md index b56cbed..4aa8092 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -113,6 +113,8 @@ and uptime of third party servers, so use of each server is **at your own discre ## Blog + forum posts +- [Video: Simple Push Notifications ntfy](https://www.youtube.com/watch?v=u9EcWrsjE20) ⭐ - youtube.com - 2/2023 +- [On installe Ntfy sur Synology Docker](https://www.maison-et-domotique.com/140356-serveur-notification-jeedom-ntfy-synology-docker/) - maison-et-domotique.co - 1/2023 - [January 2023 Developer Update](https://community.nodebb.org/topic/16908/january-2023-developer-update) - nodebb.org - 1/2023 - [Comment envoyer des notifications push sur votre téléphone facilement et gratuitement?](https://korben.info/notifications-push-telephone.html) - 1/2023 - [UnifiedPush: a decentralized, open-source push notification protocol](https://f-droid.org/en/2022/12/18/unifiedpush.html) ⭐ - 12/2022 From 76d46ec64666f2cd52eee84a8e29b943ea13cc76 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 15 Feb 2023 10:55:01 -0500 Subject: [PATCH 19/79] Minor tweaks --- server/config.go | 2 +- server/log.go | 27 +++++++++++++++++++++++---- server/server.go | 28 +++++----------------------- server/server_firebase.go | 10 ++++------ server/smtp_sender.go | 14 +++++++------- server/util.go | 5 ++--- util/util.go | 2 +- web/public/config.js | 4 ++-- 8 files changed, 45 insertions(+), 47 deletions(-) diff --git a/server/config.go b/server/config.go index 811bc95..04ac00b 100644 --- a/server/config.go +++ b/server/config.go @@ -61,7 +61,7 @@ var ( // DefaultDisallowedTopics defines the topics that are forbidden, because they are used elsewhere. This array can be // extended using the server.yml config. If updated, also update in Android and web app. - DefaultDisallowedTopics = []string{"docs", "static", "file", "app", "account", "settings", "signup", "login"} + DefaultDisallowedTopics = []string{"docs", "static", "file", "app", "account", "settings", "signup", "login", "v1"} ) // Config is the main config struct for the application. Use New to instantiate a default config struct. diff --git a/server/log.go b/server/log.go index ef2672f..d385821 100644 --- a/server/log.go +++ b/server/log.go @@ -11,19 +11,38 @@ import ( "unicode/utf8" ) +// Log tags +const ( + tagStartup = "startup" + tagHTTP = "http" + tagPublish = "publish" + tagSubscribe = "subscribe" + tagFirebase = "firebase" + tagSMTP = "smtp" // Receive email + tagEmail = "email" // Send email + tagFileCache = "file_cache" + tagMessageCache = "message_cache" + tagStripe = "stripe" + tagAccount = "account" + tagManager = "manager" + tagResetter = "resetter" + tagWebsocket = "websocket" + tagMatrix = "matrix" +) + // logr creates a new log event with HTTP request fields func logr(r *http.Request) *log.Event { - return log.Fields(httpContext(r)) + return log.Tag(tagHTTP).Fields(httpContext(r)) // Tag may be overwritten } -// logr creates a new log event with visitor fields +// logv creates a new log event with visitor fields func logv(v *visitor) *log.Event { return log.With(v) } -// logr creates a new log event with HTTP request and visitor fields +// logvr creates a new log event with HTTP request and visitor fields func logvr(v *visitor, r *http.Request) *log.Event { - return logv(v).Fields(httpContext(r)) + return logr(r).With(v) } // logvrm creates a new log event with HTTP request, visitor fields and message fields diff --git a/server/server.go b/server/server.go index 4334800..11e38cd 100644 --- a/server/server.go +++ b/server/server.go @@ -121,24 +121,6 @@ const ( wsPongWait = 15 * time.Second ) -// Log tags -const ( - tagStartup = "startup" - tagPublish = "publish" - tagSubscribe = "subscribe" - tagFirebase = "firebase" - tagSMTP = "smtp" // Receive email - tagEmail = "email" // Send email - tagFileCache = "file_cache" - tagMessageCache = "message_cache" - tagStripe = "stripe" - tagAccount = "account" - tagManager = "manager" - tagResetter = "resetter" - tagWebsocket = "websocket" - tagMatrix = "matrix" -) - // New instantiates a new Server. It creates the cache and adds a Firebase // subscriber (if configured). func New(conf *Config) (*Server, error) { @@ -314,11 +296,11 @@ func (s *Server) handle(w http.ResponseWriter, r *http.Request) { s.handleError(w, r, v, err) return } - - if logvr(v, r).IsTrace() { - logvr(v, r).Field("http_request", renderHTTPRequest(r)).Trace("HTTP request started") - } else if log.IsDebug() { - logvr(v, r).Debug("HTTP request started") + ev := logvr(v, r) + if ev.IsTrace() { + ev.Field("http_request", renderHTTPRequest(r)).Trace("HTTP request started") + } else if logvr(v, r).IsDebug() { + ev.Debug("HTTP request started") } logvr(v, r). Timing(func() { diff --git a/server/server_firebase.go b/server/server_firebase.go index 749901e..6318b98 100644 --- a/server/server_firebase.go +++ b/server/server_firebase.go @@ -8,7 +8,6 @@ import ( "firebase.google.com/go/v4/messaging" "fmt" "google.golang.org/api/option" - "heckel.io/ntfy/log" "heckel.io/ntfy/user" "heckel.io/ntfy/util" "strings" @@ -46,16 +45,15 @@ func (c *firebaseClient) Send(v *visitor, m *message) error { if err != nil { return err } - if log.Tag(tagFirebase).IsTrace() { - logvm(v, m). - Tag(tagFirebase). - Field("firebase_message", util.MaybeMarshalJSON(fbm)). - Trace("Firebase message") + ev := logvm(v, m).Tag(tagFirebase) + if ev.IsTrace() { + ev.Field("firebase_message", util.MaybeMarshalJSON(fbm)).Trace("Firebase message") } err = c.sender.Send(fbm) if err == errFirebaseQuotaExceeded { logvm(v, m). Tag(tagFirebase). + Err(err). Warn("Firebase quota exceeded (likely for topic), temporarily denying Firebase access to visitor") v.FirebaseTemporarilyDeny() } diff --git a/server/smtp_sender.go b/server/smtp_sender.go index d8114ad..ee26365 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -37,18 +37,18 @@ func (s *smtpSender) Send(v *visitor, m *message, to string) error { return err } auth := smtp.PlainAuth("", s.config.SMTPSenderUser, s.config.SMTPSenderPass, host) - logvm(v, m). + ev := logvm(v, m). Tag(tagEmail). Fields(log.Context{ "email_via": s.config.SMTPSenderAddr, "email_user": s.config.SMTPSenderUser, "email_to": to, - }). - Debug("Sending email") - logvm(v, m). - Tag(tagEmail). - Field("email_body", message). - Trace("Email body") + }) + if ev.IsTrace() { + ev.Field("email_body", message).Trace("Sending email") + } else if ev.IsDebug() { + ev.Debug("Sending email") + } return smtp.SendMail(s.config.SMTPSenderAddr, auth, s.config.SMTPSenderFrom, []string{to}, []byte(message)) }) } diff --git a/server/util.go b/server/util.go index 8fbfaef..1141e5d 100644 --- a/server/util.go +++ b/server/util.go @@ -1,7 +1,6 @@ package server import ( - "heckel.io/ntfy/log" "heckel.io/ntfy/util" "io" "net/http" @@ -55,7 +54,7 @@ func extractIPAddress(r *http.Request, behindProxy bool) netip.Addr { if err != nil { ip = netip.IPv4Unspecified() if remoteAddr != "@" || !behindProxy { // RemoteAddr is @ when unix socket is used - log.Warn("unable to parse IP (%s), new visitor with unspecified IP (0.0.0.0) created %s", remoteAddr, err) + logr(r).Err(err).Warn("unable to parse IP (%s), new visitor with unspecified IP (0.0.0.0) created", remoteAddr) } } } @@ -66,7 +65,7 @@ func extractIPAddress(r *http.Request, behindProxy bool) netip.Addr { ips := util.SplitNoEmpty(r.Header.Get("X-Forwarded-For"), ",") realIP, err := netip.ParseAddr(strings.TrimSpace(util.LastString(ips, remoteAddr))) if err != nil { - log.Error("invalid IP address %s received in X-Forwarded-For header: %s", ip, err.Error()) + logr(r).Err(err).Error("invalid IP address %s received in X-Forwarded-For header", ip) // Fall back to regular remote address if X-Forwarded-For is damaged } else { ip = realIP diff --git a/util/util.go b/util/util.go index bc093b0..33fa34e 100644 --- a/util/util.go +++ b/util/util.go @@ -379,7 +379,7 @@ func String(v string) *string { return &v } -// Int turns a string into a pointer of an int +// Int turns an int into a pointer of an int func Int(v int) *int { return &v } diff --git a/web/public/config.js b/web/public/config.js index 8d1ed4c..e714a4f 100644 --- a/web/public/config.js +++ b/web/public/config.js @@ -6,11 +6,11 @@ // During web development, you may change values here for rapid testing. var config = { - base_url: "https://127.0.0.1", // window.location.origin FIXME update before merging + base_url: window.location.origin, // Set this to "https://127.0.0.1" to test against a different server app_root: "/app", enable_login: true, enable_signup: true, enable_payments: true, enable_reservations: true, - disallowed_topics: ["docs", "static", "file", "app", "account", "settings", "signup", "login"] + disallowed_topics: ["docs", "static", "file", "app", "account", "settings", "signup", "login", "v1"] }; From 94066c24dc35e26bce0136a24b6917093f594870 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 15 Feb 2023 15:39:01 -0500 Subject: [PATCH 20/79] Docs docs docs --- docs/releases.md | 60 +++++++++++++++++-- docs/static/img/web-account.png | Bin 0 -> 100878 bytes docs/static/img/web-reserve-topic-dialog.png | Bin 0 -> 85821 bytes docs/static/img/web-reserve-topic.png | Bin 0 -> 73802 bytes docs/static/img/web-signup.png | Bin 0 -> 27538 bytes docs/static/img/web-token-create.png | Bin 0 -> 84930 bytes docs/static/img/web-token-list.png | Bin 0 -> 95212 bytes docs/subscribe/web.md | 7 +++ mkdocs.yml | 2 +- 9 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 docs/static/img/web-account.png create mode 100644 docs/static/img/web-reserve-topic-dialog.png create mode 100644 docs/static/img/web-reserve-topic.png create mode 100644 docs/static/img/web-signup.png create mode 100644 docs/static/img/web-token-create.png create mode 100644 docs/static/img/web-token-list.png diff --git a/docs/releases.md b/docs/releases.md index c4b238d..4e8408c 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -4,12 +4,63 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ## ntfy server v2.0.0 (UNRELEASED) -This is the biggest ntfy server release I've ever done. This release adds the ability to sign-up for accounts, log-in -via the web app, synchronize accounts between devices (web only for now), introduces user access tokens, user tiers, -and Stripe payments integration to support paid tiers (don't worry, [everything will stay open source](https://ntfy.sh/docs/faq/)). +This is the biggest ntfy server release I've ever done 🥳 . Lots of new and exciting features. -**Bug fixes + maintenance:** +**Brand-new features:** +* **User signup/login & account sync**: If enabled, users can now register to create a user account, and then login to + the web app. Once logged in, topic subscriptions and user settings are stored server-side in the user account (as + opposed to only in the browser storage). So far, this is implemented only in the web app only. Once it's in the Android/iOS + app, you can easily keep your account in sync. Relevant [config options](config.md#config-options) are `enable-signup` and + `enable-login`. +
+ + +
+* **Topic reservations** 🎉: If enabled, users can now **reserve topics and restrict access to other users**. + Once this is fully rolled out, you may reserve `ntfy.sh/philbackups` and define access so that only you can publish/subscribe + to the topic. Reservations let you claim ownership of a topic, and you can define access permissions for others as + `deny-all` (only you have full access), `read-only` (you can publish/subscribe, others can subscribe), `write-only` (you + can publish/subscribe, others can publish), `read-write` (everyone can publish/subscribe, but you remain the owner). + Topic reservations can be [configured](config.md#config-options) in the web app if `enable-reservations` is enabled, and + only if the user has a [tier](config.md#tiers) that supports reservations. +
+ + +
+* **Access tokens:** It is now possible to create user access tokens for a user account. Access tokens are useful + to avoid having to paste your password to various applications or scripts. For instance, you may want to use a + dedicated token to publish from your backup host, and one from your home automation system. Tokens can be configured + in the web app, or via the `ntfy token` command. See [creating tokens](config.md#access-tokens), + and [publishing using tokens](publish.md#access-tokens). +
+ + +
+* **Structured logging:** I've redone a lot of the logging to make it more structured, and to make it easier to debug and + troubleshoot. Logs can now be written to a file, and as JSON (if configured). Each log event carries context fields + that you can filter and search on using tools like `jq`. On top of that, you can override the log level if certain fields + match. For instance, you can say `user_name=phil -> debug` to log everything related to a certain user with debug level. + See [logging & debugging](config.md#logging--debugging). +* **Tiers:** You can now define and associate usage tiers to users. Tiers can be used to grant users higher limits, such as + daily message limits, attachment size, or make it possible for users to reserve topics. You could, for instance, have + a tier `Standard` that allows 500 messages/day, 15 MB attachments and 5 allowed topic reservations, and another + tier `Friends & Family` with much higher limits. For ntfy.sh, I'll mostly use these tiers to facilitate paid plans (see below). + Tiers can be configured via the `ntfy tier ...` command. See [tiers](config.md#tiers). +* **Paid tiers:** Starting very soon, I will be offering paid tiers for ntfy.sh on top of the free service. You'll be + able to subscribe to tiers with higher rate limits (more daily messages, bigger attachments) and topic reservations. + Paid tiers are facilitated by integrating [Stripe](https://stripe.com) as a payment provider. See [payments](config.md#payments) + for details. + +**ntfy is forever open source!** +Yes, I will be offering some paid plans. But you don't need to panic! I won't be taking any features away, and everything +will remain forever open source, so you can self-host if you like. Similar to the donations via [GitHub Sponsors](https://github.com/sponsors/binwiederhier) +and [Liberapay](https://en.liberapay.com/ntfy/), paid plans will help pay for the service and keep me motivated to keep +going. It'll only make ntfy better. + +**Other tickets:** + +* User account signup, login, topic reservations, access tokens, tiers etc. ([#522](https://github.com/binwiederhier/ntfy/issues/522)) * `OPTIONS` method calls are not serviced when the UI is disabled ([#598](https://github.com/binwiederhier/ntfy/issues/598), thanks to [@enticedwanderer](https://github.com/enticedwanderer) for reporting) ## ntfy server v1.31.0 @@ -22,7 +73,6 @@ breaking-change upgrade, which required some work to get working again. **Features:** -* ⭐ User account signup, login, topic reservations, access tokens, tiers etc. ⭐ ([#522](https://github.com/binwiederhier/ntfy/issues/522)) * Preliminary `/v1/health` API endpoint for service monitoring (no ticket) * Add basic health check to `Dockerfile` ([#555](https://github.com/binwiederhier/ntfy/pull/555), thanks to [@bt90](https://github.com/bt90)) diff --git a/docs/static/img/web-account.png b/docs/static/img/web-account.png new file mode 100644 index 0000000000000000000000000000000000000000..48e916e53c40042974d23364e4bc786db97ae04e GIT binary patch literal 100878 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≫0#d*Zu``^oSJ{uP3!E#KG=^ND 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 z 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�Vxl?V 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 YybAbin4Gxh$-e(Pa0AU!4Rpl+0+~T8r~m)} literal 0 HcmV?d00001 diff --git a/docs/static/img/web-reserve-topic.png b/docs/static/img/web-reserve-topic.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ffd374c8204bbd68bd15e3431c8e27a69e2374 GIT binary patch literal 73802 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/web-signup.png b/docs/static/img/web-signup.png new file mode 100644 index 0000000000000000000000000000000000000000..62c7bd30c599c9aa08f2f2f899090477fff1e2bc GIT binary patch literal 27538 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
Pin web app to move it out of the way
+ +If topic reservations are enabled, you can claim ownership over topics and define access to it: + +
+ + +
diff --git a/mkdocs.yml b/mkdocs.yml index bd6e02f..b937f95 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -76,7 +76,7 @@ nav: - "Sending messages": publish.md - "Subscribing": - "From your phone": subscribe/phone.md - - "From the Web UI": subscribe/web.md + - "From the Web app": subscribe/web.md - "From the CLI": subscribe/cli.md - "Using the API": subscribe/api.md - "Self-hosting": From fda90c217f8436fa1a118a1dacbce717204958c1 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 15 Feb 2023 15:41:41 -0500 Subject: [PATCH 21/79] Bump --- go.mod | 2 +- go.sum | 3 +++ web/package-lock.json | 12 ++++++------ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 9c975c2..6e1fd2c 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,7 @@ require ( ) require ( - cloud.google.com/go v0.109.0 // indirect + cloud.google.com/go v0.110.0 // indirect cloud.google.com/go/compute v1.18.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v0.10.0 // indirect diff --git a/go.sum b/go.sum index b7d5f6e..16f5ac3 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.109.0 h1:38CZoKGlCnPZjGdyj0ZfpoGae0/wgNfy5F0byyxg0Gk= cloud.google.com/go v0.109.0/go.mod h1:2sYycXt75t/CSB5R9M2wPU1tJmire7AQZTPtITcGBVE= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= @@ -72,6 +74,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= diff --git a/web/package-lock.json b/web/package-lock.json index f6e8b30..5cab17b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -6791,9 +6791,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.295", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", - "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==" + "version": "1.4.297", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.297.tgz", + "integrity": "sha512-dTXLXBdzfDYnZYq+bLer21HrFsEkzlR2OSIOsR+qroDmhmQU3i4T4KdY0Lcp83ZId3HnWTpPAEfhaJtVxmS/dQ==" }, "node_modules/emittery": { "version": "0.8.1", @@ -7383,9 +7383,9 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.1.tgz", - "integrity": "sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.2.tgz", + "integrity": "sha512-f1DmDWcz5SDM+IpCkEX0lbFqrrTs8HRsEElzDEqN/EBI0hpRj8Cns5+IVANXswE8/LeybIJqPAOQIFu2j5Y5sw==", "dependencies": { "@typescript-eslint/utils": "^5.43.0" }, From 645176250861e0dc5f862616b83339defaedeea9 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Wed, 15 Feb 2023 22:44:07 +0100 Subject: [PATCH 22/79] Added translation using Weblate (Arabic) --- web/public/static/langs/ar.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 web/public/static/langs/ar.json diff --git a/web/public/static/langs/ar.json b/web/public/static/langs/ar.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/web/public/static/langs/ar.json @@ -0,0 +1 @@ +{} From 5e90ff7db07fe2f91f1fee243aa484f4d27b61cb Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 15 Feb 2023 19:52:03 -0500 Subject: [PATCH 23/79] Docs drop shadow in dark mode --- docs/static/css/extra.css | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/docs/static/css/extra.css b/docs/static/css/extra.css index 1404035..0b239e1 100644 --- a/docs/static/css/extra.css +++ b/docs/static/css/extra.css @@ -8,9 +8,6 @@ width: unset !important; } -header { - background: linear-gradient(150deg, rgba(51,133,116,1) 0%, rgba(86,189,168,1) 100%); filter: drop-shadow(0 5px 10px #ccc); -} .md-header__topic:first-child { font-weight: 400; @@ -34,12 +31,30 @@ figure img, figure video { border-radius: 7px; } -body[data-md-color-scheme="default"] figure img, body[data-md-color-scheme="default"] figure video { +header { + background: linear-gradient(150deg, rgba(51,133,116,1) 0%, rgba(86,189,168,1) 100%); +} + +body[data-md-color-scheme="default"] header { + filter: drop-shadow(0 5px 10px #ccc); +} + +body[data-md-color-scheme="slate"] header { + filter: drop-shadow(0 5px 10px #333); +} + +body[data-md-color-scheme="default"] figure img, +body[data-md-color-scheme="default"] figure video, +body[data-md-color-scheme="default"] .screenshots img, +body[data-md-color-scheme="default"] .screenshots video { filter: drop-shadow(3px 3px 3px #ccc); } -body[data-md-color-scheme="slate"] figure img, body[data-md-color-scheme="slate"] figure video { - filter: drop-shadow(3px 3px 3px #1a1313); +body[data-md-color-scheme="slate"] figure img, +body[data-md-color-scheme="slate"] figure video, +body[data-md-color-scheme="slate"] .screenshots img, +body[data-md-color-scheme="slate"] .screenshots video { + filter: drop-shadow(3px 3px 3px #353744); } figure video { From c4e4cc5aa7a175bae97169f690b12c564245f5f4 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 15 Feb 2023 19:55:03 -0500 Subject: [PATCH 24/79] Tiny release notes fix --- docs/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index 4e8408c..a67fa85 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -41,7 +41,7 @@ This is the biggest ntfy server release I've ever done 🥳 . Lots of new and ex troubleshoot. Logs can now be written to a file, and as JSON (if configured). Each log event carries context fields that you can filter and search on using tools like `jq`. On top of that, you can override the log level if certain fields match. For instance, you can say `user_name=phil -> debug` to log everything related to a certain user with debug level. - See [logging & debugging](config.md#logging--debugging). + See [logging & debugging](config.md#logging-debugging). * **Tiers:** You can now define and associate usage tiers to users. Tiers can be used to grant users higher limits, such as daily message limits, attachment size, or make it possible for users to reserve topics. You could, for instance, have a tier `Standard` that allows 500 messages/day, 15 MB attachments and 5 allowed topic reservations, and another From 6c51b7558ac9d38baae58ab732628ceed045eb15 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 16 Feb 2023 10:35:23 -0500 Subject: [PATCH 25/79] Fine tuning error messages, add --ignore-exists flag to tier/user command --- cmd/tier.go | 5 +++++ cmd/user.go | 5 +++++ server/server.go | 23 ++++++++++------------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/cmd/tier.go b/cmd/tier.go index 64d4594..1c3ede9 100644 --- a/cmd/tier.go +++ b/cmd/tier.go @@ -55,6 +55,7 @@ var cmdTier = &cli.Command{ &cli.DurationFlag{Name: "attachment-expiry-duration", Value: defaultAttachmentExpiryDuration, Usage: "duration after which attachments are deleted"}, &cli.StringFlag{Name: "attachment-bandwidth-limit", Value: defaultAttachmentBandwidthLimit, Usage: "daily bandwidth limit for attachment uploads/downloads"}, &cli.StringFlag{Name: "stripe-price-id", Usage: "Stripe price ID for paid tiers (e.g. price_12345)"}, + &cli.BoolFlag{Name: "ignore-exists", Usage: "if the tier already exists, perform no action and exit"}, }, Description: `Add a new tier to the ntfy user database. @@ -171,6 +172,10 @@ func execTierAdd(c *cli.Context) error { return err } if tier, _ := manager.Tier(code); tier != nil { + if c.Bool("ignore-exists") { + fmt.Fprintf(c.App.ErrWriter, "tier %s already exists (exited successfully)\n", code) + return nil + } return fmt.Errorf("tier %s already exists", code) } name := c.String("name") diff --git a/cmd/user.go b/cmd/user.go index 3440217..a96c708 100644 --- a/cmd/user.go +++ b/cmd/user.go @@ -46,6 +46,7 @@ var cmdUser = &cli.Command{ Action: execUserAdd, Flags: []cli.Flag{ &cli.StringFlag{Name: "role", Aliases: []string{"r"}, Value: string(user.RoleUser), Usage: "user role"}, + &cli.BoolFlag{Name: "ignore-exists", Usage: "if the user already exists, perform no action and exit"}, }, Description: `Add a new user to the ntfy user database. @@ -186,6 +187,10 @@ func execUserAdd(c *cli.Context) error { return err } if user, _ := manager.User(username); user != nil { + if c.Bool("ignore-exists") { + fmt.Fprintf(c.App.ErrWriter, "user %s already exists (exited successfully)\n", username) + return nil + } return fmt.Errorf("user %s already exists", username) } if password == "" { diff --git a/server/server.go b/server/server.go index 11e38cd..6a1ea89 100644 --- a/server/server.go +++ b/server/server.go @@ -313,8 +313,12 @@ func (s *Server) handle(w http.ResponseWriter, r *http.Request) { } func (s *Server) handleError(w http.ResponseWriter, r *http.Request, v *visitor, err error) { + httpErr, ok := err.(*errHTTP) + if !ok { + httpErr = errHTTPInternalError + } + isNormalError := strings.Contains(err.Error(), "i/o timeout") || util.Contains([]int{http.StatusNotFound, http.StatusBadRequest, http.StatusTooManyRequests, http.StatusUnauthorized}, httpErr.HTTPCode) if websocket.IsWebSocketUpgrade(r) { - isNormalError := strings.Contains(err.Error(), "i/o timeout") if isNormalError { logvr(v, r).Tag(tagWebsocket).Err(err).Fields(websocketErrorContext(err)).Debug("WebSocket error (this error is okay, it happens a lot): %s", err.Error()) } else { @@ -323,22 +327,15 @@ func (s *Server) handleError(w http.ResponseWriter, r *http.Request, v *visitor, return // Do not attempt to write to upgraded connection } if matrixErr, ok := err.(*errMatrix); ok { - writeMatrixError(w, r, v, matrixErr) + if err := writeMatrixError(w, r, v, matrixErr); err != nil { + logvr(v, r).Tag(tagMatrix).Err(err).Debug("Writing Matrix error failed") + } return } - httpErr, ok := err.(*errHTTP) - if !ok { - httpErr = errHTTPInternalError - } - isNormalError := httpErr.HTTPCode == http.StatusNotFound || httpErr.HTTPCode == http.StatusBadRequest || httpErr.HTTPCode == http.StatusTooManyRequests if isNormalError { - logvr(v, r). - Err(httpErr). - Debug("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) + logvr(v, r).Err(httpErr).Debug("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) } else { - logvr(v, r). - Err(httpErr). - Info("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) + logvr(v, r).Err(httpErr).Info("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) } w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Origin", s.config.AccessControlAllowOrigin) // CORS, allow cross-origin requests From b8e976f4f6673e7976f9cb06737d6696926f71c0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 16 Feb 2023 14:21:19 -0500 Subject: [PATCH 26/79] Bump to 2.0.0 --- docs/install.md | 60 ++++++++++++++++++++-------------------- docs/releases.md | 1 + go.mod | 2 +- go.sum | 7 ++--- server/server.go | 2 +- web/package-lock.json | 64 +++++++++++++++++++++---------------------- 6 files changed, 67 insertions(+), 69 deletions(-) diff --git a/docs/install.md b/docs/install.md index 3af9f89..2c44031 100644 --- a/docs/install.md +++ b/docs/install.md @@ -26,37 +26,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_x86_64.tar.gz - tar zxvf ntfy_1.31.0_linux_x86_64.tar.gz - sudo cp -a ntfy_1.31.0_linux_x86_64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_x86_64.tar.gz + tar zxvf ntfy_2.0.0_linux_x86_64.tar.gz + sudo cp -a ntfy_2.0.0_linux_x86_64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_x86_64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv6.tar.gz - tar zxvf ntfy_1.31.0_linux_armv6.tar.gz - sudo cp -a ntfy_1.31.0_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv6.tar.gz + tar zxvf ntfy_2.0.0_linux_armv6.tar.gz + sudo cp -a ntfy_2.0.0_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv7.tar.gz - tar zxvf ntfy_1.31.0_linux_armv7.tar.gz - sudo cp -a ntfy_1.31.0_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv7.tar.gz + tar zxvf ntfy_2.0.0_linux_armv7.tar.gz + sudo cp -a ntfy_2.0.0_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_arm64.tar.gz - tar zxvf ntfy_1.31.0_linux_arm64.tar.gz - sudo cp -a ntfy_1.31.0_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_1.31.0_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_arm64.tar.gz + tar zxvf ntfy_2.0.0_linux_arm64.tar.gz + sudo cp -a ntfy_2.0.0_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -106,7 +106,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -114,7 +114,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -122,7 +122,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -130,7 +130,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -140,28 +140,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -189,18 +189,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_macOS_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_macOS_all.tar.gz > ntfy_1.31.0_macOS_all.tar.gz -tar zxvf ntfy_1.31.0_macOS_all.tar.gz -sudo cp -a ntfy_1.31.0_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_macOS_all.tar.gz > ntfy_2.0.0_macOS_all.tar.gz +tar zxvf ntfy_2.0.0_macOS_all.tar.gz +sudo cp -a ntfy_2.0.0_macOS_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_1.31.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.0.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -212,7 +212,7 @@ ntfy --help ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v1.31.0/ntfy_1.31.0_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_windows_x86_64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index a67fa85..4936059 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -3,6 +3,7 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntf and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). ## ntfy server v2.0.0 (UNRELEASED) +Released February 16, 2023 This is the biggest ntfy server release I've ever done 🥳 . Lots of new and exciting features. diff --git a/go.mod b/go.mod index 6e1fd2c..e248595 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.16 github.com/olebedev/when v0.0.0-20221205223600-4d190b02b8d8 github.com/stretchr/testify v1.8.1 - github.com/urfave/cli/v2 v2.24.3 + github.com/urfave/cli/v2 v2.24.4 golang.org/x/crypto v0.6.0 golang.org/x/oauth2 v0.5.0 // indirect golang.org/x/sync v0.1.0 diff --git a/go.sum b/go.sum index 16f5ac3..a7f6e80 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,4 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.109.0 h1:38CZoKGlCnPZjGdyj0ZfpoGae0/wgNfy5F0byyxg0Gk= -cloud.google.com/go v0.109.0/go.mod h1:2sYycXt75t/CSB5R9M2wPU1tJmire7AQZTPtITcGBVE= cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= @@ -73,7 +71,6 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -106,8 +103,8 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stripe/stripe-go/v74 v74.7.0 h1:KHlyslQj9YOv62b1sycQ31LFj7KlqR+seHsSowAWrjc= github.com/stripe/stripe-go/v74 v74.7.0/go.mod h1:5PoXNp30AJ3tGq57ZcFuaMylzNi8KpwlrYAFmO1fHZw= -github.com/urfave/cli/v2 v2.24.3 h1:7Q1w8VN8yE0MJEHP06bv89PjYsN4IHWED2s1v/Zlfm0= -github.com/urfave/cli/v2 v2.24.3/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/urfave/cli/v2 v2.24.4 h1:0gyJJEBYtCV87zI/x2nZCPyDxD51K6xM8SkwjHFCNEU= +github.com/urfave/cli/v2 v2.24.4/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= diff --git a/server/server.go b/server/server.go index 6a1ea89..4588614 100644 --- a/server/server.go +++ b/server/server.go @@ -1136,7 +1136,7 @@ func (s *Server) handleSubscribeWS(w http.ResponseWriter, r *http.Request, v *vi return err } err = g.Wait() - if err != nil && websocket.IsCloseError(err, websocket.CloseNormalClosure, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { + if err != nil && websocket.IsCloseError(err, websocket.CloseNormalClosure, websocket.CloseGoingAway, websocket.CloseAbnormalClosure, websocket.CloseNoStatusReceived) { logvr(v, r).Tag(tagWebsocket).Err(err).Fields(websocketErrorContext(err)).Trace("WebSocket connection closed") return nil // Normal closures are not errors; note: "1006 (abnormal closure)" is treated as normal, because people disconnect a lot } diff --git a/web/package-lock.json b/web/package-lock.json index 5cab17b..7680222 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -5510,9 +5510,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001452", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz", - "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==", + "version": "1.0.30001453", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001453.tgz", + "integrity": "sha512-R9o/uySW38VViaTrOtwfbFEiBFUh7ST3uIG4OEymIG3/uKdHDO4xk/FaqfUw0d+irSUyFPy3dZszf9VvSTPnsA==", "funding": [ { "type": "opencollective", @@ -6216,11 +6216,11 @@ } }, "node_modules/cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dependencies": { - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -6236,21 +6236,21 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", + "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", @@ -6265,7 +6265,7 @@ "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -6791,9 +6791,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.297", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.297.tgz", - "integrity": "sha512-dTXLXBdzfDYnZYq+bLer21HrFsEkzlR2OSIOsR+qroDmhmQU3i4T4KdY0Lcp83ZId3HnWTpPAEfhaJtVxmS/dQ==" + "version": "1.4.300", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.300.tgz", + "integrity": "sha512-tHLIBkKaxvG6NnDWuLgeYrz+LTwAnApHm2R3KBNcRrFn0qLmTrqQeB4X4atfN6YJbkOOOSdRBeQ89OfFUelnEQ==" }, "node_modules/emittery": { "version": "0.8.1", @@ -7683,9 +7683,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dependencies": { "estraverse": "^5.1.0" }, @@ -12976,11 +12976,11 @@ } }, "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" @@ -13411,9 +13411,9 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", @@ -13886,9 +13886,9 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" @@ -14731,9 +14731,9 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.0.tgz", - "integrity": "sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", + "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", From a95d1f9200b225a63a09700189818237796110dc Mon Sep 17 00:00:00 2001 From: Naofumi Tomita Date: Thu, 16 Feb 2023 16:12:44 -0500 Subject: [PATCH 27/79] Update README.md Making the description of the repo clearer and more objective. --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ca977ec..888fb76 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,9 @@ [![Healthcheck](https://healthchecks.io/badge/68b65976-b3b0-4102-aec9-980921/kcoEgrLY.svg)](https://ntfy.statuspage.io/) [![Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod)](https://gitpod.io/#https://github.com/binwiederhier/ntfy) -**ntfy** (pronounce: *notify*) is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) notification service. -It allows you to **send notifications to your phone or desktop via scripts** from any computer, entirely **without signup or cost**. -It's also open source (as you can plainly see) if you want to run your own. +**ntfy** (pronounced "notify") is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) notification service. With ntfy, you can **send notifications to your phone or desktop via scripts** from any computer, **without having to sign up or pay any fees**. If you'd like to run your own instance of the service, you can easily do so since ntfy is open source. -I run a free version of it at **[ntfy.sh](https://ntfy.sh)**. There's also an [open source Android app](https://github.com/binwiederhier/ntfy-android) (see [Google Play](https://play.google.com/store/apps/details?id=io.heckel.ntfy) or [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/)), and an [open source iOS app](https://github.com/binwiederhier/ntfy-ios) (see [App Store](https://apps.apple.com/us/app/ntfy/id1625396347)). +You can access the free version of ntfy at **[ntfy.sh](https://ntfy.sh)**. There is also an [open source Android app](https://github.com/binwiederhier/ntfy-android) available on [Google Play](https://play.google.com/store/apps/details?id=io.heckel.ntfy) or [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/), as well as an [open source iOS app](https://github.com/binwiederhier/ntfy-ios) available on the [App Store](https://apps.apple.com/us/app/ntfy/id1625396347).

From c815b183d4b8ff15a60fbd0c07c4d9073edeeecf Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 16 Feb 2023 16:14:41 -0500 Subject: [PATCH 28/79] Bump release notes --- docs/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index 4936059..82cd2db 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,7 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -## ntfy server v2.0.0 (UNRELEASED) +## ntfy server v2.0.0 Released February 16, 2023 This is the biggest ntfy server release I've ever done 🥳 . Lots of new and exciting features. From 0e1082b09cb2a1b544910aabae2e656b37476b99 Mon Sep 17 00:00:00 2001 From: Naofumi Tomita Date: Thu, 16 Feb 2023 16:17:57 -0500 Subject: [PATCH 29/79] Update README.md Italicize "ntfy" for emphasis, which was dropped during making changes. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 888fb76..42eaab8 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ [![Healthcheck](https://healthchecks.io/badge/68b65976-b3b0-4102-aec9-980921/kcoEgrLY.svg)](https://ntfy.statuspage.io/) [![Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod)](https://gitpod.io/#https://github.com/binwiederhier/ntfy) -**ntfy** (pronounced "notify") is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) notification service. With ntfy, you can **send notifications to your phone or desktop via scripts** from any computer, **without having to sign up or pay any fees**. If you'd like to run your own instance of the service, you can easily do so since ntfy is open source. +**ntfy** (pronounced "*notify*") is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) notification service. With ntfy, you can **send notifications to your phone or desktop via scripts** from any computer, **without having to sign up or pay any fees**. If you'd like to run your own instance of the service, you can easily do so since ntfy is open source. You can access the free version of ntfy at **[ntfy.sh](https://ntfy.sh)**. There is also an [open source Android app](https://github.com/binwiederhier/ntfy-android) available on [Google Play](https://play.google.com/store/apps/details?id=io.heckel.ntfy) or [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/), as well as an [open source iOS app](https://github.com/binwiederhier/ntfy-ios) available on the [App Store](https://apps.apple.com/us/app/ntfy/id1625396347). From c8c16eb8e6f392703e3c99c4a01bbc3d67fe65ec Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 16 Feb 2023 16:32:43 -0500 Subject: [PATCH 30/79] Fix failing test --- server/server_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/server_test.go b/server/server_test.go index fb78523..f183f08 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -1498,7 +1498,7 @@ func TestServer_PublishAttachmentTooLargeBodyVisitorAttachmentTotalSizeLimit(t * c.VisitorAttachmentTotalSizeLimit = 10000 s := newTestServer(t, c) - response := request(t, s, "PUT", "/mytopic", util.RandomString(5000), nil) + response := request(t, s, "PUT", "/mytopic", "text file!"+util.RandomString(4990), nil) msg := toMessage(t, response.Body.String()) require.Equal(t, 200, response.Code) require.Equal(t, "You received a file: attachment.txt", msg.Message) From c6e091a75463bc0e24e9a7d6835bd24188e0335d Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Wed, 15 Feb 2023 21:44:58 +0000 Subject: [PATCH 31/79] Translated using Weblate (Arabic) Currently translated at 22.7% (43 of 189 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ar/ --- web/public/static/langs/ar.json | 46 ++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ar.json b/web/public/static/langs/ar.json index 0967ef4..3e0d155 100644 --- a/web/public/static/langs/ar.json +++ b/web/public/static/langs/ar.json @@ -1 +1,45 @@ -{} +{ + "action_bar_logo_alt": "شعار ntfy", + "action_bar_settings": "اﻹعدادات", + "action_bar_clear_notifications": "محو كافة الإشعارات", + "action_bar_unsubscribe": "إلغاء الاشتراك", + "message_bar_show_dialog": "إظهار مربع حوار النشر", + "message_bar_publish": "نشر الرسالة", + "nav_topics_title": "المواضيع التي تم الاشتراك فيها", + "nav_button_all_notifications": "كافة الإشعارات", + "nav_button_settings": "اﻹعدادات", + "nav_button_documentation": "الدليل", + "nav_button_publish_message": "نشر الإشعار", + "nav_button_subscribe": "اشترك في الموضوع", + "nav_button_connecting": "جارٍ الاتصال", + "alert_grant_title": "تم تعطيل الإشعارات", + "alert_grant_description": "امنح متصفحك الإذن لعرض إشعارات سطح المكتب.", + "notifications_list": "قائمة الإشعارات", + "notifications_list_item": "إشعار", + "notifications_mark_read": "وضع علامة كمقروء", + "notifications_tags": "الوسوم", + "notifications_priority_x": "الأولوية {{priority}}", + "notifications_new_indicator": "إشعار جديد", + "notifications_attachment_image": "صورة مرفقة", + "notifications_attachment_copy_url_button": "نسخ عنوان URL", + "notifications_attachment_open_title": "انتقل إلى {{url}}", + "notifications_attachment_link_expires": "تنتهي صلاحية الرابط {{date}}", + "notifications_attachment_link_expired": "انتهت صلاحية رابط التنزيل", + "notifications_attachment_file_image": "ملف الصورة", + "notifications_attachment_file_video": "ملف فيديو", + "notifications_attachment_file_audio": "ملف صوتي", + "notifications_attachment_file_app": "ملف تطبيق Android", + "notifications_attachment_file_document": "وثيقة أخرى", + "notifications_click_copy_url_button": "نسخ الرابط", + "notifications_click_open_button": "فتح الرابط", + "notifications_actions_open_url_title": "انتقل إلى {{url}}", + "notifications_actions_not_supported": "هذا الإجراء غير مدعوم في تطبيق الويب", + "action_bar_send_test_notification": "إرسال إشعار للاختبار", + "action_bar_show_menu": "عرض القائمة", + "message_bar_type_message": "اكتب رسالة هنا", + "alert_not_supported_title": "الإشعارات غير مدعومة", + "alert_not_supported_description": "الإشعارات غير مدعومة في متصفحك.", + "message_bar_error_publishing": "خطأ أثناء نشر الإشعار", + "notifications_delete": "حذف", + "notifications_copied_to_clipboard": "تم نسخه إلى الحافظة" +} From 92cfc04024e0d3aa69e76e282209cb768a8a33a9 Mon Sep 17 00:00:00 2001 From: Daniel Rocha Date: Fri, 17 Feb 2023 10:53:09 +0100 Subject: [PATCH 32/79] Fix login, signup and reservation environment variables --- docs/config.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/config.md b/docs/config.md index 7ab8471..5fca3eb 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1179,9 +1179,9 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `visitor-request-limit-exempt-hosts` | `NTFY_VISITOR_REQUEST_LIMIT_EXEMPT_HOSTS` | *comma-separated host/IP list* | - | Rate limiting: List of hostnames and IPs to be exempt from request rate limiting | | `visitor-subscription-limit` | `NTFY_VISITOR_SUBSCRIPTION_LIMIT` | *number* | 30 | Rate limiting: Number of subscriptions per visitor (IP address) | | `web-root` | `NTFY_WEB_ROOT` | `app`, `home` or `disable` | `app` | Sets web root to landing page (home), web app (app) or disables the web app entirely (disable) | -| `enable-signup` | `NTFY_SIGNUP` | *boolean* (`true` or `false`) | `false` | Allows users to sign up via the web app, or API | -| `enable-login` | `NTFY_LOGIN` | *boolean* (`true` or `false`) | `false` | Allows users to log in via the web app, or API | -| `enable-reservations` | `NTFY_RESERVATIONS` | *boolean* (`true` or `false`) | `false` | Allows users to reserve topics (if their tier allows it) | +| `enable-signup` | `NTFY_ENABLE_SIGNUP` | *boolean* (`true` or `false`) | `false` | Allows users to sign up via the web app, or API | +| `enable-login` | `NTFY_ENABLE_LOGIN` | *boolean* (`true` or `false`) | `false` | Allows users to log in via the web app, or API | +| `enable-reservations` | `NTFY_ENABLE_RESERVATIONS` | *boolean* (`true` or `false`) | `false` | Allows users to reserve topics (if their tier allows it) | | `stripe-secret-key` | `NTFY_STRIPE_SECRET_KEY` | *string* | - | Payments: Key used for the Stripe API communication, this enables payments | | `stripe-webhook-key` | `NTFY_STRIPE_WEBHOOK_KEY` | *string* | - | Payments: Key required to validate the authenticity of incoming webhooks from Stripe | From d18c61f0daf0c3bf711b2ea92d120278b4c4749c Mon Sep 17 00:00:00 2001 From: Esteban Beltran Date: Fri, 17 Feb 2023 12:42:32 +0100 Subject: [PATCH 33/79] Add integration for Grafana Alerting webhook --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index 4aa8092..b0ed19c 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -72,6 +72,7 @@ and uptime of third party servers, so use of each server is **at your own discre ## Projects + scripts - [Grafana-to-ntfy](https://github.com/kittyandrew/grafana-to-ntfy) - Grafana-to-ntfy alerts channel (Rust) +- [Grafana-ntfy-webhook-integration](https://github.com/academo/grafana-alerting-ntfy-webhook-integration) - Integrates Grafana alerts webhooks (Go) - [ntfy-long-zsh-command](https://github.com/robfox92/ntfy-long-zsh-command) - Notifies you once a long-running command completes (zsh) - [ntfy-shellscripts](https://github.com/nickexyz/ntfy-shellscripts) - A few scripts for the ntfy project (Shell) - [QuickStatus](https://github.com/corneliusroot/QuickStatus) - A shell script to alert to any immediate problems upon login (Shell) From df68b0cb43a74189a0db2f04dbd32207e647e41d Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 17 Feb 2023 08:13:50 -0500 Subject: [PATCH 34/79] Blog post --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index 4aa8092..16df1bc 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -114,6 +114,7 @@ and uptime of third party servers, so use of each server is **at your own discre ## Blog + forum posts - [Video: Simple Push Notifications ntfy](https://www.youtube.com/watch?v=u9EcWrsjE20) ⭐ - youtube.com - 2/2023 +- [Use ntfy.sh with Home Assistant](https://diecknet.de/en/2023/02/12/ntfy-sh-with-homeassistant/) - diecknet.de - 2/2023 - [On installe Ntfy sur Synology Docker](https://www.maison-et-domotique.com/140356-serveur-notification-jeedom-ntfy-synology-docker/) - maison-et-domotique.co - 1/2023 - [January 2023 Developer Update](https://community.nodebb.org/topic/16908/january-2023-developer-update) - nodebb.org - 1/2023 - [Comment envoyer des notifications push sur votre téléphone facilement et gratuitement?](https://korben.info/notifications-push-telephone.html) - 1/2023 From 38e7801b419b868347e0904cc8d1cd5ed65c5233 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 17 Feb 2023 15:56:48 -0500 Subject: [PATCH 35/79] Fix panic in manager when `attachment-cache-dir` is not set, fixes #617 --- docs/releases.md | 16 +++++++---- server/message_cache.go | 2 +- server/server_account.go | 1 + server/server_manager.go | 51 ++++++++++++++++++----------------- server/server_manager_test.go | 28 +++++++++++++++++++ 5 files changed, 68 insertions(+), 30 deletions(-) create mode 100644 server/server_manager_test.go diff --git a/docs/releases.md b/docs/releases.md index 82cd2db..17c2430 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,6 +2,12 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). +## ntfy server v2.0.1 (UNRELEASED) + +**Bug fixes + maintenance:** + +* Avoid panic in manager when `attachment-cache-dir` is not set ([#617](https://github.com/binwiederhier/ntfy/issues/617), thanks to [@ksurl](https://github.com/ksurl)) + ## ntfy server v2.0.0 Released February 16, 2023 @@ -64,6 +70,11 @@ going. It'll only make ntfy better. * User account signup, login, topic reservations, access tokens, tiers etc. ([#522](https://github.com/binwiederhier/ntfy/issues/522)) * `OPTIONS` method calls are not serviced when the UI is disabled ([#598](https://github.com/binwiederhier/ntfy/issues/598), thanks to [@enticedwanderer](https://github.com/enticedwanderer) for reporting) +**Special thanks:** + +A big Thank-you goes to everyone who tested the user account and payments work. I very much appreciate all the feedback, +suggestions, and bug reports. Thank you, @nwithan8, @deadcade, @xenrox, @cmeis, and the others who I forgot. + ## ntfy server v1.31.0 Released February 14, 2023 @@ -95,11 +106,6 @@ breaking-change upgrade, which required some work to get working again. * Portuguese (thanks to [@ssantos](https://hosted.weblate.org/user/ssantos/)) -**Special thanks:** - -A big Thank-you goes to everyone who tested the user account and payments work. I very much appreciate all the feedback, -suggestions, and bug reports. Thank you, @nwithan8, @deadcade, and @xenrox. - ## ntfy server v1.30.1 Released December 23, 2022 🎅 diff --git a/server/message_cache.go b/server/message_cache.go index 37683d6..a8b8ff1 100644 --- a/server/message_cache.go +++ b/server/message_cache.go @@ -536,7 +536,7 @@ func (c *messageCache) ExpireMessages(topics ...string) error { } defer tx.Rollback() for _, t := range topics { - if _, err := tx.Exec(updateMessagesForTopicExpiryQuery, time.Now().Unix(), t); err != nil { + if _, err := tx.Exec(updateMessagesForTopicExpiryQuery, time.Now().Unix()-1, t); err != nil { return err } } diff --git a/server/server_account.go b/server/server_account.go index aff9f1b..26ef721 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -506,6 +506,7 @@ func (s *Server) maybeRemoveMessagesAndExcessReservations(r *http.Request, v *vi if err := s.messageCache.ExpireMessages(topics...); err != nil { return err } + go s.pruneMessages() return nil } diff --git a/server/server_manager.go b/server/server_manager.go index 2b80ae1..cef1e22 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -116,29 +116,30 @@ func (s *Server) pruneTokens() { } func (s *Server) pruneAttachments() { - if s.fileCache != nil { - log. - Tag(tagManager). - Timing(func() { - ids, err := s.messageCache.AttachmentsExpired() - if err != nil { - log.Tag(tagManager).Err(err).Warn("Error retrieving expired attachments") - } else if len(ids) > 0 { - if log.Tag(tagManager).IsDebug() { - log.Tag(tagManager).Debug("Deleting attachments %s", strings.Join(ids, ", ")) - } - if err := s.fileCache.Remove(ids...); err != nil { - log.Tag(tagManager).Err(err).Warn("Error deleting attachments") - } - if err := s.messageCache.MarkAttachmentsDeleted(ids...); err != nil { - log.Tag(tagManager).Err(err).Warn("Error marking attachments deleted") - } - } else { - log.Tag(tagManager).Debug("No expired attachments to delete") - } - }). - Debug("Deleted expired attachments") + if s.fileCache == nil { + return } + log. + Tag(tagManager). + Timing(func() { + ids, err := s.messageCache.AttachmentsExpired() + if err != nil { + log.Tag(tagManager).Err(err).Warn("Error retrieving expired attachments") + } else if len(ids) > 0 { + if log.Tag(tagManager).IsDebug() { + log.Tag(tagManager).Debug("Deleting attachments %s", strings.Join(ids, ", ")) + } + if err := s.fileCache.Remove(ids...); err != nil { + log.Tag(tagManager).Err(err).Warn("Error deleting attachments") + } + if err := s.messageCache.MarkAttachmentsDeleted(ids...); err != nil { + log.Tag(tagManager).Err(err).Warn("Error marking attachments deleted") + } + } else { + log.Tag(tagManager).Debug("No expired attachments to delete") + } + }). + Debug("Deleted expired attachments") } func (s *Server) pruneMessages() { @@ -149,8 +150,10 @@ func (s *Server) pruneMessages() { if err != nil { log.Tag(tagManager).Err(err).Warn("Error retrieving expired messages") } else if len(expiredMessageIDs) > 0 { - if err := s.fileCache.Remove(expiredMessageIDs...); err != nil { - log.Tag(tagManager).Err(err).Warn("Error deleting attachments for expired messages") + if s.fileCache != nil { + if err := s.fileCache.Remove(expiredMessageIDs...); err != nil { + log.Tag(tagManager).Err(err).Warn("Error deleting attachments for expired messages") + } } if err := s.messageCache.DeleteMessages(expiredMessageIDs...); err != nil { log.Tag(tagManager).Err(err).Warn("Error marking attachments deleted") diff --git a/server/server_manager_test.go b/server/server_manager_test.go new file mode 100644 index 0000000..f17d583 --- /dev/null +++ b/server/server_manager_test.go @@ -0,0 +1,28 @@ +package server + +import ( + "github.com/stretchr/testify/require" + "testing" +) + +func TestServer_Manager_Prune_Messages_Without_Attachments_DoesNotPanic(t *testing.T) { + // Tests that the manager runs without attachment-cache-dir set, see #617 + c := newTestConfig(t) + c.AttachmentCacheDir = "" + s := newTestServer(t, c) + + // Publish a message + rr := request(t, s, "POST", "/mytopic", "hi", nil) + require.Equal(t, 200, rr.Code) + m := toMessage(t, rr.Body.String()) + + // Expire message + require.Nil(t, s.messageCache.ExpireMessages("mytopic")) + + // Does not panic + s.pruneMessages() + + // Actually deleted + _, err := s.messageCache.Message(m.ID) + require.Equal(t, errMessageNotFound, err) +} From 9ff3bb0c87ff352ad4962416e9f42c31dd3e3fc0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 17 Feb 2023 20:52:48 -0500 Subject: [PATCH 36/79] Ensure that calls to standard logger `log.Println` also output JSON --- docs/releases.md | 1 + log/event.go | 31 +++++++++++++++++++------------ log/log.go | 48 +++++++++++++++++++++++++++++++++++++----------- log/log_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ server/server.go | 4 ++-- 5 files changed, 107 insertions(+), 25 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 17c2430..491f90b 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -7,6 +7,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Bug fixes + maintenance:** * Avoid panic in manager when `attachment-cache-dir` is not set ([#617](https://github.com/binwiederhier/ntfy/issues/617), thanks to [@ksurl](https://github.com/ksurl)) +* Ensure that calls to standard logger `log.Println` also output JSON (no ticket) ## ntfy server v2.0.0 Released February 16, 2023 diff --git a/log/event.go b/log/event.go index 0dd4be0..4ab0439 100644 --- a/log/event.go +++ b/log/event.go @@ -11,10 +11,11 @@ import ( ) const ( - tagField = "tag" - errorField = "error" - timeTakenField = "time_taken_ms" - exitCodeField = "exit_code" + fieldTag = "tag" + fieldError = "error" + fieldTimeTaken = "time_taken_ms" + fieldExitCode = "exit_code" + tagStdLog = "stdlog" timestampFormat = "2006-01-02T15:04:05.999Z07:00" ) @@ -40,7 +41,7 @@ func newEvent() *Event { // Fatal logs the event as FATAL, and exits the program with exit code 1 func (e *Event) Fatal(message string, v ...any) { - e.Field(exitCodeField, 1).maybeLog(FatalLevel, message, v...) + e.Field(fieldExitCode, 1).maybeLog(FatalLevel, message, v...) fmt.Fprintf(os.Stderr, message+"\n", v...) // Always output error to stderr os.Exit(1) } @@ -72,7 +73,7 @@ func (e *Event) Trace(message string, v ...any) { // Tag adds a "tag" field to the log event func (e *Event) Tag(tag string) *Event { - return e.Field(tagField, tag) + return e.Field(fieldTag, tag) } // Time sets the time field @@ -85,7 +86,7 @@ func (e *Event) Time(t time.Time) *Event { func (e *Event) Timing(f func()) *Event { start := time.Now() f() - return e.Field(timeTakenField, time.Since(start).Milliseconds()) + return e.Field(fieldTimeTaken, time.Since(start).Milliseconds()) } // Err adds an "error" field to the log event @@ -95,7 +96,7 @@ func (e *Event) Err(err error) *Event { } else if c, ok := err.(Contexter); ok { return e.With(c) } - return e.Field(errorField, err.Error()) + return e.Field(fieldError, err.Error()) } // Field adds a custom field and value to the log event @@ -136,9 +137,16 @@ func (e *Event) With(contexts ...Contexter) *Event { // is actually logged. If overrides are defined, then Contexters have to be applied in any case // to determine if they match. This is super complicated, but required for efficiency. func (e *Event) maybeLog(l Level, message string, v ...any) { + m := e.Render(l, message, v...) + if m != "" { + log.Println(m) + } +} + +func (e *Event) Render(l Level, message string, v ...any) string { appliedContexters := e.maybeApplyContexters() if !e.shouldLog(l) { - return + return "" } e.Message = fmt.Sprintf(message, v...) e.Level = l @@ -147,10 +155,9 @@ func (e *Event) maybeLog(l Level, message string, v ...any) { e.applyContexters() } if CurrentFormat() == JSONFormat { - log.Println(e.JSON()) - } else { - log.Println(e.String()) + return e.JSON() } + return e.String() } // Loggable returns true if the given log level is lower or equal to the current log level diff --git a/log/log.go b/log/log.go index c4934f0..7c0f9cd 100644 --- a/log/log.go +++ b/log/log.go @@ -4,6 +4,7 @@ import ( "io" "log" "os" + "strings" "sync" "time" ) @@ -12,7 +13,7 @@ import ( var ( DefaultLevel = InfoLevel DefaultFormat = TextFormat - DefaultOutput = os.Stderr + DefaultOutput = &peekLogWriter{os.Stderr} ) var ( @@ -20,9 +21,18 @@ var ( format = DefaultFormat overrides = make(map[string]*levelOverride) output io.Writer = DefaultOutput + filename = "" mu = &sync.RWMutex{} ) +// init sets the default log output (including log.SetOutput) +// +// This has to be explicitly called, because DefaultOutput is a peekLogWriter, +// which wraps os.Stderr. +func init() { + SetOutput(DefaultOutput) +} + // Fatal prints the given message, and exits the program func Fatal(message string, v ...any) { newEvent().Fatal(message, v...) @@ -132,28 +142,27 @@ func SetFormat(newFormat Format) { func SetOutput(w io.Writer) { mu.Lock() defer mu.Unlock() - log.SetOutput(w) - output = w + output = &peekLogWriter{w} + if f, ok := w.(*os.File); ok { + filename = f.Name() + } else { + filename = "" + } + log.SetOutput(output) } // File returns the log file, if any, or an empty string otherwise func File() string { mu.RLock() defer mu.RUnlock() - if f, ok := output.(*os.File); ok { - return f.Name() - } - return "" + return filename } // IsFile returns true if the output is a non-default file func IsFile() bool { mu.RLock() defer mu.RUnlock() - if _, ok := output.(*os.File); ok && output != DefaultOutput { - return true - } - return false + return filename != "" } // DisableDates disables the date/time prefix @@ -175,3 +184,20 @@ func IsTrace() bool { func IsDebug() bool { return Loggable(DebugLevel) } + +// peekLogWriter is an io.Writer which will peek at the rendered log event, +// and ensure that the rendered output is valid JSON. This is a hack! +type peekLogWriter struct { + w io.Writer +} + +func (w *peekLogWriter) Write(p []byte) (n int, err error) { + if len(p) == 0 || p[0] == '{' || CurrentFormat() == TextFormat { + return w.w.Write(p) + } + m := newEvent().Tag(tagStdLog).Render(InfoLevel, strings.TrimSpace(string(p))) + if m == "" { + return 0, nil + } + return w.w.Write([]byte(m + "\n")) +} diff --git a/log/log_test.go b/log/log_test.go index b016494..0d1ec4a 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -4,7 +4,10 @@ import ( "bytes" "encoding/json" "github.com/stretchr/testify/require" + "io" + "log" "os" + "path/filepath" "testing" "time" ) @@ -170,6 +173,51 @@ func TestLog_LevelOverrideAny(t *testing.T) { {"time":"1970-01-01T00:00:14Z","level":"INFO","message":"this is also logged","time_taken_ms":0} ` require.Equal(t, expected, out.String()) + require.False(t, IsFile()) + require.Equal(t, "", File()) +} + +func TestLog_UsingStdLogger_JSON(t *testing.T) { + t.Cleanup(resetState) + + var out bytes.Buffer + SetOutput(&out) + SetFormat(JSONFormat) + + log.Println("Some other library is using the standard Go logger") + require.Contains(t, out.String(), `,"level":"INFO","message":"Some other library is using the standard Go logger","tag":"stdlog"}`+"\n") +} + +func TestLog_UsingStdLogger_Text(t *testing.T) { + t.Cleanup(resetState) + + var out bytes.Buffer + SetOutput(&out) + + log.Println("Some other library is using the standard Go logger") + require.Contains(t, out.String(), `Some other library is using the standard Go logger`+"\n") + require.NotContains(t, out.String(), `{`) +} + +func TestLog_File(t *testing.T) { + t.Cleanup(resetState) + + logfile := filepath.Join(t.TempDir(), "ntfy.log") + f, err := os.OpenFile(logfile, os.O_CREATE|os.O_WRONLY, 0600) + require.Nil(t, err) + SetOutput(f) + SetFormat(JSONFormat) + require.True(t, IsFile()) + require.Equal(t, logfile, File()) + + Time(time.Unix(11, 0).UTC()).Field("this_one", "11").Info("this is logged") + require.Nil(t, f.Close()) + + f, err = os.Open(logfile) + require.Nil(t, err) + contents, err := io.ReadAll(f) + require.Nil(t, err) + require.Equal(t, `{"time":"1970-01-01T00:00:11Z","level":"INFO","message":"this is logged","this_one":"11"}`+"\n", string(contents)) } type fakeError struct { diff --git a/server/server.go b/server/server.go index 4588614..4853dab 100644 --- a/server/server.go +++ b/server/server.go @@ -333,9 +333,9 @@ func (s *Server) handleError(w http.ResponseWriter, r *http.Request, v *visitor, return } if isNormalError { - logvr(v, r).Err(httpErr).Debug("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) + logvr(v, r).Err(err).Debug("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) } else { - logvr(v, r).Err(httpErr).Info("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) + logvr(v, r).Err(err).Info("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code) } w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Origin", s.config.AccessControlAllowOrigin) // CORS, allow cross-origin requests From 484fd91452ed6f02630e6797e91dee3dbbd410e2 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 17 Feb 2023 21:00:43 -0500 Subject: [PATCH 37/79] Add comment --- log/event.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/log/event.go b/log/event.go index 4ab0439..55c4309 100644 --- a/log/event.go +++ b/log/event.go @@ -129,20 +129,13 @@ func (e *Event) With(contexts ...Contexter) *Event { return e } -// maybeLog logs the event to the defined output. The event is only logged, if -// either the global log level is >= l, or if the log level in one of the overrides matches +// Render returns the rendered log event as a string, or an empty string. The event is only rendered, +// if either the global log level is >= l, or if the log level in one of the overrides matches // the level. // // If no overrides are defined (default), the Contexter array is not applied unless the event // is actually logged. If overrides are defined, then Contexters have to be applied in any case // to determine if they match. This is super complicated, but required for efficiency. -func (e *Event) maybeLog(l Level, message string, v ...any) { - m := e.Render(l, message, v...) - if m != "" { - log.Println(m) - } -} - func (e *Event) Render(l Level, message string, v ...any) string { appliedContexters := e.maybeApplyContexters() if !e.shouldLog(l) { @@ -160,6 +153,13 @@ func (e *Event) Render(l Level, message string, v ...any) string { return e.String() } +// maybeLog logs the event to the defined output, or does nothing if Render returns an empty string +func (e *Event) maybeLog(l Level, message string, v ...any) { + if m := e.Render(l, message, v...); m != "" { + log.Println(m) + } +} + // Loggable returns true if the given log level is lower or equal to the current log level func (e *Event) Loggable(l Level) bool { return e.globalLevelWithOverride() <= l From 5287fa1c94300ccee60f1246c4f58898e7865060 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 17 Feb 2023 21:35:27 -0500 Subject: [PATCH 38/79] Bump version --- docs/install.md | 60 ++++++++++++++++++++++++------------------------ docs/releases.md | 5 +++- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/docs/install.md b/docs/install.md index 2c44031..4dbfa9b 100644 --- a/docs/install.md +++ b/docs/install.md @@ -26,37 +26,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_x86_64.tar.gz - tar zxvf ntfy_2.0.0_linux_x86_64.tar.gz - sudo cp -a ntfy_2.0.0_linux_x86_64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_x86_64.tar.gz + tar zxvf ntfy_2.0.1_linux_x86_64.tar.gz + sudo cp -a ntfy_2.0.1_linux_x86_64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.1_linux_x86_64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv6.tar.gz - tar zxvf ntfy_2.0.0_linux_armv6.tar.gz - sudo cp -a ntfy_2.0.0_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_armv6.tar.gz + tar zxvf ntfy_2.0.1_linux_armv6.tar.gz + sudo cp -a ntfy_2.0.1_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.1_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv7.tar.gz - tar zxvf ntfy_2.0.0_linux_armv7.tar.gz - sudo cp -a ntfy_2.0.0_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_armv7.tar.gz + tar zxvf ntfy_2.0.1_linux_armv7.tar.gz + sudo cp -a ntfy_2.0.1_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.1_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_arm64.tar.gz - tar zxvf ntfy_2.0.0_linux_arm64.tar.gz - sudo cp -a ntfy_2.0.0_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.0_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_arm64.tar.gz + tar zxvf ntfy_2.0.1_linux_arm64.tar.gz + sudo cp -a ntfy_2.0.1_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.0.1_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -106,7 +106,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -114,7 +114,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -122,7 +122,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -130,7 +130,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -140,28 +140,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -189,18 +189,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_macOS_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_macOS_all.tar.gz > ntfy_2.0.0_macOS_all.tar.gz -tar zxvf ntfy_2.0.0_macOS_all.tar.gz -sudo cp -a ntfy_2.0.0_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_macOS_all.tar.gz > ntfy_2.0.1_macOS_all.tar.gz +tar zxvf ntfy_2.0.1_macOS_all.tar.gz +sudo cp -a ntfy_2.0.1_macOS_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.0.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.0.1_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -212,7 +212,7 @@ ntfy --help ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.0.0/ntfy_2.0.0_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.0.1/ntfy_2.0.1_windows_x86_64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index 491f90b..4bbd306 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,10 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -## ntfy server v2.0.1 (UNRELEASED) +## ntfy server v2.0.1 +Released February 17, 2023 + +This is a quick bugfix release to address a panic that happens when `attachment-cache-dir` is not set. **Bug fixes + maintenance:** From 85fc16b0164d3d8fd7ef8372f3cbfc7799691052 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 17 Feb 2023 21:47:14 -0500 Subject: [PATCH 39/79] Bump deps --- go.mod | 6 +- go.sum | 12 +- web/package-lock.json | 428 +++++++++++++++--------------------------- 3 files changed, 156 insertions(+), 290 deletions(-) diff --git a/go.mod b/go.mod index e248595..ff34513 100644 --- a/go.mod +++ b/go.mod @@ -27,14 +27,14 @@ require github.com/pkg/errors v0.9.1 // indirect require ( firebase.google.com/go/v4 v4.10.0 - github.com/stripe/stripe-go/v74 v74.7.0 + github.com/stripe/stripe-go/v74 v74.8.0 ) require ( cloud.google.com/go v0.110.0 // indirect cloud.google.com/go/compute v1.18.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.10.0 // indirect + cloud.google.com/go/iam v0.12.0 // indirect cloud.google.com/go/longrunning v0.4.1 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect @@ -58,7 +58,7 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine/v2 v2.0.2 // indirect - google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc // indirect + google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index a7f6e80..b65ad81 100644 --- a/go.sum +++ b/go.sum @@ -7,8 +7,8 @@ cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGB cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/iam v0.10.0 h1:fpP/gByFs6US1ma53v7VxhvbJpO2Aapng6wabJ99MuI= -cloud.google.com/go/iam v0.10.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= +cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= @@ -101,8 +101,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stripe/stripe-go/v74 v74.7.0 h1:KHlyslQj9YOv62b1sycQ31LFj7KlqR+seHsSowAWrjc= -github.com/stripe/stripe-go/v74 v74.7.0/go.mod h1:5PoXNp30AJ3tGq57ZcFuaMylzNi8KpwlrYAFmO1fHZw= +github.com/stripe/stripe-go/v74 v74.8.0 h1:0+3EfQSBhMg8SQ1+w+AP6Gxyko2crWbUG2uXbzYs8SU= +github.com/stripe/stripe-go/v74 v74.8.0/go.mod h1:5PoXNp30AJ3tGq57ZcFuaMylzNi8KpwlrYAFmO1fHZw= github.com/urfave/cli/v2 v2.24.4 h1:0gyJJEBYtCV87zI/x2nZCPyDxD51K6xM8SkwjHFCNEU= github.com/urfave/cli/v2 v2.24.4/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -176,8 +176,8 @@ google.golang.org/appengine/v2 v2.0.2/go.mod h1:PkgRUWz4o1XOvbqtWTkBtCitEJ5Tp4Ho google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc h1:ijGwO+0vL2hJt5gaygqP2j6PfflOBrRot0IczKbmtio= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/web/package-lock.json b/web/package-lock.json index 7680222..d740716 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -89,6 +89,14 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/eslint-parser": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", @@ -114,6 +122,14 @@ "node": ">=10" } }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.20.14", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", @@ -181,6 +197,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.20.12", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", @@ -233,6 +257,14 @@ "@babel/core": "^7.4.0-0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", @@ -1496,6 +1528,14 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", @@ -1700,6 +1740,14 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -2089,12 +2137,11 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", - "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", + "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.0", "@emotion/memoize": "^0.8.0", @@ -2105,9 +2152,6 @@ "find-root": "^1.1.0", "source-map": "^0.5.7", "stylis": "4.1.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@emotion/cache": { @@ -2141,12 +2185,12 @@ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "node_modules/@emotion/react": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", - "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", + "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", + "@emotion/babel-plugin": "^11.10.6", "@emotion/cache": "^11.10.5", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", @@ -2155,13 +2199,9 @@ "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } @@ -2185,26 +2225,22 @@ "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" }, "node_modules/@emotion/styled": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", - "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", + "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", + "@emotion/babel-plugin": "^11.10.6", "@emotion/is-prop-valid": "^1.2.0", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0" }, "peerDependencies": { - "@babel/core": "^7.0.0", "@emotion/react": "^11.0.0-rc.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } @@ -3948,9 +3984,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "18.13.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", - "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==" + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -4120,36 +4156,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.52.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.52.0.tgz", @@ -4274,36 +4280,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/utils": { "version": "5.52.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", @@ -4349,36 +4325,6 @@ "node": ">=4.0" } }, - "node_modules/@typescript-eslint/utils/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.52.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", @@ -5162,6 +5108,14 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", @@ -5510,9 +5464,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001453", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001453.tgz", - "integrity": "sha512-R9o/uySW38VViaTrOtwfbFEiBFUh7ST3uIG4OEymIG3/uKdHDO4xk/FaqfUw0d+irSUyFPy3dZszf9VvSTPnsA==", + "version": "1.0.30001456", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz", + "integrity": "sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==", "funding": [ { "type": "opencollective", @@ -6006,36 +5960,6 @@ "webpack": "^5.0.0" } }, - "node_modules/css-loader/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/css-minimizer-webpack-plugin": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", @@ -6791,9 +6715,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.300", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.300.tgz", - "integrity": "sha512-tHLIBkKaxvG6NnDWuLgeYrz+LTwAnApHm2R3KBNcRrFn0qLmTrqQeB4X4atfN6YJbkOOOSdRBeQ89OfFUelnEQ==" + "version": "1.4.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", + "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==" }, "node_modules/emittery": { "version": "0.8.1", @@ -7264,6 +7188,14 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-jest": { "version": "25.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", @@ -7316,6 +7248,14 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-react": { "version": "7.32.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", @@ -7382,6 +7322,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-testing-library": { "version": "5.10.2", "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.2.tgz", @@ -8223,17 +8171,6 @@ "node": ">=8" } }, - "node_modules/fork-ts-checker-webpack-plugin/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -8251,20 +8188,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8284,11 +8207,6 @@ "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -9548,6 +9466,14 @@ "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==", + "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", @@ -10946,31 +10872,6 @@ "node": ">=8" } }, - "node_modules/jest-snapshot/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "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", @@ -10982,11 +10883,6 @@ "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -11953,6 +11849,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-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==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -13343,36 +13247,6 @@ "webpack": "^5.0.0" } }, - "node_modules/postcss-loader/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/postcss-logical": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", @@ -14581,36 +14455,6 @@ } } }, - "node_modules/react-scripts/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-scripts/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-scripts/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -15172,13 +15016,35 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/semver/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -15891,9 +15757,9 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "node_modules/tailwindcss": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.6.tgz", - "integrity": "sha512-BfgQWZrtqowOQMC2bwaSNe7xcIjdDEgixWGYOd6AL0CbKHJlvhfdbINeAW76l1sO+1ov/MJ93ODJ9yluRituIw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz", + "integrity": "sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==", "dependencies": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -15995,9 +15861,9 @@ } }, "node_modules/terser": { - "version": "5.16.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", - "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==", + "version": "5.16.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.4.tgz", + "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", From 9efc1ec4f602c3783fd85cc3c36feff3e27d2317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Sat, 18 Feb 2023 12:30:10 +0100 Subject: [PATCH 40/79] Fix typo in publishmd --- docs/publish.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/publish.md b/docs/publish.md index d0071fd..8a728f3 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -2930,7 +2930,7 @@ Here's an example using the `auth` query parameter: ])); ``` -To generate the value of the `auth` parameter, encode the value of the `Authorization` header (see anove) using +To generate the value of the `auth` parameter, encode the value of the `Authorization` header (see above) using **raw base64 encoding** (like base64, but strip any trailing `=`). Here's some pseudo-code that hopefully explains it better: From 96439ac41f23a793a5c97e73653dcdb1da6dd52b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 18 Feb 2023 19:48:21 -0500 Subject: [PATCH 41/79] Do not set m.Expires if `cache: no` is set --- docs/releases.md | 2 +- docs/subscribe/api.md | 2 +- server/server.go | 4 +++- server/server_test.go | 3 +++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 4bbd306..ad14924 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -77,7 +77,7 @@ going. It'll only make ntfy better. **Special thanks:** A big Thank-you goes to everyone who tested the user account and payments work. I very much appreciate all the feedback, -suggestions, and bug reports. Thank you, @nwithan8, @deadcade, @xenrox, @cmeis, and the others who I forgot. +suggestions, and bug reports. Thank you, @nwithan8, @deadcade, @xenrox, @cmeis, @wunter8 and the others who I forgot. ## ntfy server v1.31.0 Released February 14, 2023 diff --git a/docs/subscribe/api.md b/docs/subscribe/api.md index b9d72b4..58da975 100644 --- a/docs/subscribe/api.md +++ b/docs/subscribe/api.md @@ -319,7 +319,7 @@ format of the message. It's very straight forward: |--------------|----------|---------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------| | `id` | ✔️ | *string* | `hwQ2YpKdmg` | Randomly chosen message identifier | | `time` | ✔️ | *number* | `1635528741` | Message date time, as Unix time stamp | -| `expires` | ✔️ | *number* | `1673542291` | Unix time stamp indicating when the message will be deleted | +| `expires` | (✔)️ | *number* | `1673542291` | Unix time stamp indicating when the message will be deleted, not set if `Cache: no` is sent | | `event` | ✔️ | `open`, `keepalive`, `message`, or `poll_request` | `message` | Message type, typically you'd be only interested in `message` | | `topic` | ✔️ | *string* | `topic1,topic2` | Comma-separated list of topics the message is associated with; only one for all `message` events, but may be a list in `open` events | | `message` | - | *string* | `Some message` | Message body; always present in `message` events | diff --git a/server/server.go b/server/server.go index 4853dab..1890f17 100644 --- a/server/server.go +++ b/server/server.go @@ -589,7 +589,9 @@ func (s *Server) handlePublishWithoutResponse(r *http.Request, v *visitor) (*mes } m.Sender = v.IP() m.User = v.MaybeUserID() - m.Expires = time.Unix(m.Time, 0).Add(v.Limits().MessageExpiryDuration).Unix() + if cache { + m.Expires = time.Unix(m.Time, 0).Add(v.Limits().MessageExpiryDuration).Unix() + } if err := s.handlePublishBody(r, v, m, body, unifiedpush); err != nil { return nil, err } diff --git a/server/server_test.go b/server/server_test.go index f183f08..e2bbf4c 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -149,6 +149,8 @@ func TestServer_PublishAndSubscribe(t *testing.T) { require.Equal(t, "", messages[1].Title) require.Equal(t, 0, messages[1].Priority) require.Nil(t, messages[1].Tags) + require.True(t, time.Now().Add(12*time.Hour-5*time.Second).Unix() < messages[1].Expires) + require.True(t, time.Now().Add(12*time.Hour+5*time.Second).Unix() > messages[1].Expires) require.Equal(t, messageEvent, messages[2].Event) require.Equal(t, "mytopic", messages[2].Topic) @@ -287,6 +289,7 @@ func TestServer_PublishNoCache(t *testing.T) { msg := toMessage(t, response.Body.String()) require.NotEmpty(t, msg.ID) require.Equal(t, "this message is not cached", msg.Message) + require.Equal(t, 0, msg.Expires) response = request(t, s, "GET", "/mytopic/json?poll=1", "", nil) messages := toMessages(t, response.Body.String()) From 9377c265a84587f1bd55cec1dc60e3d7554eb606 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 18 Feb 2023 19:49:29 -0500 Subject: [PATCH 42/79] Thank you @oakd for your sponsorship --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 42eaab8..cc35861 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + I'd also like to thank JetBrains for providing their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/) to me for free, and [DigitalOcean](https://m.do.co/c/442b929528db) (*referral link*) for supporting the project: From fb727fc84a837b84724c41cdf3b8f1d93b139f9e Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 18 Feb 2023 19:54:47 -0500 Subject: [PATCH 43/79] Derp --- server/server_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/server_test.go b/server/server_test.go index e2bbf4c..4abff39 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -289,7 +289,7 @@ func TestServer_PublishNoCache(t *testing.T) { msg := toMessage(t, response.Body.String()) require.NotEmpty(t, msg.ID) require.Equal(t, "this message is not cached", msg.Message) - require.Equal(t, 0, msg.Expires) + require.Equal(t, int64(0), msg.Expires) response = request(t, s, "GET", "/mytopic/json?poll=1", "", nil) messages := toMessages(t, response.Body.String()) From c3f29bdc418a20e430a59a28b78f553fb07ab3bc Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Sun, 19 Feb 2023 06:53:13 +0000 Subject: [PATCH 44/79] Translated using Weblate (Arabic) Currently translated at 83.0% (157 of 189 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ar/ --- web/public/static/langs/ar.json | 116 +++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ar.json b/web/public/static/langs/ar.json index 3e0d155..d3814ce 100644 --- a/web/public/static/langs/ar.json +++ b/web/public/static/langs/ar.json @@ -41,5 +41,119 @@ "alert_not_supported_description": "الإشعارات غير مدعومة في متصفحك.", "message_bar_error_publishing": "خطأ أثناء نشر الإشعار", "notifications_delete": "حذف", - "notifications_copied_to_clipboard": "تم نسخه إلى الحافظة" + "notifications_copied_to_clipboard": "تم نسخه إلى الحافظة", + "action_bar_toggle_mute": "كتم / إلغاء كتم الإشعارات", + "action_bar_toggle_action_menu": "فتح/إغلاق قائمة الإجراءات", + "alert_grant_button": "امنح الآن", + "notifications_attachment_open_button": "فتح المرفق", + "notifications_attachment_copy_url_title": "نسخ عنوان URL للمرفق إلى الحافظة", + "notifications_click_copy_url_title": "انسخ رابط URL إلى الحافظة", + "notifications_none_for_topic_title": "لم تتلق بعد أية إشعارات حول هذا الموضوع.", + "notifications_none_for_any_title": "لم تتلق أية إشعارات.", + "notifications_no_subscriptions_title": "يبدو أنك لا تملك أي اشتراكات بعد.", + "notifications_example": "مثال", + "notifications_loading": "تحميل الإشعارات…", + "publish_dialog_title_topic": "أنشُر إلى {{topic}}", + "publish_dialog_title_no_topic": "انشُر الإشعار", + "publish_dialog_emoji_picker_show": "اختر رمزًا تعبيريًا", + "publish_dialog_priority_min": "الحد الأدنى للأولوية", + "publish_dialog_priority_low": "أولوية منخفضة", + "publish_dialog_priority_default": "الأولوية الافتراضية", + "publish_dialog_priority_high": "أولوية عالية", + "publish_dialog_base_url_label": "الرابط التشعبي للخدمة", + "publish_dialog_priority_max": "الأولوية القصوى", + "publish_dialog_topic_placeholder": "اسم الموضوع، على سبيل المثال phil_alerts", + "publish_dialog_title_label": "العنوان", + "publish_dialog_title_placeholder": "عنوان الإشعار، على سبيل المثال تنبيه مساحة القرص", + "publish_dialog_message_label": "الرسالة", + "publish_dialog_message_placeholder": "اكتب رسالة هنا", + "publish_dialog_tags_label": "الوسوم", + "publish_dialog_priority_label": "الأولوية", + "publish_dialog_click_placeholder": "العنوان التشعبي URL الذي يتم فتحه عند النقر فوق الإشعار", + "publish_dialog_email_label": "البريد الإلكتروني", + "publish_dialog_filename_label": "اسم الملف", + "publish_dialog_attach_label": "الرابط التشعبي URL للمرفق", + "publish_dialog_filename_placeholder": "اسم ملف المرفق", + "publish_dialog_delay_label": "تأخير", + "publish_dialog_delay_reset": "إزالة تأخر التسليم", + "publish_dialog_chip_click_label": "انقر على عنوان URL", + "publish_dialog_chip_email_label": "إعادة التوجيه إلى البريد الإلكتروني", + "publish_dialog_chip_attach_file_label": "إرفاق ملف محلي", + "publish_dialog_chip_topic_label": "تغيير الموضوع", + "publish_dialog_button_cancel_sending": "إلغاء الإرسال", + "publish_dialog_button_send": "أرسل", + "publish_dialog_checkbox_publish_another": "نشر آخر", + "publish_dialog_attached_file_title": "الملف المرفق:", + "publish_dialog_attached_file_filename_placeholder": "اسم الملف المرفق", + "publish_dialog_attached_file_remove": "إزالة الملف المرفق", + "publish_dialog_drop_file_here": "قم بإسقاط ملف هنا", + "emoji_picker_search_placeholder": "البحث عن رمز تعبيري", + "emoji_picker_search_clear": "مسح البحث", + "subscribe_dialog_subscribe_title": "الإشتراك في الموضوع", + "subscribe_dialog_subscribe_use_another_label": "استخدام خادم آخر", + "subscribe_dialog_subscribe_base_url_label": "الرابط التشعبي URL للخدمة", + "subscribe_dialog_subscribe_button_subscribe": "اشترِك", + "subscribe_dialog_login_title": "تسجيل الدخول مطلوب", + "subscribe_dialog_login_username_label": "اسم المستخدم، على سبيل المثال phil", + "subscribe_dialog_login_password_label": "كلمة المرور", + "subscribe_dialog_login_button_login": "الولوج", + "subscribe_dialog_error_user_anonymous": "مجهول", + "prefs_notifications_title": "الإشعارات", + "prefs_notifications_sound_title": "صوت الإشعار", + "prefs_notifications_sound_no_sound": "لا صوت", + "prefs_notifications_min_priority_description_any": "عرض جميع الإشعارات، بغض النظر عن الأولوية", + "prefs_notifications_delete_after_title": "حذف الإشعارات", + "prefs_notifications_delete_after_never": "أبداً", + "prefs_notifications_delete_after_three_hours": "بعد ثلاث ساعات", + "prefs_notifications_delete_after_one_day": "بعد يوم واحد", + "prefs_notifications_delete_after_one_month": "بعد شهر واحد", + "prefs_notifications_delete_after_never_description": "لا يتم حذف الإشعارات تلقائيا مطلقا", + "prefs_notifications_delete_after_one_week_description": "يتم حذف الإشعارات تلقائيا بعد يوم واحد", + "prefs_notifications_delete_after_one_month_description": "يتم حذف الإشعارات تلقائيا بعد شهر واحد", + "prefs_users_table": "قائمة المستخدمين", + "prefs_users_edit_button": "تعديل المستخدم", + "prefs_users_table_user_header": "المستخدم", + "prefs_users_table_base_url_header": "الرابط التشعبي للخدمة", + "priority_default": "افتراضية", + "prefs_users_dialog_username_label": "اسم المستخدم، على سبيل المثال phil", + "prefs_users_dialog_button_cancel": "إلغاء", + "prefs_users_dialog_button_add": "اضافة", + "prefs_users_dialog_button_save": "حفظ", + "prefs_appearance_title": "المظهر", + "prefs_appearance_language_title": "اللغة", + "error_boundary_gathering_info": "جمع مزيد من المعلومات …", + "error_boundary_unsupported_indexeddb_title": "التصفح الخاص غير مدعوم", + "priority_high": "عالية", + "priority_max": "قصوى", + "error_boundary_title": "أوه لا ، لقد تحطم ntfy", + "prefs_users_delete_button": "حذف المستخدم", + "prefs_users_add_button": "إضافة مستخدم", + "prefs_notifications_min_priority_any": "مهما كانت الأولوية", + "prefs_notifications_delete_after_one_week": "بعد أسبوع واحد", + "prefs_notifications_delete_after_three_hours_description": "يتم حذف الإشعارات تلقائيا بعد ثلاث ساعات", + "prefs_notifications_delete_after_one_day_description": "يتم حذف الإشعارات تلقائيا بعد يوم واحد", + "prefs_users_title": "إدارة المستخدمين", + "prefs_users_dialog_title_add": "إضافة مستخدم", + "prefs_users_dialog_title_edit": "تعديل المستخدم", + "prefs_users_dialog_base_url_label": "عنوان URL للخدمة، على سبيل المثال، https://ntfy.sh", + "publish_dialog_button_cancel": "إلغاء", + "publish_dialog_message_published": "تم نشر الإشعار", + "prefs_users_dialog_password_label": "كلمة المرور", + "publish_dialog_base_url_placeholder": "عنوان URL للخدمة، على سبيل المثال، https://example.com", + "publish_dialog_progress_uploading": "جارٍ التحميل…", + "publish_dialog_topic_label": "اسم الموضوع", + "publish_dialog_topic_reset": "إعادة تعيين الموضوع", + "publish_dialog_email_reset": "إزالة إعادة توجيه البريد الإلكتروني", + "publish_dialog_email_placeholder": "عنوان لإعادة توجيه الإشعار إليه، على سبيل المثال phil@example.com", + "publish_dialog_other_features": "ميزات أخرى:", + "publish_dialog_chip_attach_url_label": "إرفاق ملف عن طريق عنوان URL", + "subscribe_dialog_subscribe_topic_placeholder": "اسم الموضوع، على سبيل المثال phil_alerts", + "prefs_notifications_sound_description_none": "لا تصدر الإشعارات أي صوت عند وصولها", + "publish_dialog_chip_delay_label": "تأخير التسليم", + "subscribe_dialog_login_description": "هذا الموضوع محمي بكلمة مرور. الرجاء إدخال اسم المستخدم وكلمة المرور للاشتراك.", + "subscribe_dialog_subscribe_button_cancel": "إلغاء", + "subscribe_dialog_login_button_back": "العودة", + "prefs_notifications_sound_play": "تشغيل الصوت المحدد", + "prefs_notifications_min_priority_title": "الحد الأدنى للأولوية", + "prefs_notifications_min_priority_max_only": "الأولوية القصوى فقط" } From 152dfbbb549bc593abd3711dc4a6ebc87d0f1c29 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 19 Feb 2023 07:25:14 -0500 Subject: [PATCH 45/79] Add Arabic --- web/src/components/Preferences.js | 1 + 1 file changed, 1 insertion(+) diff --git a/web/src/components/Preferences.js b/web/src/components/Preferences.js index f8af3ae..1a418bb 100644 --- a/web/src/components/Preferences.js +++ b/web/src/components/Preferences.js @@ -456,6 +456,7 @@ const Language = () => {

XrI)kENd$&eCsK@vnMOcXtjTl`tqyTDQe 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� z-NrAlUb9mbt#@~%`L%%(M9YK~F5$ zq=>mB+T;rb`aWls!Q&J=Nde+mnO=Oe5+H#NFuUHS=hq7ze?O%3loSRJrZZ<2#% zIJGx1-+Y%Y2R1^lYCIRN2>JA79+`>RYiuY5$0J1unrtqX;GlP%a{>7~C2Jn-`WtIP zY-zef&T)E$pwm}YAMFF@7}EQEMO~E-7`uJT_X$pt48Lv{HdqUj7+T$#KQ^!?i^$;O zWY?AJwVZh7nY1ci6E!jT@(eSWiVfDAsJ4Ybk~+|KsnG&0S|CmTx`~)w?0x;Er*-=5 zSbDDO$k+6qCD>pnhV&ERC7245k~e;AYz&Q$Tg)VON)K*CGy5ID$BhJ&{B7!h!-p}0 zy&)q+-DPY?%z?z_2{DWTR`<*5D;|V3`4B@(fJv6lUmMJkJd^sJF49vGb`RdE<7i-5 zZ}6c5*r#$;PnuK>XiY&yQ~}@z9pK89C^)?9dY&?)6M=X}v%70Gbnw-P`i{TNSJfCO zl3s~P%SmzzeE9E3my=Hi;ZNY+N$QYtoqA~U$q6krgc9+PuFiK-s?vkbF`BhmnDAKL zA+UM6BQHjP&5Qaqc)$ks6BjSwAv;JjwgfNbnHu@LVYPG7!A6(JdUu7~c9&TW+{24v zcEpPs)FG28{UKn}zE#F^#cqR@-;|6U>0#;LX$i}^^+4~}p_UpdDvJRYlDbOM=Wbh; z=!vgZ<7mdWdn5OQpbO;2YRQ7l(uR9(!Sz7)!}+t;X>XHv10}~=5D63qmN+jt;>Y|hKPyk#pRhihlHGAX3)QF8vJWh(372ayp_LK9_p2Wn@J}%jm<%+lBO_<;hR`i+S z5DsMGU{;%a6_z60V0FXeBZu^iPrG#C}z3EU- z4&K06!!B#5m+^(b41R3CXrWRm9cPB?Rje_5<VPc>EiatfS*^tP z3qs`6-21(dcE3Ol-K5gCOxc_c$KDWgQ7{bmNq}iMp9ayJkyS+yPB%$YwAQMpLVGt z{(}s*n!B>aNzN?xpLV#bitmXFkW0Buym~D-?*Dv)FWm6nlbHg2s#(>@h0?;$SW`M& z^Gzvx$ws@^596?&+kd#38bMiB&gQ^*oC}*8jEqU75n2Qs{y!eZ4D=HOK7(mQoQ%P1 zY*Y89=hfeq%iyVebaWdJ<;a|HrtyTnS&ks%S-0CBdzRH?w)ufm5qMimJ%fc*>q5Es@O+{t$s`r72=OSW)JBz-`0@~(Ej9)Z7mGPQCWS|S6>x@ z9aNod{Zrt_eZ~z;NjB{l{*3-d40AUQHy$*uVR2}I%}(ZFnjsMaC@-NM0_rl61rK-2 zlE#2pp#;M-zBTo1=H{C3jsHG-W94Wm>+YwQVq71%Y*FC)nr@2 zk20AYd_YP7->%`UZ0qFbB(R`^(}C~P$Jd;wXTr*#k&^~<8Htqlw+J)VxD*pDzvX_V ztlQMt=Q+mHmeMjRIZaa=zDVhZtxnxOctA8=$8WS{kbe3*@CIAdW}}xZZoiDpGf(Y} zvOGG6;?tnQ0Z*?&f&=Dj&?&n=%=>T8Hy_(j72S*2%)WL`z_{}m88sBcE}%s$lOeJz zYHy8EP20(1(S-Otz2pXMLXb)LOvr573d3i&HAYJ!H@}#WopewaZ-``3R+=y?@Ja>- zxFOnRJ6Z2=Al-i6*Tw)A78g=tF%O2(#n9Mcg3#BCzVc2yhq7APkwNwhX|PaM%?j`V z0~cUX-IY4?0}DmDD+wi&u}N84rxFzv6>$DR0*bwqg2Wc`A;iVcOp2!R6K+n?2dn}? z!kQj-c6vnDF_Z1ve|RtGm14y2G`Uap{f6z}lichcbbG$kq1#2s4$HIKXcfYc)EOe3 z>0rd;M;WVu1e1JlY>mwdu;MV&9$uc3A=HBo>`iqPZ?M9?~Y?;yAORL?t}fdj^P2G8yQr8 zpzjW}sn4PsmwMt6%$QgR7jCoU#JCpp;N#vsEet&-H&PD2dUF8kAh0<^ufRPJjaCo& zF=8_|sL42GY<7cqM7$_aGCPaU zdp#_%t75 zel2SeCsC6S)XO%d;+h%mA19nIY8jptN9)S`aGV1%f?{2HM(lJu_nvx+Iyi^me65sq zQvr|o$gXmS{MFMNopWB32+}=fSY9zz^L-+m)tAzK*l`~X#j1|NWev=wN_(js+n#^( zZ)=yDQzpUsWOud#P++mktM2w-HX#ZDBKP_}z#G9{_(UOIUApJz&z~t>s~8*)%W=Rt z_^eC0BH2r@DPnioY%WM;Z;*1Wopf+&AmZ46t?2TsApzotUX9t&12(W4UOPSYH!$Hh zhiS2vf;5|WLoZGkFf^!Jm)AUqYX)IKZ%~4;p!(jXT|#fqv5dN6Q5i*DLG{Qdzc}%f z`_m11_TIhQ5{&w_Cd3dk#y~O~QkBF?ucQ!acjDL9+oU@4s*mI4p>w0>O^w3oz=qC; zUgMRdnQ!z;73Y;ZG)UwL;(d}0C$zrbht;L&0HOo^izbE~b}dy>j$bBlPN@JlzcyTL zFDM96rOuvmLG%)@^hB+B6 z#W56Cg09uhzbKWmIs5YJIeBfFfo}$Nz4wfOvmx!HnzHNP!rO$&GPA{!u;4e&Z||WQmM!-v#Gq!vUi3f z^U8R-frH1gYwbJ&1dTMH(7;*?SBkH3bAF2-Sx?*JXwqnDLYHrFZ#vsqLh0{p)>;= z$spGGXi~;swJrzY&~~!VC?g}aX_h7w&uo(~rfVF`C4=|282=kcQ9DsDGO5>vkkY5Y z?7zs5I;X_5cinw%P+Ugxu)^v}9DhEQ0(%6W<8rH{uGL&{-zSA= zT0A=SistwJrfw^Fz84tq5v z__Kggj)&y4Bbj1XU|hW`?{1y@PFvghy^`&Yt&EN2si_HWlEI=Kc1ykzHu(2{~@zQHoypBnCKmRQy-V^>> z+M}#9MU?@DL?R3IU3mqo=Rxw-m9Fq?TDzB5R91r6+z*|>nr3Nho9^Fho`j#8nhH^E zAw=K;a8rk%g@THz0`yfs<`k~`j$NW16HbA}#INq5C(#KlxE1fj43CZksFseDawqo_ z4p?1=X@{|4(5)^mx1>@{p9%PDw8PptEI#SVpTqx&%mh{@zGA-@HcEb%!pvIs!Xgf; z8jPdbL5N_ND>;Ip>1S#bbd9LIqLZa7%M=c|A3EsQ#;#p%azmz~Gn)Q5 zQ02-2dvYO%xHY`O>Yvo8beY+Xi`*u3^3GxXdC=_DCokFQWlS5-dPD+9`2iJ}J z|KJFhzBZ`ApzGl<1R4;%FaM(4q81TmLbT8INQt)`)Qgi^1Hm~6QJK`%kc`xIA;hfi zS-Yy<*jZL|9T5~ooF&Y7g)@_DA`*mNV zLU*W=c=;B+!cBlflw)(K)Md4Wu~2j|SY#rwN4~0E#q~_6pOcc(+00Kx>O$hwm%}nP z1SC2a0OL?DK65!#vqIh8xIr3D=O;}@muEMGdHZS!ykb8-2@Qs@{rY)dgH01#O94B5QdO=+z~|g214d)Y=mx2h)}SwTp%qm4s-~N&P5-YX@x^ryE06}DAz+E!r-T93;nQy zNj}h|^%i=7=zR5Za`*CQA63YnYLuHi1p(KPbTFq0`e_o7yL#z43gxQIdbP$LxEqsj zLWC%~!^_Yh6P_$)(uoBo7;gk;BD!(;{@|AHqv+nV`^xA(bdyRrpzGl{{K2RNk*u(o zN5~;{8-2W$dH(FE6?qaO@>$nASf(yL6F-Qkm}EP#x{OPEAbp*kohjG1(Jw( zrULX4BABi&bjg!0`c05SGlYM0A&l0ggszM3{1-sThcoy7Kef=ee7QnG&PjP zM2cRayXXP8^ah*oSlBP1&kDc;pw58RcM}XT9v}T<0iY7v71&p`kkEgQ&JBSuu4lEO zXSkLCtb)QH9IzFI3i1l|GDmQMm>?z^w~>%5&J2{x8&thotQ+WN*r1tC#rU6igj{hJ zbEj8E;H@^WPUspK@pJ$St)S{+Vt_e`$6)I%ncO%D#k^Wl8z-HH@ihf+iz@+eqM6aZu$O*?Rbm0|0ZfAAs0ObhO~5-_SuHXb zg5p`aqBlU|cWv^5xv{Zv|1o;^3&2MDI7p&Q1EOI|=G~(UwNOCI0Og;MWhw!jOm)#c zer+J*C7ldCtdNY2T&XpWaKbyZe65_C%z!gVFDAu*)|COr>jMe3t08dRuXwmf$5njK zVzjolN}$BMGB&s*2?^!bFo4H*4ojlA zlO#|&0ntk}pmu5hq4A%n-vZqWsnWHHuk{&$9TJRVeaBhIhjqbh)Kaxhv!bwjW zTb}yZKYt$zs%8a1ah!&t@qqbklVO7I8vMNfWwr;0yUH!Ag4jr|_X=8Lg|lSFO}Ss}@>snzg}hf{wuWeWoZ z^Q!LZ;2#+85AC1+iQI)xN(MjwTuzv2`h{CS@L!a#d^X&$U^;3GPnhSM*?0r4lV-jT|T-GhQ;>3sX;%yVsWmVZ!0H0iKtAoe_^^aGViVuzk zit6hGC8+ukTIjijt#Q-rXz$M|3cf4nzd9=)zj^L}GShQ|O&b-$ zw~941XOEGr;E%2OaPg$qJjy`e&F(YuWnpbQ7sEe9iw2ALEM}j41UZ%$#-wD z582gG&v+-;yLM}pE@AqyO_b8+_a8277RVH`M^YI$_q>jZ`2`oK5egsd-m=)}snDrD0Xn#Q;(6eE8wn>NOsbVxR$$%06ElUB18ZLXpBjkX| zYSoPWjz4Q>65Hl+^g$l?WEF+6j?Gw~c5gS}LDy$`;a4#xNN1uLdd*f@{ z2EScyBZUqKstizJlzgj?WJ{-aq`gg2n?H&Qe50&AoardFHYK0$&aM$+483v){?YMx zif}o3NPYS{3QC!tG2Vc^T|&+RiLHi30ncN7#VE*tA9E>|63Prv9v$x{@A`juO;a{j zc1XXAmNqEU`ud6eJXin-Jov*8mYXGa5WRSCNm$$zyfy#5eY z{h?F&DEa9xUXYHXZ&@FuJY)mP9H#E+rp6GbVS>C>(;ttN3vn5Ar$lE?7mOae#9=*C zuf#19C9`)_oEh&C!@U6;ahjPlcRKzp8a`X+f0I|Y>n?*jK+`uJGX!ws1wsA%O&M!} zkONj**~7>GkSEWGXhh$e8CQ^Q_!+(4Nh;m)jj#1vz9v*1Kv-zgR+LEdBYzc7o3PW3d?kLwaN(0WG5 z49h7@OzpiibFvyp;TeNbP?UQ4I6UB>e}f!pXy{qhG#~!4ttGj72HVv1wbmS|O53iO zH)eNxMF5-4Z|IY>p0?wu@0j~5=vfzM7{$xG!BO!BX~-={p))trR2~^-}_?{O{p-FtM4LgcTPqg^rIU8a{IgRZawz1+aY6cUJ6;Q7@K{ zh9F?XqSNhBjFXu=Z?D0bEk)So?8T<0r}fV1@X9t=3JLaylCXe`1f;)U*y9ppNU=m($OB7Nv_g6{+Zi9rC_PH z)A|(=cWBeX;zv4XKtBVK)lWxpNEE!Y9|X<9#?}tlwFc7K$ccbT<26>QBW% zxF!-#Ufzz!zY+f&Wq5Dw-f_x>qlfd4q|c&yo(X!V-}Cn`&eOARib#(SO*LTkOjH)+ zyGjaO3gLbf+s_x>)3LQU`LZG){k7avW9u#yjz8UV{oZ7)+1hW)kv8L|>D|fr^Y>|H zj4x;PCgROLWA!ZZj2R}?bLe#yAMDYR4X;SEj|>?ry?=GO&q498#LY1nQc!s%oE&i~ z&xqoVv`d$Tlzfg zeZLDnt#C-_gjHi77zigH7AaWt=cFg$cFz2_2$eks@Jm|iu}C3 zl4@RrV)d;_@X?x#H7g#E?VqVjraAS=8F#V278NBu z@d=(hoU(mvIa0>H-tT|9-fk;AGCZ4Ban{+w>vXTgT4qB@fqz?6&h-R8x6(1F*!sM7 z{yB%UEzxA(3BMIV?wswM%8^YP`|R%Mmmg9d+6~urE@^H+fRM>6QIv)+PGLYL#V+|p z8=M5J4eHtY*0+@P>K%u(9zM=DD5-y)JhrzwvS*3vJ}#*KBHX84!?Gpj$h(z@67$P7 zKP+~dpB$=iUr!kY!njg0ozySpk)FEa=y7TB;bo(d<@>3rhfc+{mJ@mY1v`Rj23h_2 z5A4j>#y>%Fk|bB(*BZV!Id0wB&!Z~hiFuQ2zL(^*xO7-ytZ(~cn?eXxMZ9jqEO7k5 zjx}|+0?)X7=&fwusQ+SW z`mRHic(MzdvhMZ0kp@$%s)hwsWyFGx#Qf7JM+Og;$N108%c*w#(-NW1YZwFce)Jt^ z9ruq3V323N5x;{1)qzG-9-qHcP7&ZSP6o~PMY#=QauC-P%*A{!bOWegIIi@{gDSI% z9Z|F@wzG8qfl$-b!vDE*ZoOT)L|}J2R8Ysb42xJeSA9 zXNbPv#~$jVQN4az`g)>#K^SSj*dAgH#xchZI((m^)QN=vMkD4mUS(})NC#@y`~v$q3;3hOJ90-qS8M6rZfNHP|}gSj2>C7VFAep^BBjebCUKr^`JFQ$Kps zAN$tK)XvV%5_KfYO||bH&H3if`J8eTX;*%jiHTCE{2&ZpHwbFfsl^IL_63kQim9$fW zoJ$k+44P8;DoICtN|<3cU3UQ}gJCXh^(!^Mk~}58s)=@NO;y8@_7UH_`_n|HG%l@f z#A8p@LE}P@e-|aohI)i0nLS>_9IJ$A@cO9qeJzZ;JXXobTss>Yjc2xL_LKO zy}kWb4ujIU>1MXec)xlE+slu{ri%0*$7H9|MdVH<-vrX-BL@IU6K<`m;v5i*HUa;3 zDHH=rM7~75OkUrlp7P3DDiNV#U4RQC&lIO%l=|55hno9%zg&EsSK*sn`KkA78yoDA zu~D-jU*8^%1(F-K;#w88YI6t3ZmLn^5M#T3@LeCyUEu487=&9&d^@4*4BbhXyLUSI zhS|W1+3WXDqu+_)RNd9+{WYhc^Dk?VB=_~sh?6l=ezrir!ONZJY1Vy-B(G6Py|2wK z-HFO-qF69Zrv5lCd_ce)uCRV-bieo4Vh5Zq(2y}tG0^LsTmXstgc~e2(A#DP`OsL0 z+Amyy-};jc0TiK-ifwce`X2VHH%Gj!9B8_aYAS>`9{I);)aRAfy2#5= z4u_OJu%5DDV4_n$-d|Uns!C*dcN1Fo>OC)Hvu`7k`8uBdhVG0;aDg;XlV^-%w#H!v zs%X0=zsUEOT@$(u^SL-)&BC`G={kzw9}lm>l1oLt33Qfa`{aq+2a~~ty{{_5AGp(D zgrOoPdJo8085XYf2Q1#V&mV<{&wH-!xmlIk+58xx5nHta_i*5JFOP&67bVotwAMOa zy$gIi=zWvRmx=)emWZQjZ;aB<-%BR|q*^KWXtSxLi4@GR62Q_P`-)9Ro^ePE=Jl($ zgt@6bn|YAVV*N?-1CjM7oeiehrP!O$3cfM7TCd~X5bxi`jDLiEUj&-dX6_e`jA1Uk zY<8J7BQXVr<$kxDl0&5!xSB`f^=jqd^L9SSNd2y+*v$sADkY7t&36UfxeD>h0-NAz z_?JxxCoLWPWgZc;7QXscj?Qasdz-V0uRho+#JZ43V(qKT^>=I~xG=(O6Sva=a0yCK zkNXx^i6zVTF4;jknFc~S^_B$C*Oud#Zw>lYxFrR%C9z!=F3RMr8|EfHo5LOa;?G_T zZjxoc*hR7L&2%`?Or8P(oVO0YpIPKZ=HA)n*j&MJDCn_oF~yGXy*xjf*A&-8InPf{ z1iQ3)8yU>5kQ}`(za9_E&Kqe9V3tQT+ywIqcG-1Bn$p3yd1?`EZ9Ho^e8?=MZAkxP z=k?9K_Vl&zY$2pc#hXAY^9uRRYP$>6Sq)SW23Ls%+PfR_pQL^Bms~BOs5kH3I}liC6SSoq4)&YQpnz7 zz`Hf_QHnX%FX`WXFM5)4GeEqMT_WS_PRPM?hX4_<<8oc6D+cy0ysk?&c}alAs+-V) z(C4QfH!@#Hl)Yo`4yse^jLMd_IQWqx2ay<2d#hi2ENSUa@1N&H#XnP5)KY*q(xCb0 z)c!9H%-^2o|4)DC|26*)Pf!R{;g0hGx7b~8Cid!)?)71XatBCj>DhL z2V_QR6=L56I<^YVfnv|br%~G=p`oo_tLpVci1jc*aQ{8(Zyj7RHn9z^BGn>|LD1oM zMt^C))K`b)?zsK`)83W8L*4f6h>WtAorH=cvW1Z~M#3OO_9Y=?9s3dn*+yl{p5?Y> zEn8(@vc(u{g^)Ci#xj_(doOqQ{k+fpyzgJ|9**Y>&2^Zb0S>jX1uYcFHFA}lZ*M5B(xIGq0|5^Ak0FRZZ`iThG)Ca-&Lywv5ti8ZJBK|ux zz~6ruK%?RQRMFU=hKaE~Pq3%VZQNGmI^1e8xvVXv(EZB~c*)4|*rl_%om0V0_m34qOpw>5M%DxZSrQQz?ALku{eJ0dCEd46JYvg*^TY zA7bJUWaw^<=ai0to~1T!^?AkTG4Ai!04)FJ!)-VWK@taL9T|s$yZNcv5O0y^E78` z+cHugy57eh7WrOJI8Mcyr<1&ig6Y>=01v-Q@Y`%_>8f&9gz83#lXIgudGE#*L~nSQ zwKK!&RplTWpQ9LJ#9=j6I@40|%vGwzojM9<5BCp9Giqu2$bvX-eQm0L?^CdIcWx#@ zjBQjQ`KsVxpy|`+Tw3pP;Zj!7v!P4!)o5_vU5t1kjb4#RoYi~U9QI3R_jqwl{#&Kx z<%Y=fQysvtjCD)e^_yAJ>gVeG?N8NtBG?w+bsMq1h!RcgWU?db>Eolc7vOiZ90KJUao#%K9r&X~n zk3gdBxWDe!N8X-o94$G+j~jp3E7m0F>SWc&h(|e{7Bh*=2~+@K`e{&`yDd+1EY7=A zj16$Gpy#2Iv)J;_o+CRdnF7l``fO2@ypA{LkpgKy^| zvq~~V#<&|P4tvvS`gmL8DI=nktRI+u#G=ctFu8u=)w)pdRO&v#QPzDxDikm6HMrGYauk>YY70+eXg%?qOu!zVrdpB*QU}kC%bpWB{4h5fO zUhbGs=zh`6{+qzw9+upw<<<{Nd{ivX0lr@CT#vOxtta@yBXr0X8@~8IadxalYzi z@Zo|*=R4}yykD3NVvxWi@oZa-8RTD*kYjpU9Lfgr&QNrAs%cR`qwI*oCF|jpIr|N?C~j%CzlN4k_DtEMP}HKpsY=Hz@d0#=D5@ z3@MCQIl1@8)DyM4wEvoc671ai(0<$UN~Yx+gMK+F69?s4r8S0}rNzprFQ?D7E8Tcu z+j!zq9d>WtQ+s-yJjKc9Yr^_^f8MuRHhCtert8dt^g=RAj9+!6w zgE&Mr@ywoOBWCyJ^CuCu=M^SPdGejX(jEI9d;gj*2leDE(48`6rX1VSJC8BrqLXse z#-)1`lr(IjRwaCHCF8WDoI0FY!?)c}CYNg@2KOeq$Gu^>2BZN-XWax!yVsK*!Vdkr z*Tx8@3x`Ghl=cD~Rr@9nmlaFsP2MfWV|95)xD!7=H_KK>YGEbWd8~K7a!LY3qWHXRR{m zc!goe-mGxJ>vwSm=UGT;o!--_ZRZL;vVB!MGuX!=+-T=8Q7!3Ej(7~ zVn8fIzHYJ47BSU7q2Kf8-n~`1${&SvU=;uPvf$TGB1$A{Qm=>veoJanhInoI4XpQS z;%!u6T4d>q-hfU|N?Nq4n7-~V8K>meEJmv|`0Z>3loO0~B3?xx^nEEMx_^#+YH~6e zK@fuc&M=ZfF(Qq9>C&ggz9SJvgc5iLeH{udKphWGC{H9MQLkuCNzG_>sM*O5p53Ci5 z_6DazX@FBTR>7mLHp{=P#G@%wCCOHst(_^1>1*F)e0H;Qr9Nv_70*mES!}`S|5$2e zAKFHrL7nsA2t~&?S|5)i=IJ#j<4F`Q$?m13Pa7Spt>oexT8Qy~#AO<7FJ`iW9;uvs$<4 zeU9Y)e~)N(HbBoZ^cn=dS0NdlV55&EBnrHhR@`reT!iEeW?h|7W^-n7j*HT}^%ltJ zLqUq*`IsBo`M5d^kUZ-hK9Kd3Rwpb&v;o07uXlK>+O~A56>FR>{(GFo#iHnWM4+39 zkqUg|j~phvBt7@%#&z0iL`f~55Vrd&Q7pTwvVxouupU#OD$VBLVJ zE{xj%e(`S|T#+(M zU19JnFa2kM79Y~;jA&nj{jZKKk09s#kwGclkA6GyV5=v-?l_#R3%dU{ETD_jCAOp0 z&?^7EdHuNBPi>N#$%dyQ{LM`(-s}0o?JqIeNGpUd&q4F#GX++} zCTbi<3T^h9gZ5(Z6P1=a;QIe-ea6@*?1lDJ9@Kxbx31l*`~AKaaJhTsCWc=7i;^QH z`M2)aiyvOfc@hS{l+U)UW&iv-FFCuLIYu`AVB07V8t3J)ffDUT%ME%BgDWfPH@VG45?N6$ z+B0N~15%egae)n~9r$zC(Fu8f_I^*11cF1=Ag5di)$KD-oFQmyK;0e9s2B%)Xm&Pw zNJ<$xAX^alvxSnJx4lwk@K`Xv(e2l8xjhvkw|yw%qYxuV-nAX~Cl&qfiA>lj7U(0a zDrR?Kn!|Y_|CdffQhBi{7o~+X73H&Xn~|S^=?)DBhJ?i!Cn9%|lsiO-C;>wzHk=Q2 zi9|g-??Dm9Oq^?WYlfWo{@D+kM7+zwZwz&m&hiO+5g6dL#xH1f^yq>f?TuEc&c&03 zyKdRI(dSAGtq!q}D5avDH;|_gUm2?IKGG$FnCJXEl9v=lWM>-vJWYcN<=iukUH_;U z`PLh3D29uic}KTmOTiTvX+4885NPJ?W1sH8!o#29-b%5oQ0BtR_|F|_cll)LOp@uh zHgqG6k=J$vFRq!ZvyViU&TwvjV-+^m-5+${UP&V+PFUB_@H=hGXJ2VRGZ)T!?z)|)4Z_0A#WJxdO+MDzyL1sjI3ku05C7yxyDzcXQ-)c9-ZZPB|N*h z7U-^}f~utEE0qzQqe64?YV7~`5)I9d@D25LtEe8&;#G~VTX@-bOQv`AY#K3%3b{|x zVQD@Gw4!s*!W#t9Imeg^(S3=T^A0*G%dO>2zjFz!8+O;F!mVyoA7OfRwf|!-SHq);b ztk)S;I&Y^HDywpn(`85FyfTdGBN?LSN3Vr(Ik;|p`J^^UI6-k!9VsiU+mD48$;Y!Y zeB4M&$lSF)fO@xH)~5c4dQ*3JhZ$e8Z16Lm14j<2h@O`?;1jj?QfamlWWzJWmN1Dh zz&q2~EZH`+P zP-Uq@qr^PI80ozZ`Ck?<3&VV$Tk4cOzss%GI%#Z!gK2T*hW9m>EhsOx23OO;1ln#3 z;479Jjno;RI2s@+#mY-KoGIFc`tBPQJhq-xy4^0uuH3nMnJWPy{W*1r7biCT^aMx+ zv>3li-qM1k^D)fYD`-bA|6mJbt;u;7I*)No&=b>(aub4m_IhKP7ts#+q&7 z_U%>@+)c&pqkIB%f6!;Z=hGq5eUx4FX>rV}s2dwIiuq~|a&~5%2uQ30y)^?uh9~rt zKH4V!f{Ogt4$tv&1xp--t^(=Rq_GBD+V@=w|#(vmx!L@nqfWDI|YmMDf z1`~lhb2N=k2g@zIv4wourrDO+^SB!tGnanDJ+DY9qs31sW(tZz)KGQ7TPkRn*X|eC z7LsuN2&7B^yOU1&c&&Gq(C zrg+DGyEjpw3nB=kHmnCVLfSxzJkFb8>N_`?!3 zs1~>9729gFromrwbeIV3e7yt`S|ic_qoU>iGd%yu@cdQocU)`nf3IiKab*3VxMLUy zt?Fi}ps58REFn=Fqy{i6XyN!L3jhr*fkL4rz_s`*G>=dnA14!%%2{=L7hDncgi=iV>1gIrXiEU; zF{omKz4ykOya$PZ<9BOx&V1Q#8km{hKNy&q(?|F-fVHPxTEbOzK_w+LG}PwMKJMXh z8dGv-J0PRw!_HoSP}EhxcqK~;{aeF~6C#d6Lr5#;p}8@C{sTJu<=|oZi0R}^K%OFVFlPwYwDoeKB^EY%|*L^?F`~30#^L{?}{YMvOzRUSN&*MCf<4kdP-5`NlhT`Gj zk#OGV=*hz)K;+@!yDcIF|K;dK-Mu_KaXikB_V~zvuOE{ypo7~c!++ELwX$Cg@;xxC z+#Mk?H2CA&pwLbpb{r-CEU(WQa?yWCWVdIrk5H`M>t^@5jIP z_n!RtN}~VHo5`cwi_cx|Y3aXvb-L_>?J@c2p;?s=s%fo_{vR4XcK=-JbFVj|?`Yoe zQ(d~?xczKZ(abiI>iVlzIMuV~r@W=FOoT*CR_-QgvBx*Qe7MEzz#Fd(%GZaAI{b0; z;+b|w`i@ED@)9-Yp$Fy}BkV`?H)bxOk`h--{$iz6)vwcNjk3T6P8hv< zbTIYg*V0N4zxx?ct(7lgj^#3pqf@txpY9~mr*+47UJ3UYyxI{tuJWwatz0yGNVUD; zpj$&oTx@#JH-C#Cq{WVS8 zJd?BBIY*?-LMst-GL9z8ukC?q#0a@@)Z=6_oc+jB)Dyh)Fubt@R)HTYu(5~mh)G#W z!JM?0eGPwfE)H|D4pq$SBT_;_yWqVNFhVYP_2WJA2|D)DR-!asbgc^;$LFV(-E)fM zoS}dhjiY~IdFCqmsp%GK(73-exQU+?bP2bNVA?|y#j{09c2O`b0u0@5loPu4yQI$^ z3(*sCDIwy;yAm*}eq^R5E=!mpu5OfeS-i~R2-$H1jhWWT;@CO2id<%0$}W^77zw#i zg6xW7NP?I0(*y{SqyZNXC&LPN-4w66E)d}&r9hxuISBp_57ageBMT?cw>I7f>S!vq@>5u zPD_oU`w7<|i#%g#)Mzf`KC2!nlOgYPFu11ymFeY2&esePXJ|ga zP;_HF9J?Re5~ah>t#_r5iVSP`oe(B6Nd|^#|3oL zPU(=PO+8N8!`e8cl#qy$pk)LjFQx-obN6~fL5|BsBHN`7^`HlppyisFb z4TQXB!yA$CvG7Qt;N;3Q*nJ+IJDJ%V|6rwpWc(FVj3w|6EMT9m%^|$88-SbRRAl1Z}+ee#oEI5 zM>P%jbnT6g_xNo0yEdk&%ct$3e+h!XN5Ne*p1zCa>8fETV|!zAOF^Uznw_41vYxiv zuOLna&5JoK;4Q^k#EO^fs>djLvJ^}`p2!nix*wx|>t>g%hpW7sfH@h23t-bu>7xmQ z@{k7{A0XKyh*T64MlD3KF%+$`*99op60Wd#td(Y42G9FsKFv$*6Zg{W#;~!Wq^-3~ zN}m)#!D{S;I?AWCi)Jp%Orz?%LbO9pa+0Ng=jXm^^++VO#K60iAndUcJ&~Uh5{$;* z>_#Q%`-T_gJXr4Bj*=&cchge5umavjDBT!o_i**>LQz6=nARzMQIgYAAJ|>vJ*DIJ z=voEGv8$tG2x$c)WM3xB3$gH|kJoK{d9t%k&MT3=k>x;w#Nijfq!`2HC+J%-BD*wo zDcbrT?k|L~3RJoQNsTCDwi$BbLkyq3t2UX+EBhMa8sfwSj@u69vmM_gSTR+Hv+u%{ z*3s5_=@3N9NZN4vVKSNTCH8Fogj2H}zAgdrYvfUWGKjXC$X37`3u47jYc?4$@KTUa zx}1pt=ofTkPXr?x>vsDbTQk)>5;4sZ4vS-Ou`!owUFq{Zhffu7A z?`t8|4NAM{DIigbNeZX(;oM;ZCgCBC>*>)H z3`OsoNJ+0TL&}aD3DvUL;_$`?=}eLHB@g1@-683p4}0^gELMo5HRQScBn4+cWQ)L; zXF8sOx&;{wQoA7L7>iTqOcXC^m1L06`2C_-*ReP!4F<`o!f2z6IYl3??q5|P&5h|` zq$Q0ckH~HATJZIdYx%K)3IAvEZ*^lBkqTv?#wkE3^5ERX3#TwkeUP~1mVlD%2N=nc zhKKb12~5xYD+B|)u`t%xP;fsjUVki{%00w1MZW^bJo9XtdWDpc$0;^ivaHvT5gDe% zuU>T>iA~*X#}q#2wBFrW))*Ovl;hY5h%Lx5$#fBx!*fS1l>Rss`yyUThgm4?1EGcX zR%fH)(V=h~Xqx`rI=YAsA*dV0ujePuXtk}F@>}Bg&&8!><~=aonu|*a;M$%IICxKuL z7`-bh#Jixnm<1AzQ?OoBx|t=b-x@KDjM7XSWwE~`7HXL}N`E?x%1&o0;Kv?fALAQcJwOjLP0nQUN-Hn5xyI?*_!9M9 z=r++6xl~>0jbrPLom3&1as?XWP^tPyc#yw+kWb^QDB(S!jXX3+wNmck`rC;q@yPr2 zOk6|&r|jts%rpg`>uwCRL4_3h#aT5x8w$=2KV#m-nzd>S^toD{*)8cGeg>!vNNvbQto$^00SN81f!AEihcQNrK~~9GRT#r#w36S zoAJ$-6)t0`aVh)J>(estd129>)kql?V7x7HAj5S^A$!q+kb(@WLpEl5+OixxoK!1} zvSoM)ocKloh7BL7!=Rb4X5%^>vO(DMZ zk4RvTBw*)S)rp16_#yBSD0j(*mUKmihdWdNqmncQg2-vj=D%~gyEbI7 zbMY>pP=XoxfTg9~U+`dgS!qd_be03`>=J@V(cx4s_C<>`02sy}uh>I0PQs!$r0r1h zL6Z^S3g0V)EBq{m6%D7_A;@ri3D$~CbzH!2)bngT;#$ml=o49 zyzH)}L~!{;Ym&ugI}^jZQTEcx7zM_5e-s`v;|s@I(+}wmNf;+THBzDP(nj0Xeo&d$xPr$2P8aB&Ki%?$?9FYu|CFqkg5srA9os(k4+cQ0< zc+++Jga}MdJiWPpch*t>bG-CK1W7Mu?tIAHWmBJM!fq6GKx~5a=p_0Y5|lb_4uBL# zKneROKwAJg_g}ajIpB0cPAJZFk;17)7NR~2U7GiuJpX$Ncb8rRL!~0$EqErN<2*G_5nEyeIGBflt-nQn$rVEFHkTj?$dbuE(Ifjl=ASxu)?%u zjO+(=2b)_#^>Cmrcr1LIpm&Z7hX%)?!IE+WoB$61I^}kTNToqa09%KU#(unSTUNULr(}d{g6IO#h~>3iiF5T zH{+1vC-qN4_5mErh1^__R74^{V!9K1}iKA)zLA-TB zZqv)!4Dq2GqgQ|{fHqIN40-e<{N4QkezRp12}U28lyhu|V+HUY8amyQ zFA#TLH`&k!8*G$cN}LU+=GxiwG&RnL5)F|SsyK36mt&E;ANe^nZ#wqDmuLZha`Rk0 zTpNO-3oqfeBgqnuj+T$w0ayX0LtccXj@>j7D7=sYpn~X--$lyE0ip3&7wL0^yl?j4 z?yBLPb(lTQD}`|n^Kr_I>;?<~@1;(3BD3%~7T(@ABjhL&uuG+0&>@9VPh-(uLG>uh zYZPO58MAo64s2!*g$rCA?WuK8`+vT>zAW==r(l%p8|B`*+JNh^=Ft;Re9+!EA*Jf8 z_@xLK02%WMHFnPW0WvckwBO%wWL2n7M8WdIcND2W~ot))?; zGB1+Gj7!p{8eknHv5RYW@cft{4X7Gi8or_ZjI?S8si4w|Q{5HD`-t=mg2G@uEzH5d;vl z(rB`l93(UpM9)g)YE?!%>8i zV$7{U2NICecLWxKq7%~xnBS}i=YmfW#(oad$|GsnhBqcbNM)BiAVGwW0Z`dgm|@6t zxTYB-ex_js)I7tJUpDf3{{%urD?A8ra$1SBOZWz3CsD#;-TTuL6>?Ckhx%1l)#O*5 zEA9Lwh+c`(=SAY7piV~KhiQ+M-(ho2dx}5Q&Ag&Z(rhXraZVz7P;uALgSa;HGkv@L zmd1BxT&~?6dGO%0?U^Z6ogrJ1Hr40+c6C6%WXqP8Pq`Af_)UfTdCq1dn$1g{IgfLBsibJO*eE z4FCs_S&>e!L^BZ+?5Ef3^>3=p9-|YF=~S@m29%chA5xps52%Jn`3POENx4%K|IIfUJN4w;xP;sE1)*8VpWC*1{^q?o&;QzR zPPk?~c_4oeNe#e|efo9D?(TD2yAFOXZ{?J#Zm3V_cqk3{bb*&T$H6cJa{Z@Q;frhd z%=&AR%%jTcaY24+K!kZQfif&-_OLO08p{Uvia)KIMFP(|6xD)~)6 zg1yQ|E60M{t77i8STLA%J-=@@qun|C`Naa3CH@Zld2c3~uODm3jx*cT70^JBUtQ5< zUb3V@+%2~L$D>EB=7Mdpm&a@~rc`r(#-bUvd%R+&x>Z+hyK^l4h$k>(GeA3^*WoNb! zjU$2thY~!1c_h*9IZ%Mn`KFtbNMC3jkp~Wp5!R&QphRk%bH-y`B(#L^H#q=Vc${Zj z3TVpksFD830&p7lT!DPbFXSaKMn250O2wi*W*^HF?=tcZodcF=u&;q8S>X;R*Le1F z-x43);z$i>GJxe-jlfkYmlSbmkbpTUNxQ?8k@jI~^gr7X^Z9V)ld^YR_v80oczxr( z0t$BGD|L6ihlHY>K6Oy{PYgb z@fvKKYSL7)_n>547-@`xJG6OvGxZj|M1Lpw>DLry7hiz>L1{wETx)`^t7?7Vm6qf! zGfV12v&!nfsbtYXp1^P#w`pxY=kS~!QP0WRjI%weux$$`u3`!bVd4=8Gp=K?nSZw7^ z@7k4#Sx4RRrLlfZ3&lo_dKFJYB*C-x#qBLkH7J0VbhW~0V5uQ_>b|+GY%TYoB%<#~vglx?1qJK~^UM!PFTY&5y z3eLXYpy$qp-c6(o2)Cnp?ggI~nrG*r$Vdj#^HGBwYRCx1Ndy83!7z5cDIe9 z#i(>1Kk}$!(N#b^h0Yo6bv-pBkDp#j?rtd(YioYyS0xhVrjl@{|D;dN2yHz1W9!e_ zscm;+FC09jehOYdYhU!c>a7#pwGp2k>P2L^OwW>a;0yO z=8i;HP7L{{-aoj9|K@OKM-p0y_>~e@bo;Zol4Ww}s=3;qo+JHlQB$Fn6VLa2IYmwyPMRC&^t#KxMkD9okVxo0 zn{zRQ!W$p*-()`xJA6cR_Q+3{sXP*HP*dq^ac!@X)n~y>{sUcizlGGL9aU3$XDxqTa!}yO(L?dEhMj^}80N=N z+MB=D1**4VQDwb+J}y8GyYwLR^*x3xc3C(zAC>u#Nr98+!Qxml(uD7*KPuhA+bTY- z?<4nb?)t0*_SeA>;PTh<=`TZcBquT8mbwd%b1=%@0tCtpHE2X+U$2z(E3inr3>-%s z7U^FXKp+7Sj&V@{S*vn^wsy{QeRp6wayt3gGlr~zc!j`468jG3I4CL&O@an!=b+bS z7Zr)$*jKhcP&Kle^dG2-Ug=j>ab4xd&^xa)5uF%eAMNE8tsf5y{G zxMgN}oQ!9>;b*p_*}x`B=9Bq6s_y1#SBke>A-?`|QQvb@euLre5$qD4n9F8Y-q>Hw zt!R!vDxR===h&nlh5Bl3oodwSq+jx5Z@fpJ^qA}#tjc=4YSSd~xJN{!TD9MpnyKP_ zrHL(X!}+u~fB90SRAOyq8LHUzddDsAd-+2=R*f>U#Ii}d#^upV9dKpO9Q*s|_X&JBwolpy`LZ8EF8@ zec%ex8!5O0VGks`ULXmGj||<@ntF=fD1aQ$&|U*o3e?vU)_=6u^l5lv6xu#wIBHo( zXyXa2YOMcGsdkaFU5WIA+oXsH+&YC+E4_2&s(gcCeZ%iQb&bAz6;@jH{%Fg(ztt&thEjbW7Kms?H}F1=-_-r^2G9 z)ABam)8?$}m?_V=le_~nT(Env^1>-%PR$kPC!wQ#x+8N08{8#Fr)8eGem6fjoO*xa zLjK-oRZ(T6CqhpWLm85z1}=F&jZI6Z6nyud<~LYda3EHm`EyoghwtS1(jn zkrzUZJ!L3%-qLSry0avcMWXV{4ZU1Gq&V@ctNh(I^1~N_tFnZsQ`s*vsA}+?`hU&D$INv7ao3q!d1p@qPY>(-G zZVl00ZxqhEDgBua$7CqX4P%hIWtlYbeZBQ7b47tnncpHAj!$~~>{Rf2ro@4Zv7p*O zq2Cmr1B%>As%fM%mj3s;W%s(kEv%lglX=60P@6H zP4Ini{Tdb?|INf@i4vQ(`jOqW1blRJ1iW3hozdL)8T+0V2guYha zUGM4zu^*$>{YqU+o_qFzG&;3p^kKjyQm&waHZhY~ezC5eHlX&@(3VAkS$pD8JLkfP2T~=J;MCJ1IkgZ~`R<@mPQt zz}<S0&cVFC57^Y zFDc-}a9G}`D2UM_dMpa^TE-PprlKbh;g@XG$d7f6aeH-=NU5yfl#rwNrYG=I^Q?RE zo>wM_njncaeCxz72mQ}rn4scUJ~?5Z(F;$cJ1dfEPY#GlZt1M+GMArH9r_u&ajX}2 zujp05gCo=1p1Jx2+?;3E*N#n@@1&rZ+q-dPD(gs(2Y&Y1?>xLY?qT&6kE&w=ZcjUT z`^QeT<;IDAvbi15@$TQFC??`q`ayoDKW_}pKU+beP?|1#dFu^ zjGj-e=F4x8ehvKe!sfj-R#Cb0qOXa1k8y=wQEn-oekGHA|Kq0a7u}c04f6+f8-3@` z8SV@+2AtJF zV3SFLU>QQY;`KKY)xu=Z0CJri5T&-x(VC)nHx3#F4)lup;tQ$|aKd2DNYDt^08s$M zM=(3^Vm2ct8s)O=B!qJ8Q?2;v#q~dx01{g;Du|rae4@#Ej1y*f|y6yX$NsLYK3~Ug+cV~OY23^M6kG4nnm2TzU?N@5K(AJcI9XS7U zspO{eoqT0f4Y;>sZOyhxKAGypmjeT~dI@HQoUt3t>L&#jY{CN|Dey(%}Nk8!i49AY&=I0XG)aaiJ; z(5x-Cc|8()#u9N-4A#(%;LV?l?=-nqmau7Sm{N#to`|_(Knf2NtUb5R@0ZEkW}*3q zIrpKq6zrJmPM?=o_#J$0zTnn8dFk$B1!L(KN7IFgd+^<)#?p^%Hzo$s#z%{11~P99 zitMeiO^<26d+NE6>dtOw;mCc1eA)L$M3nC11?lviRxD=L*_nhtk}2KZNt##kK?)xY|b zJ^%4W*T``--|)uXBD=o@OK>8Jc^lER^+8280ew)Ckx#3t;b z#SYkNFrNGm1=HS7%_!|=4u>X$6hAP3fX6}|l@(4*p(1iJ_~`ic--iYBsDd~0u>^y} zMhI6NXs{U{uJ}LDEoq=&T+9*u*7-OhMz?#o!`*{R@(C$iyl5w`*Bsp?Uc@p+_}7%>sI117T*6fDaJNtA5p?5SEy0lDM1%o%yoostb4Sbe+yJP;ehOqS+&VnjT zdCZTXAmbw;ja2>hVMVP5jGs?!iC|!T+FDA_;h@$pnCcc(SoZ~16}Selbb%TKK=a90 zua(;nrvhl>Kt)Gv$>DBLyrg#tV&3u-6vGOIBQ4Y(mod;6L+;koNknJR^w+0>V30zk zPd5VZ2r3KL64TAq@$uvZ8$gL>9OiIv=gMY2bZxh_Php^3uRZ-Z(;*%@Yuk!QV`{U6 zLFF?A(PM2Z+H;Q)U zJk}vLiTN!evc@>1Wm{kharSkzrcLo*7yLn7Gak5+_JcVNOq}+Z6)XqP5ox*|J=Uw- z1&Cyx#>)0OR05QH(061agPgDxiFw>R-jGH(b7hej3|jQp*e`g65{tyS9h)-|So9uX zqTYvTDH5tDeVub{h^72;6n(3TNM0@G^-1!ln!IW`zGT;nan}?H>@M#UGH-T&bDWCR zu$j!qxe%Ka{}y&J;8X@HAxN{pincCiWXKsY&}%B(Ej&u+!@&@FmP7^n3;Y}->aE^| z0#+KF%e{Pvy8+<|9*~^&k(#&n>|g#5-RAxR@q@M&&~_6Gj&taO*t6VM3e5PXr393; z&w@u3oGzP5T32)0>*Th9;kX7M4RivI%kuY##ZN<2md|L?Lh?t?8NndK}^e>=H@LD zmB%@)hfP~nk+JLnop0@}{qLYJ?AA0eBa*=!zy}t%Tmi%%CFC)y4))6hi*h-T6sr-< znuk#M33u0?XnZULcF(mX@&XsHV0lYMmH=zl$WN2<>BY@}1bUAff%ZQKKc z40JouZskOU!c~e0)k5L&B+j{q-hpvjJj3x6*Pny6{&g9=bc zEQ1kh3({jmBPEO^fJdq#U<)sVELil4NDz!7@F`3F*!V_n{LOkRyf}-v_*@Vh7e)UF z5I`OX0p!hOrrlwg#HE5`=NdCe#;17H!vN7MH2dU0PS-z5LL8&lm}w8;1yI452qwN# zRq&N^0Fwe|8%%4j%S?g% zgDYGQiuE5XhUV8F2e&_XN_C*j!3Y4@3V`u(uBW|Lmt;y=h|&;CHms0BS713n?M#Pt zo+*rjT>;C99xSE5{E95@%mUBWhvpg)mfBu}BuR~iG6QtYu0q06LCjw8Ls01Zmq9Y1mzq+=O3r}i~YV3wkT+}@r$;wpAD!(Tj~(u4>;{0 z+@y}T8=^*A-ic0kh?(g;Mbsa^N1M(dg|NJ3;P^4}L` z18}-9V!>4w^EsCw^RRWxwzH8b7N}E^| zMl7hYh@}Y2;M(D2U++HI6@Vu90^4^xB z8UDSFrsp@7kF;ytyQI6YX(kohFX5Im8lc>RVV|pu88g7UCQn6Ic*cVbYai(ZGPVP) zCg@^=sy;zh!}~S4MQdY;3{3K5mk_|e3Wx@3Zo(f|2Za8j;Rh%QaBEZl+woJhglnc! zYrFumuLO2A_;{fy26eQXCINZ(d`YI_!tGk!azHHf`U?D79zUpb2Vf^$@j)c&qW4$R z0HqJkSFRO$FXBfKaP9$%Ru;2xiGhHZX&p)qsxGK#JX$5tRU;lw=+N9nkv5C6;7PZn zVAyn}`v0Cv(g1{qSUnfq@?J<{gC_w4BF`icqpfr!s6J3qdJvKDy<0ir8qN2fZo$E-Fgyky`<2A*$$eg@}~koO?4q7ZC= zyurUI%ILLa^nzP?aU7|h#_Q+dNbluNjS-2+cX_pYxOjk8t{a1-kp%s5psyDY3`|xP zBBM;pQxw6E zzUmhOJh=@@&VReOA?+ZAW*p9L9p+>_ox-N0fa^qT!N9CrT%!QHZg7POMh^w|roW&O z{PTK&ACHHLAZ~AR?-^na)8nD6xtFR!(kaiXloL zxSW$cD8V$=JH$?PJs!rgkSb916&k4JPQ2dV<&eCLyYZuNV-M12E$02w0-Oqxlacu- zZrXQ32BZ*6F>P#y`%a<0{U0Mni;cjpwbww-v0|lx1^rz~khl*BGAjcVwq{S;6l&h*F&yH7fFXg&=?5RL1Vyte1ISOUu1g|XtsR% z=OKI1+hOuhnu-l1X}w&uME_pr!ahPHNlnS{YY-s-@_h&k; zuq9I$=8W#-ERHY!4?3I^d!o8XIMFfZTwj?o!y>h2vow?J7(YMJPsmqAX%i4dPlk!??ME8HDnIw|~L` zMycv(Yh{s+uf-+Dx9Qy~eli-cV=+r3zYtc5caHW2hbxn> zMs#Z8Qb&@e^MkylBF*pm>=a;zaT|A{2Pqi#Fl5Gc*+Ox`4+FuzH2G8X*#Co+gt1eYW^=+jFTp~8 zpF+h*ASOk?!&*c&?r1NlU(j#E5M;im1 z!x#p@5TY}DGw2EjETs^?O(I4fYOb^I!-MxF>TrB`aAG+;L@aB4!WG%oXc2%>e{^fE z$z1}OtpJ-Fa0T9E1s}v;3Jtd`z-7qsjaJuWBnhU7iS{li&VQJ@zY&NPGtG^Kj5Sio z)S#4*gePod%y@DBbiKP1KhiA$Y4;)-$rxP5?oW1cZ*stRF*zWTFLp6$`+2aU(Ac3; zu`o}DM6)O|Fa)9wH|Gzk5|AMf0Pz6%p##o6WSK6>kkUAd`}CfRw>rm)U%@rK>VGC_nImnB;U`cGXo2G~AzH>|*@^UcQ!uvg zzlgX$QQ97b7HK!zfk#HPAIjqa7+Aq^$&-IIFIHu}P{mhNocs)Ptalu&Z-E6ESv(;K zGIx6Z;8Mhg3j;@A0D+YO=L{deiaSU8;v|d;AfAndi$Q-ch5m`6PLwG!fuS=2P&qjI z=8}kE)d`^P;@ANdv3Wf1gFem)T@f8m-}p>C12HCgLmP3;(QILev^*dz7^Mn)knTyK z2^O5~gOWZ-j}7Ko2yhrx18W>!jRoA#AAdjeE;^EByFh95K3Vse$fw`Y%DsXGdLG7< z!3)j>gA2aCf3mz9{@M`N9LY@-PX!nx%SMDG?i1$1YotGbws8->Ne7|%7UtAn(2$`p z=bjyMFz<|T2D+BF_|W*4PdIf%P(!@n&?tJ$daehyi$kKdfol(p^)M-&Q%^gk>xXtx zZveC8^^qH#y5px;ig5=Q5t0-CFK!rt^}xJ2(K&JS7xTc$r91mw^MG;ksZVgD6<6CB zTlkwZS0p%{kYjVGVq`W&&?vN{n(_JRMXYn$<<{fU8l?9(cc*DOFZ?gd>D3jtXCa?k z&KdpHW{_ zv7p5dNxR%!p|vTKs8$v|{@RDRzYj;evrl=?`tV5i%@p z^yA^qEowCz;e$lo?suyi{j(acp*NLxrl*H0%M8@*?!tz53`>)UJmhrYG% zKJwW6;c4ZB`eezi%4-fDAMRo&z!&2Rz8sAw{8>S%`++5eku$&g^U6oN9>?yTAANpT)fl?tF1+L;2|MchTO#!CHP*2Srx~RO>pYWw3@n+}Y{M`E#b4 z{!hExjpr}{+XujCa3DJ=&e2cE$8ngV(2_4T(n=U z;g$RI+Z7E0#O)^M+C-UuwtP@ayG}j5>85L()8Zjq#v1d=opULU;4}F9SW-lpkG7kX z-}8%WyerH4^96UCW~`4CXmS6(;(2`IulkQi9^Zn4-n96K+l@wEDM!_AFw9u^T8s&k z72em|lpfa8AZl^wYxZk6L#@Tdz0Ce`e|1dfsm@sWHP=PB--pGM!snN7u(yqwwa8f$ zfzrof@8{*ZXs5$&&%w^DW@{8{e?J(hADbC-aFSbCHdWj}_w!Wpnm@ml-n4&he^hwC z=84IuiDwRew{_f)x}TT!=To(tUyRO# z&(^fxm4^jPM#DjK7r@^P(ce3l!QBb+sasAbb*73T`(BD(&Fu1O9PYUPVMcFZtMCig zl_Y9aAC5FvT98Vu@5mEQ4u}?w+@{E_*t+hX+jL!`S#2HFcSPf^H`_d6tG!3_JafKq zGD4fcKhuAhdbneVAA7pkrfzW9XkspC*NeTzN?y~E^#s8SNjINpp zsuG(CWtX83q8)#|=JT!js8W^cFPzNq`4Bqu1f^h8y{dZVL9$Uyzt&spQfsvNZ}HEc z&Ppm0&mUeUzHKJU;X>w$?%|31q{oLJs{I&f&50{NAjG~h?7OZxbHvU$b!_z3&|Khb zu%-A&yPWT>Jrb%JsY%@*EsV;jmrhjKpLi3P{ASqqr{9t*qX!r^sLm$}XO7N<7I(%> z8Z$q~&0QEyt?b*mj_fiyF)9}mt#zL?m?=AuTKU;0`%RH0`c9s}y{p5WJu~BR&nt^u zivQxq>cZ17_*Suz0O$0jI! zk*S%jAEu6c{+%BjuBfYMrYP64RN`aD3fKF;caN@$vB^4AmpD=S@Qyx}*Xwg#i$~w{ z+bod)9dNRK30>QL!SY!C=D`EQMnRT)-ba{@w;8f4nu?yQkI%1_$QAn0fBIHOZ1@L5 zlE&bPxiO5{Z=UHEqM%}1OFXaYt+>KFN9!Mdx`ih4)vBlkZaU}kiJP$&9`TlT|8sSe zdy!IYrz+zPtvJy&4!bFd5dE3=LnG&A%q|~+OgU@v-H06iQ0#RXn^13oa^YwR`7SHQ z@P+BQy-9WE{iEY%qaQLGjY8*zrix_pLxyxCD@(NS2G*H1y~Pt~#?mR9o5O1qCth2G z-c!n4zW#FOS}}tswio$@_ikq~cPmtHZRLBMrIZYoMKbY1P~?pfoW;>@b-(IJ-X(_m z$#RXumMk45Mvj z-WRF7is+UuiC9V2-zrdRS=nidet+4f=3BF?UAZukQmev7j-mfQkKt}zP~~(B@7wEp zWPT1mUqArULIJ5+08|B z^B>r6ho8=*9+J#Fe{5C$w(tW}+uP!+Hl?j(B+r*Vn=CK5P(YiRI=wP!Uuo*drIdU5 zYs8408WnqF?IZuW_V_wav3|)t@ezO3##>Je$o?gNyDn>(RxtHRk9kF#mpL1H`&ij! zxs@vKP}m(ODKQs6*f$pjMcx^~O_kq%u;s08>@XVBtU$xuwlaR z+QS^zEB^Po-`p@Ooeb@E-FKg-ZQkG@(nh%z|>F=o#&nttaZ>n5R5zf>Q%g6FH z3kV^RW>H&NG#PHP<@$f8!oHt_HqXmSv<`0lxm8&TKN7E}D!*mS_y)RJafJ#jE3)ShXLP&*5TBTv50e7)6t{1ZiOA1`2bToI~08_cAo! z7@m(CToWu0?Bu+C_Mu+UX+{3_9#@ut+2~O9vwSCyO}YcNf}dNKfj{2GdOl)g^S%>Z z7oXOXd#^f7L=dwZFN_{BTR+A7ZpC#=1h*mLL-X{e}mrgHjS zP3d3qQ~M_zve(|`d%rrASJmzPmc!{=1xf4+?U_q*#1HI9rG6Vee3v_c?sv zdmo|7e?abOe7Lo3T;^V(`t{YR&V4Jhi7%CCA0`q@udc3pezBSkelaWhd?-QAy|vhu;S}B!9X(T&y>3P#&xXLsaH zmE30v%T0{%gx=Z3TmJr-P`!>s(vsXwiL?(Al-=q6Zm+B=zwJK%*Rwf+P3tq*8>U)0 zD>^8W%}Mnyt^2>qYVf??U|xT-M!DNR+P7!5a@P-M#ct-z?(>+qqSyWDN~|7`B=!ePFXC8gX!dbyF<-%+gT!K>w} zU-Dw-kBqF_uJ$)-#Lh09lQnN<WX=`d3A&;%*=Lv18ZADzo;8H~!C=bf1;X|t=d=Ki?x>X6n) zM*~%(M|qVj!s=$+|Jra`DL&P9Ug6vQ$$(wY^W(>3<|ppdvQI8uRW12s&&1bvqc1lZ zZb@zIOsJLb>@QfCTrH^;HB^4bB#Url=G(oI>nitlK2sSQ?l|0etgZihvh6G{?ZgT4 zrw6CDq#pPzY%pcE`{m`7@v6zrSlgipR%Pw{viX_L-yG$`?YwUSqROc@_m7TWpFeUy z($+RwacYvccK*_a)Fhp}=$F&h<{uBrR!_YDYxGm9?T$H>o#8c47w`9%4fhryKxK|$ zeJXCoJX+7HQ@uWxd~DWiJ}kiBfB0DBj^pZY{0^KNfBPY{R(XE5-*&5Q$y!@xrT@Lv zLu1fG-yjJFre>*kOU}XC4-08XEvp_0eO>0=COJKIbe2~o)(v)19{9=m0@Bi2tJKCE zmwWm!PW9Er!yV_2sEVxWh=3;c$I;oy(PPWyx+_EPj}zYB-g{y4&i1`;ndIlyM-EI4 z1^zz&%VO-!Tj+{brEa~x-TCuSLh6y86dgvT;`}nhXAY6yPxEJX#>_~3tNk4_)CUK& z=GS=%C5z`rqhJ;7s*zpsEuA{E)1Pb)JXIpGA8KTD2X;pPc(SxQ+=ft{*mB<@aOYw? zJ7jYoI})EZ{lY^P{`YnSBCuI9X$=>dl7Tk}0{&%_Ivn<&{tznvzl2F?SSuyZ+YZ9r)CSkm}@ ztG(SSxvaXZ->^Z-s+~`_2b?w^j(E;%-}J6{^94p$x9G{DO<6kv=Hb26&;jVIvShgR?J-8eLKT(#3D@ECo3rn+uFoM`0i*u(Oy`=cDOux<{O z@$gfBT;;v)Bt;VZ>s*$`Ppj!Km(ER&wD8J_s|9~+zk4p-aqXe6kL)(}KfSoBR#<*~ z$Y3F95p@4~R!O$ZwK@*%I%fL%`mnrU?RMXryU6!d3=fYjQ4=@|1t+VcYcx4x)+|@t zGIBJ(|8QKymK1p%+@?+CS!z5-k^{~A1*kLMm-WvZH)k0hwq9c`pkgJFkoDL?(Ksk^ ze5yY;>go8SpQGPZqOH`Q!RD(gwZ*_beo;!B74hXc`>1uUQTQ_nu*x5|emY}unI2$;`Uvy+-#|@ulj7Q zJrv^}3$&JXs*9wXeb=XtS9axWave2M+xIjjo1GxM6C%ZTG+4y8W7AGnx1MCQ6@^FL zJ?$5-SgvQdYY)qu(~e)@*VuY{&$XE0 znA+oeJDyxHe|A(kU`KC2Yvql_E~3B%Y5kG<;dtSI8(KhWBoKh{~s z{6Fk{Wn5HU_qNi~C7mK5h_oV&fP|!?f{3IDNOyxYNGTv7F(XPzD-A=Z)F2@}Fmw+g z%)k)u#{0RS`}xQ3{rY}+KQhcYXP>>-UVE+Uy4IQ#e(X*gMR6C`=X}z@aZdyxVis4P z&T-%h9hzGR0B*h0^7ulIEs0#^ulj=*y5j2*J~Nbr#sNo`8@pZ~$*t z6!@L((v;b*p!%ic=S5vLRGpXUR#5nNT$lUmW*3bXarAVh>O$&&Aez(-v*p>D9 zz0>%XRcL7)}EOK z&=KyhPK7Wb2#nt^lG{d#-9RqvJ|^%~dWJfAgD)?!va#x)%wdH&aQW2cpVobu&M%i| zddws+)4OL0pq*B15v~wpX0u3XWa};Rvi2jX-oJvGt3CgYc_w#qzhabxuMq^02Dn0I zy0CX;kU>I$s0OrAe92U_P-AM?B_dw(r%t@gJFjXmJ}`lZj`b+ADuHK z8Jxg@_&sHQj?8WMVB3n@W!ql#WjEy**KnKFmNUe~UZ`Ul4Z@61pT7FEakATxI$x+b~ z8qE7;TK;tc5?lU>xn2Q4&mLnZhfykHe|NWy=E{J2N)!$6E8|9+VIC3CjVM1T;EgJJ?<}3d>@F0Sa+$~N7ikRKHEp308Hn|!ills+AqgiA zb95ZZe+b+mCSXUIJivd)b}M5%3RmEt<33FEZwsTAJIR`?ZR!puV+IbkO+$9)n^!`+ z?8#+>w{#?*j?6CJwAVuHuhQKF2Go+$1ybI{9w>u*DPHb4{~)B^^+7fO{}+|^FKWMEYX-XRo4VSl&OOG%jQYpXZ zy4KJ|vIx$!IaJqd1X{DD$s^C@&iBUP7LQ83^O_|(;5A5elfIE2P*fAq6O1d-!lzoT0F(0`1N0eN;@wK5IEeRs&#H%R?&em4Vf{JRN}D+5yWvEcL#H z4BA3~#D91x3zt1U?^S0EV;e-dMUTx(Y6XO^_3noFffR@vhk(ndM0h44hou)})plIl z60dD*q&i^^T;=Fbe30iIRx?M->5kvoR{AImoV?`e@yPmo9qD0?{Y_^FLL>$m==}j{ z)Jtvb-Dnbln*9GIBKZ$6^{=D?IIw@P-|4@D<$s0dz{cr3^~KBP#Kh*rp3dFgQg5ve za@62Sy!u}+d-1b*sMgggnA=(DC3r%Z?BB8d-!}j(hm9!wbwO5LCsy&JK;VB*Xe>m1 zpZJ>n>Vhi`+m?nGI^GDk;k9jufA?e0<-g@L;<;8UrZ!X3$g~ZUklhGA&Bp?Y`9K-3}kC#FJ&K*GX;tYJL$Sr9x3Pj!3Ys?I)G%Te_<`Uwj z9qiNmX=Uwb>$lxf#V;!7q0Xusi=TZ~l&xp$#QLP?{IXL_Tb@fOw&fkS4)jGl#wA>K z5C65rTW6eW_JnyZ(U-YZ7V1a#WS|#hq&@K2V05^B@cwpJ&r9O}{`hZ;g<&*ehRwIe zPOlpKF5R&{IiW8b;}S5|-94L}_AmK^>xm>*>e zQ$Mf0T;gweeKX^nd>XN8v$`R$PtAtVt*n(HT$`GFBeJb@BeEv!3~DogLZY#OQV>}< zjXMAR7~^QMA~JsaP5>xfFQHIu|b2_-LX%W zX9 ztfw)rYEVns!k*BL4MSJFr)WnqIKrJq{IwVB2@-iu$jWm@WEBEaf2#XG)*-v_$er|L z;ka{WFNHAcc+<}dTNS=z5YOJM#rtP5q)7~z#NXIDdNaKBiHWG)&r@t#Mk}@1vIUo< zZ@IGHRy7@X-v6oPmQGs)*K*6-rE;?!>G&41*zJh;WVVRONmnN?w1>g$2EO(9j`wP< z1M{Yg8{Od5?})&Do4aKeG^AcRRN`J$I8Pm?F3YpFkhtF{%XmJ<$Y$dwD|38kn%ZE; z*vGoZCgZHf<@IUd_1$zI|E;L79phmFr4uT(s9YCSgWCI*nmzY<8%j{@6x2I9$fw|9DXQa(8^q?lp?WDK1NmK(g8#l3dK zFu&YSqv;>RnhpiY1Y(g#Exw|xf)@o!_z ze#<+As_3B0QR%HF*OX_^B~y(7JlTyaP#Ix1T{xz+&_o_O^O2&S;E>FlifMM5X*p9v zcJa4PS-=s~xO1y}QwplS?F(7@y@=a~^r7|2-6R4lDJ_Ir%nIcm8c4TgttYKj2py#_ z8zy1SP4k2w36gEoD#N%xTF8#>Y*|q#giOswSke(^Y6Th#k%yUNzzcl{V|-SigD&04 z0(gm6!5jYpOB}Oo^)m6F#JgY zj~BjrwX}%(Von*vzG{9r(>S(ce{iR6%xwK@T?9uy3lzg7?(my}0n7Y3M8&kWf?;xc z=n@;M@)iltYdC8VG*F5tZS}2nZL+>r?vw$Joybkl5|`*4x|ZRdsd8 zacEQL<5!$`;uogL0-CU7(0@W6^qUbNPOg_5-j%zoQwGEN5-{o)+!1iDbBNgXwdoHF zLp9$bgN9vppEnB>{P`y5xL(vN-;Bn(iT`Tr6 z&L-=fOfPS+2~bGXuo@1u53?M;CT|HHa|jOC2_T;;mdGSXQHedfY*C~UzA14Z(S%br zjyA154C5@5*f$$%{l@6n24%xsqRYU)E7m|%Vn0Wa%yd`$$i3#)L8W#5$mQhNohB?( z>kRAI5l*x_MKTZB93tV#A(_4NXj$R8N!G6WIpLQgibt0X3VtaanXm`x6V?mb798P+ zH>UcS+#fDx-tYOJE@2b|6sUB4M257*hn-y8eCHbQRmIqcJ96xihqh;zN)OYnMBick z9w6j@PTZU@IZ+91=8AO;<((prz%SHqn-_sLM|+Bg6G|18LFDR|Qy%UFN*Li*%bMUQ z%G%e-U`w=oGtwjFmjZ*Sqa&w&O~cg|tAm)!-MJMI11%l@o0-9>7Ps#%a%< z$>Ap#KPPh~tPGDRZK7k__>Kst!Z!^PEBk!vKRCCXhirRKVzw1ND(vWF>$Nkv0sLG2 z5?-(6Uvc(d@CltKjsTOQ(L|+f3cCO1Hck;HpU=p3#kVX~mf#_o{BJK(CZltv82LvU z3T;?hRMH!KPiKn0tz#1}*pGw3)yd~`5Uc0+N;|L|8|$eWQ)Z9%3FmTE#*~IBk_}3~ zpiIaNE)~qp=|kI?btFQVnQsR(r^%At^1T&y`f*IZEh}efr!>Mbq?1e!h5GtyF!0P8 zv--6w>nLCLu(gY2WEowkd+7>rJ;6A^~!zdMr9tuz!i1so&!l)eS6h}m^ml1J> zf{!`h-p7eg;Fy9mm5BU`c&|Q4>{k?x~dhyl&eD43-8>qEy&(tqG z0YklbM;U5^i($VfQT}ilm%v~+SF5<9Vx%D=jPjcD#T$V4N{Hi%yW0vt=ti%~VuNq3 zxk7T1AX6hy?$BffYXA1R& z>OtZXBD*K%Fn!mPZ8FG6z^G<0PHO$e^I8{6a4izx)}Cld=lOOoy$>!6u@Z&=yI&Y3 z#DgG3x>zh68;^3anN_4uD*7JNbE(Ev#IZ_0tyNV`6Ak#}4M2hE+p++KKm5T9ZBM^R z3eWg0ce2ywmH5T7H`$@ygz5I{mw6DMg5GrDCM+6-QfB`a51{^W`|26G(h}OmU4YXv zmJX;-)(N~_P-tN1e~U-Q8QRSe#LY@=P(UG+1Uo;&?&iYOfFdS)OScQBcONeA2oPkS zGSz?~1}My`dC zJznnb-DI7*SUtzVc#RxhSk|n5j-K`|X*xUhO2iGy0ZOoKDT7??%+~-fuV(caH}e3K z{R*Af{9S&OyG-Ck-N-4lFeWs+xcByDd%`glX5TWGPY8;uz`*}nFY+q_qpE4-f! zg~CR9~brI%po%H?d!V1_so+cYJqV zP~lB7a_+eLv?;(JEf{~#RNZG*R4dA&!HYl0GO$3yG|Nt*M3nkb`o?#>k$ za*)voEN0tF!}pUCg6#y0wb#h?1Z>(+k_hZNLWI!$V%Zsqjsc6bu-za2P>)HQD0uX7 zm)wX}pk|s?pLY#g$th+bz8cugm@Epzrbs;6Td{HmKIbFs%1n{`_Pi<^^O58Nt52XLhu= zG_jQt0c$utoSKnTa|9UZHk*mh8h5qMH_OO6F+a=>%ss-xbZ4%`f!Q)+1L--A2<=N1 zX?qbZ!5{RMZ&9o(NCysVgw4~0H`6Vl-edizo{sF&FW&csTN-+uoLbLWTV?l+)S$Lp z?1J^1qElsNAyW`H*)zs468I4?Qup)yJ{cp5c|yIsy&yvBm1WpSEapg2Fet1FvhP!x z_m)^7Y@L+W2NkNz)6KhgC$tLYy}w-Lx}uG)*G)@e-oClXdm%b?U=4KL1!(I8nZ)$m zIyZWM^-Fvm+UG_Y#*+hu)5CoryX{C@pfutSaeTz6-a2O4W7z2Vu<bf%Eu6Q}~id3^g zz~BUOsgHyeH&UC5AQ@V&-IYSVGnl3HqU+57-`KVZW~$oJll5|p#?ai7mMWLq0-JmQ zte!oFqXai3%6E5vZ%udT=NybZ@Z?*1eLRwm*#`nh)QL>!27|PR-Jv(Ne26w<$s*vE z+*qlk0#-6TjSmCNgTidHTxkI`c6{KvVeGeiKZQJ#p#%lCsmD}WtFo~qwkXNHyoLBOk^e4BXH!B*oYcuuLV%r2{Oi5dxe270VLwV2|s_|~Z z$&x(!GSq>jXq_~-r+oEAB+}kC_;drYR60k<>7sNAN8`iP@w;(>uIEW90A8+N@j0BZ zs$bbwEjr!*yt(3Itd66RWu=*}xRU-|-mDc*|8OE=VV=B^SF1tO)d5P*YBkW?dd`wk zh?|)U$+>D^O(U#JnI!yM*iF$fOneDy)$cmbR?D^*G>hol8vPllYwoT zgg*v6TrnylgIf}D=biWu&vs!_H?=ypcFuLGC0wP1^T4Ae`l&kiLfg`AeG2C%H|Vny zDe&HGl++KL>PTj3#sA^)w>YT>V>_&0;{9k_6<#?4O6(a&DFe6d zwG$t}^K2fraLifu-}o6qA(uKs?q@~Al&8^+6naolHY&|N|>WgwU zUFwNEwX=;O3t{A+LOSZ$128S87ba;WmMQ0$3J!^xSOyF6!Jl}0Y1*|-@;&rltdQ0c z_gMWU)%6_w@{-B3BYdb=?nTNIaP_y0s2Bp`79$*uMhju58!K6!i9+(Vc*)`iqW!g9F^uK2wf+Ii>k4^at$;cAJh5gO z`oU{2be)#}Tq9Y)8H@c+RuL$p;Yj4nrc$PaE1J^$=%?u8{B7N?8akM)qA-u^6@fRN zxH!-VmniG4D15qh_48?28QhpAqd$RzW?Ge0xYZjXnq+-ac^P&Y^)cLORhj#dhnIhL zgdo{cs#8&o*nu2*`$=&$vkpVagfELvw?5+IS!TQh?pXUlgx)0owX*E5Vm1hA5r$qn zG>Q#!rAhwuw;ozrE3Jb_;0#98$~F+BfW)T@geTEc9E7ffdM4%RvJ(GzqM|qiiyo?g zPBU*^#p1vPX?OG6DsGx#!^*;%KSXEqDcV3DYCidWFf?*tj-a?5_U{l1OocKTslN)f zJYbq!gaURlg<=>;Nt@o1P>z*#C@W-oGM$Jcz} z?wJ6?DP+Di z<1kn-Y%=(dFsc-`t&xhT+nc0`Cgv8$srwLk%{ayIuK94Nn<6v28X4*ta=lJ4Rv$@V zvO7sT=;gd1)70>GJ;{?+U%}t+zD71D89a@UGoNY~4cao<}vpFC`lpNq40-Q`4(ef4`-}Eg}Nil<{+l|!Rd6UC{W3{0nKwR1}al(?;-efp;GL{U-KNk@CUB(s6 zdDVxd9rH8QX!zY5ayLJ%0Pn5Jv1vI5{S){qeJ7#dFSs1mt~QR7)n5v~?_M5mFcn)@ z^pz-SyX+2BcI}B9TZ0oa-U2DJdpi6+8r3EQlr4!4+SeWS${(d zd&P**n4>}owm}*DX0}4r`3SACx=Te(B47i3Nc~}JBj@WzMH*&Q;W|#7)-Ela{{y-un z>ejrlVZJLOtjOS>ZK0+*%51^umM`*JcyHBjZ!f_`yM12ZQ#^v`i{Ox0-nb)20*rRuGR>8S zE9g=<=hZcZl>#fGIN%0Z;I(aai|YL6nmRA*9;_O(C%Qo@K*Vw3tLM~}>e``1VDT>* zUmGab)-X>LN%BwFUsS?|qn%!scMp@FqYLL@$&+J4O5Lpu{8trw-6 zSfs)q977Zc@Co;Oca`T(IAMNm@1>=}Vqjr&^V`z%0VDD5oG{^qxP-2Hb8K^f0_poQ zF2%BYD&?&Mx8ZcS!Ex6!$)xzcF$-*0%FS_f(qluNjW}37ysU^iRWw*3V=EyUI~e3< z+>Nq5AaK-703Fkf8#3#r?7vpV3U}#*u4pZinC@YqBBTj42V?d zweeetICGV67%OCvJAfUStH-<$&zWBoA=A~yBhY0ecEqfxDo1BP#ItD@`hKAm8y~x{ zBVi+)z)B!~F#H5Y1zGmK%2hU}r7TNsanI|$Kniee#<`LbXq6eV7n5V9CaA+7qe0qw z@cb#6E=qIZ4jdADW$T!B5d-26f$S%@X@zenG3=X>CXd&^xyv3`kX|j2HX^}d*1XwN zI)HiLA(UyCHrV|vxxo^9v1K(YHh}Ul3*#W}uOMG}H3Y&vbvOr|K|%?k%N2o-B937i{oRxGGsxFFJv^ZkjJyTw%oXkyyxZMOWF9BX>OYkI zv@Mq%V-qg9A2vZ+&vLp7fL>+hf)85^mZupX^6ZTlGca2R*| z5Bl8Op~hSaY`SM3$rV0wnMexK8Qi$(bw^iTxW|B=U?=**Zs1pchWqXo-kn9=TxGU%l3#itPNQttSeNnL{{Jv0+C;ATXFfbeZ{mbg11I&i3kgV#hj z?#2R$h9;@lDXv478At@$={Ze^Hh<8&6Or~wTI;yJA34n76SJ9IPtCRhi9U$xYVqhu zeem$(kclm|94|_4IiO{T^peuPXICTJmldyc@N`7O| zS~nVToOM&>)a0CQ5xs&Xn#adeqSQO+Bm5A#-YOzbevWDAjYWIQkI?>|(*73y+)KjH z7DP_)rAA%ou1YkKd1o|x%0rce1qHX5&%$-;Qf@n5$YmEBeB(I=D1)k7!kU_J0TYv? z=GW%CxioD_v4aDPZ_OVnI*Yo$&RV+jf*lN4~ZV#-^a5`Xzl0PciyK4@K0cYPN=n#F8G~87TSP8+1XYgha&??HB*Q0~^pPEKB{ifB+ zA5h3bYYX~iutA<^ripv=>Q-9^TI-$shJX4+OHPO`e7JO8!!D91`o7YJrPu`U>R2~7!_6l5_mY)2& z=5RmnHqox*A0++)N>`q_kE6j@v$}Awlm{0PjYQ)aUpAA$cXn#E8e*L2vY?>gmH%)p z2F*3pMkHg5-`;HcSWf?>4EKt$z8Bl#v5%(vy$l+d*3JM?6DhCqi!a(F0&clZoEFBe zmUKfLw>aBdVnK$oE=X-~7=(qBiL zdh1t)C0{2-=xY(lYSwcl6Agd3-ubppGZP$6tyiPDI|Q9yz6AG-xX5}gNC4$;BQ`-D z(Oe&L3Wlf@M*t=97dJrJ0SXX_L*ExXP>rl3HDNVn6C*hv`-2o+PzV3~n^!0hX5YY+ zWEh_!F~04UPI-=lamy;zI5DA719Ze6Zh|%%FPWcGrGP&Z_Bf~c`@ROVlhIdJY16C^ z=ekhJ+Yxxl^M9y_iy@7WUoU$cB>d>f+F}kdUb3CC;}wC=bgdN}p;zg&s2()^ebdh# z9DfZ^%?i%mYiEAmTdXm~^R%hredV@S)B*H+&)Kf@bz*_@@(+6KRlU;eHW3omcB+{! zm9kPBR#Q)sKcDWc-+$V4cK>j&Twc~< ztvrK;@Vtoyjq2x5O(hp~ZKu~%eD@B%9wJ)Zt4^!kt6Ywrd)Q7<+xqrif8OX)Y>%W3 z?60h!`e0DFjk|e3A^+`JB3mV-E6MPS7_{>0kU{%pg?kRs&;KTZ9!kG!e#B^YT`6aH zqP*j2U%IWy8Cs}Ub6#X>_v?)7=i*H5alMGBJ?!dPl_03ghq=u`GLp%hlyXulA zsXY6>H#Iar8XAQhaXwO`&L!G1lp2xxP*D}&Di%C|SU69WZTB(0)BNhh z@lij?EkzcF>t(dnz*q?1{==Zq`5dfU0+inhCdCWG{djl`N*OxR`TId##fy5kk%zvs zr8zmjfQZ)jXekBVaeJyaRsv!DqTYinu7J%r@YLNCI&vBkbwM%_kh3t9me2_@9Oci* z9~^j9=5zS-#8h5JX~*b~y{>cLcm;|X>|usPoa8sC4ft=y7+lRRUpco^fmS^|U+uNS zEP7X+$lKb_q}g~pPan#_>5YSLf4dWb|Lt*b4&vMCR&?f78Uxd*Ns6tnaw`+N{TiEt zKK(^)ITVxamVul51yrAz9=@Bp*f;0e4vj~zc&$fx0OesbRaJa|nr)h{1AGA@>Wa-* z!63_-I(Lu7_o|cXyqPb7PP%$+IB%)}jj)Yi^+=UH7}1+JT@P-aho1t$XIFa9``7w3RAx_qpBZw!y@~mXKxN8{`t_&6`RkMh{OJ*dk4(Sb0CbX(YyWL+mdN{I z5o|u)4<0-)Y5a zek}IecFq!hGHaoVA-c0Rk7(jtu42kC#V|!RWwOfd!7JahN%QBC&grLbbrYJuceA}V zdA-GE^o|PbP&ke6)Q>!bg;?NhH7c(5w8&kZm$~k7Y(;(m?P68Uk^+eU&{KQpaks8f z#jIO+-MV1DmJJ@fRI(sg-UawWrpjQNgRILozW$EMS#4p0D#|14=de(j0)Rs6i(A2hHq za)9a^dv{zYK!+rklJqvgir%bl81%no(m4HMA3&B&ESA1g$m2Wa?L_FNCZV3AtNKRB z0rx(UuJIb@h3UhqH=k~q4>DXZ2MY?9i${yIP()ZD9C7#7t88;N{vT_ zHWU2~d)|M4e;O6vWb%4NM!x+t5P@)`D}BBY*W}f=@XKQ-bDISvWMU+kIpbT?`B9q# zc`_Co*z(H(q5o7J8ySHryKj4LK_3^;mlMLVcMxAVb0|R)!l@6GVkg zqAzcS<1C_*3BikSNu}i^5NCu+@*-HtXMDw@4xTXkET6R935}I^Lg| z{yeY6WU9&!r+2&Z&feyun_GT)4RWrK;uHV)EyMlK2iAtKw@SRGbN#*#Hm1t{B!G{Mm^>ie;9Ij%JOBHvfP+^}{iADDt#7l{af^bglW) z_A722_qAzb?oBgF1jhOAY*E*Hob3O4rE7xq-bl8SqG*u*In%X4B40UiGg*>qwIYvj zQvTz~zD;@Dxs?F6XCS~KlIEqyHexB1r#&GqUfvq5&4@ai{brkT>WIBlT{3nPJ~_?a zSP9oJb@CpuL><`8K3AT1U`*QqS0~2_$9Ilk?tkyPhxwWhAJ!q23Xs7tbj3WJSTpPtn==d6bdR-32{ehKsR4Q}BHwA(yZ{e8>vw|H}4P z(L{BdvDYg(6N{h@UmR~U9N|xbb*tC(9fx)R`S-F{jZ-)ypFZgd#S#vjQ76k!M~}Rr zIrvj+10{R7)H@O=MLXznvPqeyExlE-S*LhF#V>t7^5@y${?>?|PJc2~e2MQ>N3Q5k zi=KI*?;DiNloYV$d0BBD{{wFib{Rpzz%?7*P>jXSHiML_iwF26s)L8WtXdh+f%ox} z$(m66kT$(A_fr2|bq`hqOHq2`=1nxV=^P!6jU9_1+{NFW&va~bYx1A;D)XW=H>f@y z^KW&Rxla^?-(tNni|v6mrQ~dky&B`zq9Vqpld+?Gy`6UQy4Iia8D(_U2}%gf9JG|( zwOu_c+GK_y)XV5jim&O*zEv$^R{uU%bN5WSn{=btv5Ts#rP{(7o0vP$?Rit0-ZrJE-B@jEU8ey(7a4ONa^f+$&f*rj`CW(wu! zywFXt;5U5Anzw?*(NCy?xEqB~Kj+oC%A80ck*g`M;1bDELT!R*H)-cJd$BJyfJ14F3cflJK#E&S?-HVJvXvNO5|;Fp3}r%s<3 z_a2Hb-x1FNu5*`n9v2?-6XD0kR-2#SOr1iZ@?H|5cVl)qNlC~>SFR>-PmCSJInG$U z0i~1j-J?hOa*CGt7et$}I=zuo5LRBx`|Ul0dp9ty>C8`hs5?y=&pV8&DHN3==>>Lv zVLaNT(B~(kmiDQHKTS^^Er*G2UMrhpoIhI5JFjyO;E#`RH)0mP9W_fNG*EcGJY#p0 z>kj6$dPYueYez2m+{j}lYZdS%Wk;p*ncXcT5b}7$ip+z%x1Nj>_a0aH zfLNxr4rhqq*Yea*sE6~gmV~5Zd!_BzB#>rp#pQ5aF-n9=K=BCd$3JRa>-T3>3&M9K z9BQHbaet_mGFiCq8MH$9!9`i1)EF9Q40Z_=h7|2CtBGpDnp<}v<2AtsrfXxRP-ezX zf3`0{rC3waC2E5=-xd0B%&AP9b*oy(iNh4|uJsR+@X&|F6pJ50a#?)dhhUM8jVlx* zB0W$0Kt_a$mLfTk<_%yHa&WMsc<=$;fLmmL1Ak*iHJpra2QTEs!pIZPciIN zob&)iht+-3H06{dZAwh87h~f(!b=u9uZI_M(izmyg?@=Z|LeK+lY;AwOp zk8V5Ng7S;v8D_JRH(9m+F&SoDz$7zO)uA4g7WFW-33yKtMAZP5H6c~%y@L{ z5!`=GbK=D`=M9huQ0s?Mf^D?Mxl9~<$>9vS^4j-cz0!n`+Uemd6AB2=H}ri#C*e@A zb~vpEp(uR;f=>rXItLHmz65TK=`*(?*Z0efCnIU&xLHzobaM>b^7Kao?m%Xvx@z2QW}ZgaqA%rO8mpo1YLJ)7?30ooUJ#TIG*BK6^p> zS3VO3zaVud6B0DPqrhZQsN0yw7h$}pVBN}0z)9M|NAGo7CNILG2=;@yde$+~C|_AN zpN@ze50SI7qGHg}D8B2o+?2=mjcSTvXM=c!vXd3|nR6nF+8s8QZz&p2hy;izRpneF zNWy#1kn^~sbT`Yu4}aLGv7y`_ftEAaSotkaQeoMs15N$l|C~@*Y67i5)g8d9A>`G! z{L^G86(7q2@$CDWYoSCS5QTu~wXb8b`O<-j|0StTH@ed#g1KXiloCTo*c*R55z>}7 zrTNXRZroBU$PABm*SG_mUNN}L0_nrO?zY>mEa4JZB;7!sr;@O#f7!G+x`Y1pT_K#X zh&5Ig{f9yLa1xcL`}c%9YeID1DVzJuArm%?@Sf$Avn?~8V-0ZR&h9ZxU%gCnuZ2V) zlFdt2X0MxT!v9iR7m1j9xOzgfqU76!xX^Iwu?`V483G9VJv{)d0(qhfu2Cm5?$NAD-FU)Hyte&7E<(*aoy0CRF z%vX!rTq~~xh!tlLH}FKeyH9rdb|_84N~gSnI!JI)g14eA=Q&pk<6A%&meTu$UHeuw zoNJi3_D#)&Pcf2;lw!-J+_i-E5DT;`A|-+>lSjH~l(5fu97hW+>kx6%wf5h%1Mx^rh%Bda{>-eZ~KQH}=~Ho>`I)Z5XkB2GeXtW?fDr=GJ~tt-RWE z#hv?%NdxRJO@9kk6M1ty8G3bi`MYMEupT{XysZ0=6<*$RLfXnO?1LE-KBm&eC{mb^ zD{4kIT@ybZrpVN7&P&)m_VPF+t%j@4qN1HcF16?fVS*`4h~_0$3W}O>soujtbz9{k+^$lQtWy~%?Zn=iG>Y9NraIwukJEqqKCIHaNBLG2xlTr`}?WY5CKgMVN*pmc$e_3oaBV{8#b_4{P!tLV` zCog>k!9HgKVhoU8VPu?VtBtEH!hgFe_R_F7EGUQTnj&30isX-?&a{ncUT)GXwO^$e zj@k)87T#TnWpNN|dST=sjiU{3u;EhPnXts84(@y!*4!%2Tk>rmVY_&;A}3!lJ@$Tx zSiq#{s6~tBwfrWeNViog_gpx0t@USot&WasAW}b?sLXdawd;l4u@F7TDd$?+R=O> z5gNS0S@5T70@O4B&tMor*aDY7XK|$dLqmMl{##?fNBYIOok8+KWb6ze>3IdQwL*9$ z%S)h2AHn}yP#9*mEwMeRIkqFB{Vz)752qOY4|DRjiT%TvfHDQZX#c}{{H4zScY(&g zNXdUwFaQ4r%HJ;LAZY;r1kM^S{?u_?kOZF%E>?jBq*~uVwf;1l*WBgm9r=xQP$%&B zWIxKoPX^G-1XsL_dG&07Z_XdKjQlC(Bg!XizMCTHw{4T3W1#Nt>M!3nKT5q2k%MxO zcNx7PmZxEV6jx6#UQ*4Q;){fFXE3#&7qunklmOOB7^ojhHk`h@ZB354%MenqWxS{cz%b^W3z!T- zE`Vn{z}`=nnl#xx?+`U_kMtTNE(gtrr9q>dtzMy~n2YCuSP4^+B4ok_jGLwXKRCS4 zJPK+pdibRu7=C>#E@{7bd6DD8tqrLNfIw@&_;{%e+FK&=l0(wh#S`|w0gd}qgRdvd zkVW~i)dZ;bX>X#rBJhMG=J69L#Sy#!A6>biB?V2IV-N}3uaA6nK%S>5;AnKHQ5y*J z?D#0E*1G4y;)7zKa%9+INw7RvA8qRdzN2w9c`0 zbp9c~oN8eQ+7C=@DL$qLx`W)#%)qmwl0GmMouHY+a*XW`PVWU$^)c7(qQB8n=!V~t zF^A7;f}er54#gKZoc#eDl@-DE-D7LA)@meA2fDeB1;Y2~ zL(l@FZdL-}^~Dy-=C^YX?fLWbeTP#*cE3597Y3f4j8@~p_$1%Qb~@-y#y?s?)`pg) zfS9~v^UlNa#hcR2_2}Gm2N#qm9poI;bbOz3m7VgcyS1Wj-jl@l>#H8GMCMjIjZOtv z#1B*2M>2=w7R3OV_W1S8YT}}i(aa&hr0YF-R^-<6zhtbOfuf-AQ_;5)v+o_r%|~(- zf$KZ~<1_`jN|#TC>9@g#AIaQD(TXhuMdw6H)g8Q;$m48@0 z0qPF=q4Kj)HxhYuJaCk1%Hr%d+Zso&WD=RAV48RU&nJ?AmkdtK8h5}@Q~^?8GU{3+ zztK%EAe_%FSBn@ik;ohZl!7$wei*%RnQcjJXU=_IO10=&upeBmX-CuDDgu=WOHwh4 zj|q?P=z2t#QeCh>KRpE+b|HKC&O;;y`KCtV3ria(PuZm0@~4dRr-4*J2B8*k(K1Eu zxFhYF>cqu3yI0P*uCSQ2YECt8|F2TV!p}7@x!7^07XMn(z zD5N)q>n{phKrawbL6Rr=C7JI-5|l?P?JjPL=PbZeSK^?OuCFFKqM35uHMer$z!O%E zK{i<0EK<78SnOv%`~SY@oa=mfuk#UIG3Hof-gAs!-Ea^V{rNS8h-W3KLumF~=}q|n zoAde(a5lJZUDd`k@9MjZN}XOG4?_=oDEAj4fS@0OxWAR3wO1TK3@(Q zdJyb`XD{qNm=5UFy}SMdxv@6q;MFBKU=Fpq3c>{&FUH8X1ulY*v?L#b)Vb*!qy!1f z9(CeKI+`D)mf4v0sq*Yi6N&bc(*5+(Xmnjhb-=DSFF0HOpZWN}N`XT1!xwIxf@F0? z5L+DIf?IF6SlQF}&jm@FjQS9LX;3%AI*o5LtAdb;Sfqik+s@>m2kCF^DGDHZMYF0| z@cf=8{c=7(TYbTrz-t?hT%< zPy0fQ^J$9?7d{j@rm;bOmB!fkOy|KCOd<@nEku-TY@>Gg$~74EZEzHHjLn`L-y#ka zXDybA_P}iEydo>@?`E#Nwp4c1J-^PM$Spaw+`MeawJOXISP|P7`c`b=bm zNm%hHuUWT?m#LPrbxlp+q}2!w3+ce38H-H1Srn;Td76QHkEr%Roe%dO+s^FQvW#Pi z)C1${j%HHFX!3>6P5LKmZ_{|(@}j&B$gJOtb$hm)eTRi1C5h;6LO&Nr6^-`c%rfe7 z1;_(M^_mKc$lepL+tu9Dj{acYt%c&ruWMR6d^=}c2xh}2yz8?X8cr_CUb{uwyk{MU zyq~?SzfU#hH#Il^glSB$f{PLr7qAQ$m#wZTlcZ%RAXhX{;yWC<(fW^hd-5@2YC}8EI5&rXo zq*h0~$U!Pw--p|F8r53G#3=m&n8PdegY(dWK><<>wF`C31T7G1TR`fNGfHKQv$WCc z=oXMMS#cHqiPmstxoH46143R@7#K1Cu?aJ7x6j+8a~u{qtA*W?Z!P8<7-j35e8Oo< z^*5SPxM_P3v17Jax+p!z*r{KjkV>aj9HWXPx<^oE_&+MfWB=UslX2EB&b#aOx+8b) zELJl;=7KdJ^{XAX^wJvMHo=_VU1TXXRA>KcaY(masckXW$h4rFngKw$DFjG}`vU26!st)95 zm2Z*!kMWV*$A>*OXTxf+1$nR8)#L4MMn7vIIm7|$lBT5jp}WJ=Z2~R0qy=8UT0@C; z(463a13&E}<4(6mj#t+cRMJ5+$#`5wZ2SQOa6=;EA?L5q=xsoeZ&k}1;qf4^N5B7= zQ0HJQnLKLI_!#Xdbor%`TtEE>Z1)El<%%D5DLa$cABtx?vHRy9xzj!lpidA%yjm5VpdL|6i&q5$IZi= zNy%wzUcS1;_1d1y-a zbnTngn~`L14h~0y?)Ncpamd)#T4-DOYJ9_P?^wL;dHGLy&tb!AlWmS2pW8mjZtSxn zkBYoW66H8&>6zJiuXt_lk!W@+YmhNO*=GjbptL=ye^x#3Rhj^SLJ@u&<>ux=AI}k%R%$33}i( z19Dqp>+7qeS%%V)Wx8`#|I-w9rPdbkpcQQpA<%lisrZD1`8_FjhTvT6R^?dXx+rkR z7ceuqB~-Z|(x6N8o27B}|7N4WCK2)_y)t1vT>o+Yyyaubf3`eII=FrpM;M0aNB*`} zUpV5zMpv>ZznlqcW>TtAG=<26L-&D0j>6J>r-iFb)RV+{X!z8EE`&%m0UWX zyi~U``?SUyOafg7^xeURw32g=l3(DA!RGY?*A;9}?&Vg38D!x3K_3X~95dbZzfdYG zty*QTNQx4iKA~Nx2wp5Iqns+LcGTqkiNPwgaau8%%Lx5q@Np(4vbDU%QMA%Pmo@fBUR%5Nzu{eLx_g@^9QKJp z&gd|9Yx#v&DV*7nSHu8`1BdpE%qZ|6gIFM4|L@>11N!iCGx~+KAU8eI>Dup}+23%W z(KXDQ|FKIa)Pnek^a{R3PNm}lb(|M67({2?(qr!OBu$XvQxDTPy2 z6IXpU+qg8s1(~6=CY}!R3LST9e0WYHMH@ope=C{~s*Iy>3bFYa4&8A+H&K7p+%oCxp-d)Y2xUuzNu%1p` zP3D`0xjs2ktmA(Mu*$AkL!nXL-RNeTKT{H3U!5OVPnQ^?PP|M?ciZ4Q2LIEc;HHpmWB# z^W!JF<^&zkYCWAw8Q*a3;~t&{ASFd|NL1S1HKYW4L`ki-(5TP$57jy+ zD0=vPP$coKt70j#&j|50Gn?&MX?rD(O?RgSEJ-bG);J_#_lz*xQ|6>p9N%JQ^Vod)n9rpYk&;j#lcmhOmy>o7h4{st}3%*I@KJJB3U)4J~-jlve z$g3KE-YJ~({RJCLnMJ$JYJ1~{JABn&l#^2xyJUb)^m-?UYhKqUs4RO+@O8k95bPV6?#@;Xz)>Th=5uV6gZ~)6Lg7;YB0QwfVq*ZfGgn-{ z{ms3q%5t>5JBoDk_71=oHt;+H+lfJdUvz{~y#HNhGsEQt#B1}MUZ=Z`G=l&(fC0r^ z4an{=i^<@#&xC6_?XEy3LcD&9%hu~OA-7_%kh(Ly_5?@;oW2U-c!TujQ=p9#8npn2 z>r-%QGmpWCtHDqHo%XdAfLB9ukR@cX7Fgg-tH2(-q3|W}-~Y5D1=f9Xuidgezs>{z zh|G@4P};&Be)I=wktY;ZY@tXqqdPd_O4xq>jR!I3VYn6(7C*)L?14StXGZb&yn&0nXn(r|{G3|9xmCt?v=QdurTW1rAsR zc1t_pEwN_qAr26hFn_b(l>p>a7BwvZK7e%M$t2)Qz~fUJfC4qc=z)9r#COeM&^s%Y z(CYGRKWmYSopfiT$J1I(FVoG-RQ?$Oqi;sNA)Ex+; z?FQs?jR8?fSuO4x* z`%qJYlfI8MnEfvv`-M3lYP8TDr<;?hh7w%*Fm8~Lo<#0Cp*pjO#^GE45niyc?=1-T zl|hm%WzYGjk5MT0D@giL9H16`h1QM&4fAhz$<`>+FuJi$)|xV@w;=~bh%l? z4JZSL+ZZqB^9+a|Ox1!Q6!$9ln7%y*RV`j7`gcF; zS8*K)vPh0GL9bIAzWqCYR0^gV0LZ=JeB#9czro=%2vVN_)9e8tlrwz!aQ*8|{9yi+ zR(Z3L&*E3;EQjr)u5DlbtChb`d0Od;?FViMG)F3Nju}%`kM+ttxuM@p6?CZVS6c$JTDfc3oi*HPyOuX? zRR!MI+13eK^1*;qz7!DWtXFKSev{91t63NHLjj;&7%*h`CYQF;KOk9>^~d=-0HGq> zhT9#Hnu~zb<8O&RM$-lw^d9YpsBOV%0C(4_*PDy3VDz_DK@WT`l19?v-O89^h&4qof78}XNW}tI51|Xu zcbW_lU1BJU&v3=*vnN_|fkczdS1?}4Xp&QVSFvIiv==%w)1XXiJ)P5(F=gNQ?B;nz z&(OtbE9VKUGJ70WbW5xqlJv0Xc3B3h?WRzfDBc^XzBzNAD&nW>Ce&GE!-44eY5=SYQ0IV$9$SepyfcHo@5TDe zB0S0HstjI0qlNbPr^0Ar#sf&kz?05t2MGLGk~aXqqGso#v*2^4@3oO?vGS`*!ibrH z0rSdvuB{(HL>a`C>#xZ4A^{AnBz!1oJy%& zVhOwK&CTR`fxn?+x$>*}WXAQKT%;UE@2%Ov+BAow)UXr_;1D?-d5JTlDno7t)?THk z&*j<)+e72O*0#TwR09(~{1FA~-+>2;&6gAOCs&@KeqDvC5)Ju*2Whgk%uK#`Aj)1- zBGTr{^rGLL$bz~lK|igs)W8rxzBJfcv;ZYRw69@3Fa!#^9b>vfzyR^W8H>gbrWz63 zW^u*jjPOtv4v=fITmR{(zPLz*qN#QzIgv%PyWx!hn$VxR_FH4N=@1`*Ji(8xPG0Ll zcmNyq@~vW?sxFWF;x%h(KUiKz8C`=gudCa%Ap$!&N&Nux!?ZnMj{0F7Lb^L+Rbev; z?SPF{(?ixCs=9JH6@{e63g5WgVZg?0mAaEXU2+$`l*iW&PVnksF0y0ciLuXGPe5BU869AXpYg ziU9)2N!Q)Sgz!L}2Dc@46EyO>$6nATuqT`WxkFo6#(>l@4k0%Oy-7@X=jniwFkZ>2 z`wpb4?MspiI=Rg`%0RLt)I(b1B4(*d2}t9SW7my>xg-VfP>Dg54ba- z9e_7d+1Fqhz@F;x;Y54U{AXusxGBPI*Qm3~3Yic3&a6fA};Vw31*Nx7a8t6+TnJwO2sWt zo)=TD@?wWs#SC}cysassbj#*>H!>*w;}6)QJsU5sAvzhZj=h`DAk_MF<~h#m!DD*n z2Mex{FIs*RKWNp&JX8TuaI+pc&?BufU;I6n`D`4PM=Ss1<~@6qd4+N|%o4_>vwAf0WFwHvKU;P_t_pasv65Dj z9y}|xnJLemV^XX22Bl@@#>C%jr88_OA_)7f4yY)^EX>Shz;D8}kboSRjO|xkqU+%w ztYivsf1BaVat#(aBfwb5pYm~de$b3W9bK;+S8~pfPRbPVN*Xw>M8v$Sumkp$;?>BH zC2h_$? z4dlitmyNDF8fOiFc3jV+DBTCkE%PP=6U%gLrqW6cLVo76o~Vi91^c4X{Iy982gPBx z&>yd#$7A`u4`42{m|Af_OBY*~ZrNfsjP=<395Yn-zBi5A>UCp1Syk1pp4+@DWJ=%7 z%+FNMx$(^5RhoU~Csv_g6wIST5XV>RgT3J&_>C%^D1oj#$Ux(l6jS=zBki$WH9}b< zW);UVfMY=HOXW1HD&u%XY+7q^Y!2(iXvJ69(>xVTSp;sFulD?)bC}WV`&D0Hjh9id z?kztHq@>qEx64x1B?Z@Z@x?Yqxgy;&(l+4%n=|k1Pu^MPZbnyA4tOBhRm9j?TjlC! zl~F=~6%UTVRij?*mcOALuIeDItYP_}SSm2UH+|>iMHv2sfmy4FSosK@m8|DAIOQ_i z35+1h%j)0|Nw+!(m`fIcUayn7#T9G$S9Jbu0}0ffxOq6BkxrlM+ZzIG_R@nH$4(r> zym6rRV?bjzNPzds(GywrB4?y~-{Wf5N{uicy_=+9d&Zw;JGGdIEs18`HF;uV%qC5eb0j)~v`S{+iKAIqHA zZ;!qT6YdNp2-?Lb`4{qBaUPkK0u=UtJ-?)Ql-B^xK$?CXR@m+|WS~iiwwo(fr^Ayc zQ-(S^Iu7riKuuSj!1iwvv^m;^G-7!_W=UYT+8>U8OQ$wz`JF@ZMzqp;ZXa|74>e1yxDc=Fs{E7Ct_!^`!&5;)Cr_Wm;yc>CX3(>u{RoF3^}JA3b=d9U0FY z^j$6^C0Id05i^MIE;Y=VxOb%Y-Frr(~{1$Xr*T5d}SZSHlA(GnNC4ytT$EIac}(oW5z^s zNrb$X@~A6OpgVwphtJa*oHcpkcQ0qe&#Ct?)#9Dd1?r9l)zr*T5rl};+vx{C=MY=P z<+0sB5RmsmBa7(|qe*ak=>ir#*wbxO9Fd$Jj(%wwg;R|i?7^LX8@p5RT z^77tosCGGSyGsCZCy^3}n09?GRGcKKI_jz^Pl8(G_N77(}h~^ysX+Jtro$M|Wn)`WkkEWEsMd#*t=2VcBiI3-nJog9=3>nJ&A$mhXe0G^zcA zv00|lOCA`!>D;eBcY6{pkXOBw|K)HywrYVCe4^> z?v5A?KO?Ujv&BWeZ5;@#mu(RDB2+pFl-L@ZvG_yeO9^ z^q2C>VsB;_KkBmBpWMol@3zD2zs#U6e>^^D38|MD(cC}L#G}1<5z7*TA+q|lJaFW_ z8`?$i=i#ep;qJfw5WK44O~`mY#NW{rXj$Wg{9-84o|@+k1XsnKu}j>J1u-+wsw>40 z|DrST6M+^LkvjI*T13FqYK6rW0K;rErJ0DbXwL_>>CJZ*|KiX#HL&u#$lvAH`%VCaOoKk}F8XiCGsXi#2B8QTeFkq^f{x)V0D>BE0z(BtD#mHUGgPC|Jpoq5s`nV?h=k`MUVr8BfVTx6QDO5hHFj) zweM6{%ecx<&Z^+A=Pd5w9B-Jcgv`(bxv_P^LfbXP|2n+<_PyAN22GkojorOCLASq* zGBxjIXvzoi?kSe`qp)*{I@*u)?NNptlN|1i7K)#aPVGayJ1d4ZJ<#@RWhi|r=juPw z(WYMK7A<>l4cea{EGwazK22sctS6xgbpp?TXui75ej)V0_fFD3^D9+E4@9$ly1%0j z$9u2!Cv%?>OOS?_4L0}(JIOQ$8{!&+3^%W#u)jK;#U+c`I_nk^5VckPQc!lSchD@NGmscV-^;c<2T2*Z%GjPi&}H`kpG-8 zckIFsXGMLjhk(wCp7<@L%dh%7Q?;LI48+PZO7OIrcp=RKbJNdqb#MEf;wz!qrIG>Z zrc;|#GdD`Z#ZRtH^U}(9Kbup|{G%w{v#V@<5*24_g%VriwuM{#%yBX&TCw+?8lrss zG6%DG+9;Zr(7sPyzDi38Ge~19-Q_6~tIKan46w`MP7BJU<^|`OOgC#fxk%Y!q zs7zb9w)FT-H10ODndjk3*B+mE7;}iQG8S&D!{?@4)?nIk5|PkA1^UleS4%08zO;D< z*BxDcw(^Fev#5w9Sx!;;wIfPPKGGDMG<~w>Yw08^)RDihTIVjtx|qIre=Wp`{HV5g z95z_@dA>_!NanscaFVnt5H5RqPXx8(RG_;4@u|UFUT~|RdG2=W#y_e$WdhVnAWBUywTumVHbCgd+ zXAOR;mQ8a6_h!4Fuw(U)8!SpSJDs zGoE4p95sL12_WkIF$Mj<%UFO$3p zI(j*tAo)j@W0AZ;W4;~#mSEhuKVnIRZ_G^E!2;?z*We!DRp?iX<6oAl2$}@_Un` zb@}Y8h_HMQI=sD?UW4lL!WEV~*(9`e^?k`Q7nx;@g}X~(M3gd3r<`#|xw@qN*qOZU z!XXE@nE9L=12rk1o(lPftMEtFebgtZ@V)V@5lucnvR^SG(BzgXFoCZDR##4rSX|D= z_a2Wc*1R5vaB68$kllWJHvLfu*Xjv803nwF?7^v#1|^q1tHtj>AB?o)oJaWb@x42t zKc2hrYknNIQD7)$J_}egigQXpq2x&G5~Uel7SLck(9R~PB`_g$ADegyR@T?*f8VOp!{F`%g}ufPFrmn@49 zxIn0*@*zcfqQ&oSS8$9v(?3f`Ql#f4GA9ZL63P0hbl3I8@qCqPF#;aiKB4rFcwy^p z8u!o3QX#6+O~(;@-+D{F{`G}gPMT|Vj< zO=0U!p3n+8drskV+oZv?XaaWh=TtSf@=}@JH1d&m>c=hfNy1uPguaaTySE8{3~I?Y zYD9tS0%^@Qi9Vc;wI`IKGa5m5DyYmr4`dtozKJkZ%rK)fW8m+-4)2Sf6vFu&{J2NB zui8g-tHE?mC^j$o^9RKCPhg1g^mY&knS4Jl!9eK78x}z_MKMJVj8x79N7vFh+2>`I z2Y+auMN;f%1mPtCuN+^8rO*W~JBf`jVyaLX4_Fqr&gbNtBf#v%fI}C?E~SeTy$HTEEZ{sDvXAi(=)f zXrV8EIc7c7xhI-MfubEd-NH%f?Q`i5lE(3pta9a1a4ID2oLvWvR$IcD zzS3`}3kx+uMV(pF5jnI{oTHDSn4jt8%xw5Z9Gt5L@>H}~A-T>tIw+h*sfuDR{}>-E z*|PUgJoQI&1Pd+(OE6P0!IOJd8Jzd1of!WfI^e>LTGg{`#skt-^F);~k78@%#Qw*t zbP-!^G_v9mFsOqHuBb9UevhBBY_K4{tN4)(9JT`gzB0ca>Aj=0M>U)#4JwGaCy?$_ z=HP$h%H4Co@KN5AJk)Xb%*<=}s|cRfHF~~=|N9*X@dBhbe0Y-7P9Q%5+UozHqYM54 zOdR*b8c?80gi5Rdh`HKzXEHeAzDdQ@~!prEUva=WeZ+dS5u{ z*1HtmfHteAK)^l?nlgSl6^D}uTuF}>pFt7t+*aO>@yPX7x7>LM!S!oB-3np`< zFrgI|%6}e<=PIW0LI6xQ3)1b4y1Ke}!RFtR9E(Dje|AdSBEt+W*avptp&>xs{PBd( z>;%QXQ^*i1C;&VJ03!hKp$Q-Y!bR@@ffsAZ1-f&%TmZwuB0RABU5$R#yF_xQUTQ1x zV4n=2BtHczf5|M+=-LVdO@!a(v$hX{mLa4*A3*==VL`|)$xVz=;CVpnDwPQer_BF8 z8|ZnnxY|e4rZG|yAvoi%xT1hvFdxrXj)|0g1SHQ;B5Gv+bs&(hfuqEb{RMrq8=x+y zw8ep|=s>8?kABbQozf2Mh+9TY%&S?@6x#FVV7bHg_el2E@crTv`FAZS;Mz*C5#${t zBqU4&T{^|Q7l%>nds(!)-SUBNBr7tm&~~ByM*J|UBAu%6994}UT6oVELHh`vcN0wg z-vbWDKwsAzr{X!MfoEHMSc;j#Ga#Bu!^{Wp-82ZY|J$YEp`InBl|NY1rGEVuK&qn_ zPMPQ9f!^h|4WK;<6LnFb-ZKRrCpGWuYZe7+6QNF`9Z{IH;ydFTrkxK>C^4ZcFi=+)+ChO_ zTL$l`-RuZpkW2x&Uk!w(l36#`ETB(%`Nm+HOqjz(G*~g(pw%UfDze@!VKej)BzVoh zq1Rhh_}9+fQ>S0y(Nv+U!0b>CwEtRGR)tkIGh<4ETXa`IzA?UoCo5|*Km9*0!zdvht94%eVa8s8_L-q!^9 z#7ofqJ6JgX8YFu!+PR-I_$Meirbh_ss5Y+!XFy zgJ0_Z^ScQ^EkTQw_$Q%`2J8U-Q+)2gtL%O>pP}bM3ofAlf2oY%rLP(OA;e?BKtT__ zBrf=P@81JP0(y6rC;W50_cH}PKUd*@UJPhl$7%+@rvHu>bg5#F|DW>##wVW&uVe7n zz%Tg!@1aPVgBS}TQeZ%V)0!Ts_v3g8cy^R4<9TIX$aOqqpddE(P;8*xi7WNTZ3-AH zmowaR&zQMp0w1*g3NXZ!-`$?IoVGr|`I=>RJzNeTX)abaNkY2PP7;a!gPr1vY)w7Y zE-i*wDTePYU}8gm%5s3EqM9Wx+(-X9p6ihgSB2fYU;}8`N-O@2n#P~Lo5Ig&&UYpJ z`DF0A^&~HJ_xtP&wc=1&zV94Gg#knSuOvC6LIJzlWfY;E9~JFguHj>2uf2e7qoeB~ zh@1l>+XgzGqkdnBSLqj{=|C-j;WobHxDqZT^H3Fd&K{XMjZUbnd zP8>kk_cB4@!YTm7VZ$_~4|cL1`x-_Lz9**2QI=|pm>+5Vk8$AAADq^ImHjePPPE8T3&gw3?iPY zD~3gd^jIaMD!k6@z84gr5l6gp2RbWQifMG&(UH>*P$Y5t&_%=X8WbD~J+m2j<$e}n zEe5FNBwt?v(&y$1T0i=IJ(A`jP}|XpVo-G`8zzP8y2AN@$Ol7!%&K7tl znnX$YySXw^R-P&(DM|he>x7Qb2W;QIRZLZkE&^CUV3ByZ0fL?3Xz7u15sa;+85UesS zUjOxt*qS}f<_(*M8~z&!YXeAlhK~jd%ic+fPnig-+7!4of9$0oC0#QS_^78y2qx=t+X)Vo+E!nFLx9s z6tNU}7`XBo&~S$^(GLh^#@C&f0jgad7xySl*rU8iuWoDsu=WMxH{GQ6UkBh0q}cZz zg1&s@B!XR_kJ9&={7+r331o84%PXG9CnWh2 zYuF~jhzPM5!WQn;)HYO3A?d!CTU!=10eqm_y#Q1UNUg-JDnR?CDLWv|g!d8~s|M|$ zO0^PiUN`I3*r`HeelIk*?aLauQH7V@0wG;=Ug@9hUo82agH8S~+MY*lVh=0qC4zVI zvDQ;g8TvJWM{_}VYuvEMgCWB9QMeoR@o>YJXu)scM(dI(wV|Ov1@ZLR&>BmrLuUJ? zdivqdV^lP6YVq;lr^wihIl(lTK2@_HEVvh?iqmaqFn9FqGG;xC<&DD1{A|NVD6Mz5 z?zpSsDj232E7&SD=ox352K*LF=DJG^s-Z(-ZP@mz@45zOq3Fb7M$UeJ`fUxZBYJQu zMD?Ls@o`+%uIh#jrx(h$87)~whBH6C*eda3EX!(W7k^@lZAp-dZ0bUHC+`Foi*0mm zWMXbdeB~$?bD$pZX=Gl5Vgu#m1n_=ZY7a##GQqn2iM>3k>cR+q_s; z*3D)euG%&d3#Du3KZI{8V-sf1ffeHixO+yOe-djsiP&Rjt{Rg@#1Gj!=ir+GliwpD zcW2O*O>!p=jrG?65v5{E?DKu4>}u z>@JMsGJbvSyi_y!DvRZeJ)ZEhoKatl9_@XTIl$_MN>3coQ~C#woB>_a zLOlegldI+e+(znQ8q0#?=*KeY4o<1z$DkTZ<563rJ4#Q?U?CGtj>}0}25ch{38scJ zVt3+2cSUWCAXp?gfZuJ4i%clz<5e_nu~5$`Xve0ht%QV08&)MXJ%c5-DG_Ijfq+C5 z#3LP7cozDWpC}p}xMc8f^&UuD0fB-}Zv1eSq|M8>bbm5cjin>oh_$p%v+k}LoqAI+ zT5r0VRy!=K@KK4`^ejQts+M{WNbsYCQRa7NC3VYkouQp1-GFkFzvcQc3IKq@k6wr3 z9zzMq`1kCk+sO4QnAP$ml@>v8U#!89&ly-yU&WjUafNQYQXq&SpVn{xbb{*f{GD5E z@vacQBlP*v9q3ReY1?E9q}SE%hbzDRXc(rWNAEz!ndH@3{_6wp&uo9$(qA#O$M}>} z%FMY5@t-=bc1uYM&EhW2olm7X_lOKNZFUH}oQt82Z*6ZPmDc=lezkt#@4jNFnFAUN zjG!REqOEn`ujV&j4XhY_Qf2aWh#5IWfZ{)U^))XL^5Fyo(S)NgdHd5(9dCr2&x(j^!9pQLwKeqT>f%;b@5SD`KURTl~okT1I}%Mu^jgWGU}*S zINO#d|K&Cw;x;|nMZQ~4-!faRSg{*7DK+UjAyhpIyNango%_6@G3FNM({M&}S6*|i zD)kIDx9K;{2(d9VTfIuuJq*K{W^B2O4QU;l{)FSrHfz7`+gy&S{H!|e*r2p(6!M9N z?z<3!KfRa}p4RWR=kDIX4z7aUj13}Yz-vcGM}mG>Aev+)diG_cG@Ew$*M3hy78ji@f-@L&iUMp# zo|3;Y5*4DsRU)PhB*WRHO20FV56T!kaAu>M$-`apREgRAnTjs}B{pz3PO$C~c!u^g zXnS>zW<+(tts2+7meOGZJZwvx-m@1T#PgDAFPdHu zw5D$OW)EHBsXs(V8iuQ&>J1dWIN%zG@NXQ&Q|T;SuW-k81bB^B8N*{e=^_O~J;k|m z*_QrN3lgtR^Hd;*gnx)u&IXBT}19i@#MQrd4{4#i3VBgv_{6{tqhX#eF`p}CU zG{lU|!Fq2MJwclH`1J?RBv=E&W@3HV^BI8H%9g?*0#Bcp{-L)d)18N>A1gcRE*I3 zTo%Y25iy5FwhPme1$Y8z4~Gp zzGgbPf^iq4l5Ci+Mj8;R5M234(J2s|d9-VMJu1Hbb3{Lx<0#YM+c(+I<#+uy9yLMh zP#fPi5udvhMhZ(KG@Si52(>*Hs?o~N>99S|G5o&kw>oRTTk*ykwkhUU!%nepC1v)& zwqN>=q#BAdd{VO#=gaFjcq)vPWU|A3l;NWmaXV);e4XDJKIGEF7!@*}d9A9~UIyGH zKOgqU<*22CZc942sc}~Q2;`inn;|M!4nO&iT=*S-Iv&g&J~(bw26lnUT5ix1Rrb7Z zvQ0!qFQ0jQQ%|;Bk^23YWw**y1Bn~A6%wUAa0VaWDXd_tTv$graAv`kTRM6V9&XlA zBWJ*gn>VmdQ|dq_8uV?o^#LCK1UcV|Vwyj`W?G#m2H~D&I*0TUo=6>o(sd(H;eXlk zYi$~EeUaiyWnRA%^BitxkhvR&Q2pdT47Tp~)kDG?rJBnMrB#}6z+-fL3#I7ongHZz z?{c@cnGP!dVfS!}#9It#Jrlw9Djc=C!wbc=zGixFv#5BpF`e;Q;>sOF2D}N|wL+uP zqB5aoJ*VoWl{KSLGHPq1wGuoNnZj#}5=Rtk|5AU$^)PJ9&KJ?;v%%}BI`hy+sd4S* zfm`B|UZdun;#q-$zdN&R5asiZH}El7g{|?B!Zutac+K4N$|?Qc9lX)hC#1*P$Q;x( za#V6lS>vU2rx5CCqK;M6YrB2sk1Qd+ZWPV}Qa@hU3~Zi39i_S;V}V)I%4vKvg1c9n zu*Qw3-O^>ur(aaz9P24t^~$kfc#q3SAz@WK9Ph~P2C%k zYT>6d!zKE5gAvM=oNGP;M*e02KKSTTkF?&p_Ry8C$+!YFrmvtcKhls#U$P!j5(g@# z5`6}%^e%bi5@+y(O@F0q$|M*P5%C8sm)|RSXro)ElrEmy#9*Oiw{znP7NmZD-g`m2 zon1d-OZ9~2I^%^_Z3N^qZ9kK%EgnR;W4P|)+cXI(Hq;1GMPwvm8rlM4No?HIwPIou z3~Vokxj)?LEKYyU>F~5dHN+>7Xx@;tF|a=v<(wmxTX^?|(xL9@+>HbsMl9>nrlIlU zsk8zji#c7T^wwCHQMv0}eS~z@Su8TM8gjKZ2Nwj@j+jsAg?3&>Pf%@Xa-!MMgburj zFL0f3r)n1_luuy`+#h;(WwhR$&7(2zW(fwVWyz<3X5^LHv&Yk1~VUjOrasF$eI;MTB15gaCzeLsx4jcuz{-K!=kmuVUeZoKN_jh9|> z^LZj21@`HD#M$fpR5V9F83YLs!hLa12*f}BZuLecx=USCChkWiJEepEGQ-f;b3CWP zgp_s?er$a--M`;lm25s-ensia=eVx z?0CV+??;Wr(6h3YW@T7f9R4)>epESagwS+V#CPe^-HJunK#y`o4g>M@gyQWH?6ji- zjoM;1UJSRbytNphXg)Gncv>1gHZA{7XgpNHz-Ac;RJo2_@&C?^&$#dBby(J>qpO^RalO`o+wf8 zdV`fFUe>wqwkipa>f-WjtXG&tF^=m8OR1m}g|(-pDk!7mq%wHsT<9v>91?{OTlN${_t*(=-^k1p6q4A=r0M}C_&8tEv z-KZF@Kk~PMzBuMr^mEESd2FHJ-lk9eRnQt>8SwrQL-pX>gd)!D^%}R`4YsJF$}@f5 ztD@Y~Jd5KVLnB+#s>(KYdyZt_9`Ewt4Ym?4gw^~Yv$t>)9xy?EsmX3EL8-%CZ6&X&}y!cd+-AntWQaXpd#bVI&#c>zm@d;P z$I2E9e2gx&%o2M%g93TG_4oME89z|xn{=vO?f^m}M zpyXS<;%AH8zUbL*nM}3rgs_P}QzBK$6tjKLL=YXa|28YZtmRhNv%MU|I$bc)J&_5! zxN=#U@8xoRAT#31-7%cb{>XUa<+T5Qw%Gm-;kYM3I~z3FDcGA4y8H-AM%hDZZtkR^ zfw5+M8G+V{3Fu3$uW|Z95csRW!fleeIYlOl?x1|Uk@-RrfkxxH@vlmJGWl$m_c#m+ zutQ|*Jh@Q@PS@^rL*ss|O-9}FS7ge?#N$HO&hkyoO97aTaaW=EJQC%$I1>UiM!o1S z8-P2a`;Qh+>Dv`1ZzQK@I$5FOvz;?ge9?HtcfK|tc?vTN%@^UfJIpB~4N{&=~%0a@TyK5(eE4bxvNEK9`kq<+K$4stUeD%s05 z^5@^;8ydcKHuP;T=FhI<5jdpqvS5MQRN+wYcYR8LlpRxkGIk~&tg?{KGKI-wS6~`m zFI1Nf!^Ea5sY7&EHAGiD(iwx64F_v=-$s2N<2)dd zpV=ds`1K0sqD2@vNz7(-j-}|$D(|HI&xq5btGn;QD5*dG0@;ne2UJ}GZEauF;$b|4 zF0~F0vZ0&lJ$kLNMvK{;PjJ}!o^2d8ja)>Mp3wHc=URrky^m%VKuhTtM~$y}+u4*i zD0c(!1$M69|T10r}H7{-6pCmy}(+(u49f2MNJn&LZ4;bn*sDv$*Wu1S;S&=0ae7;4Iv7In$BzC-CRqnVy0r%y5}85w&?@{x(U?H`Gtv3#^@ zQCQ7+wkdetv${Ydsrxd4l!kf=YdNxh+vvdmR4mAPuv&pR$LHV-wvCtLkSCks5U%37 z`HarcAK5X?v)8BVJpy=)>&5B%g>$^c*Or+3{%OZ64qE@T_&~r;+m^=PtmH81vkHIT zuM|OoJ$5muiSq|a^Qc*U;}Z4M^3`2Fue&|dBFAy(-NIjqcvPgCKTCCQ$LD8xpH;6A zW$aE2P}cBG9&BV!@It3%(@aZBGc$DeU`X6m)$_wuX@+_RJoW>VguFM^{*c{l#iH8E zU{`*#()p8FK7$ENlOdXhvqrngZ=Lb^d}Xn3#TzVF}focEk(J?CBP zdDeRU%jLLd_P+L&-%s71$14wYrqYC{F><^x-0y$(+o}K3Vl?avriG#MRh)Tn&6u=U z|IyuCPzdOAlYT)N&8I=by?0Y+wjV!cY(TNX z?6}}Ct-`iAbD+}?Xy|u*MSa8xKa4%QGtw?IMAbRDdfG3cn4m7WfJRF9HdZjWL1C#6 zR4d8225XE2NqULgm8uM@KnDWt72j&JokUY{zvEpEH1 zJN9cE>Zm!x85LNuSw5YN%u{8*dB1-83;*SaVRCn(;n**JkU*u+n!02+e+2-Y8L+U( zSUlJ=47sV4G4Me}bh`oq-v?->F1d|W^>N2K5bn=p+T7>9#u^Orsln+(%*g4`KeJSR zG4=D~;6p(0ciKbIG&pw?={2m1DD1k+WJ;_oC>`JyhQ;mGEl)kBxDi+vr=9}b=K8b1 z#+Fwv58y!z9)_#zv~l)~yo>?z_-wy($bx$BXsD=65@^xycS)ofE|EPv>J8_Cu0-G- ziFoCK<@vEIQO}DEr-ca4U-GKV0CW2bN$PJ8I8cFw*=s++gAl}Qnk>u4LF8Tmn9BJT zf0vE1%qY`R8+5SXVH`6tiHtcMRL#6INc5#}p!eFD(&`pI-m~a-#JRC8djy>Q;LHiF|t4uP2UPt zY-fd(GjXn7mWypdoi89?>>tFdJ|6PYU9f1d?-rl~jQZlMzuvCs{}lj0BZ_xr3~`_# z{>Ib7rayC|n51iDZr=c28^B5MpI`g`Gf4Iqf`>#u|6h0=Ko$wF?$ZYe z{f&hF?=jSWP*CL~r)ba^NR-lock=26eSH3tH3UaB8{UpI6TU$a_x`6C=wCqW|NQ5X zZYKbS{GWiZeQf}uw+FC{R-~m&*csAqRE`QT94e3{?|Cz^!=JJcU^_U!kWMb?QwId| zqJ}rvx9B^xq_b0GR0?gzSTdt{Q1&Qs(axdCZ2`N^*T zbz@dr2QR(cB@&coh@ScjSk-8K4|E&=ZyW}ohb6!}q9px+)KsI_fwinG((SQcji~{+ z1{s6K5Dm_mVmo!6Fo|PBN^sIbV(x%rYr^;HN7xwf*ndQ*ldeI^-SkHWi9_aIBdem@ zQ`ME_<~<7j{r&yhV+M}ZN1Nkta;tPxfYbp!44y%az20(ifytbY4uH9~L4CFs6#BLF zcy5Lb$c<~B1_}->xdcGI8sO11cPZfTt0m!?bs$Uk399DgD9Y1*mOEAs>#!Cc^uY&Ov00+s>k9~P312K)EfEYm8HJ;60jZAXsoas=QaSa z6;tVrVFK`ym4gFn>84}D`U9i~A_Uk?j}>Y#iUHzHE=mT-Q<^|0Gc-X~$1( z`>PAUPEkBR+5GyQMQ8zQAz~4jMwjK}sE4ZZUqnppc-r`IYzi3psv2H)c&PKhN7QIqI75U4C3gA_f{!1!oHJ6$32S6 z$2u&-Sq|H7xT?gB(kX4=Y;Mk5XRAzyhpmXWr*W+pz7@EPHvyGDPoj2y^7(SL)u7mH z&^GO7LDzR~&tEwwAB=Y4CDh8>pS)KmlyhO_xp4mS;a7?iHk}1?>|gLC`L2H;$H(F zyP)1ksSH8dBD}-(ksc6HlIa9Zu(Jf>$)Rf~YCrJG%*d?JG(hbKGSr-!ej$0lEt7Kw z^7P!bLAs*((+WnFKZ9m6!g-CK6X zFJAdRxUfzPJ*@ThyH*pfcp&2KJIk5oda&-U3)Ns+d4a{*xE)#mt9WJEGm)qM z1CV@Hralp{7(_I~4S^_rdnukECj_us#sw(#udkV&HL*9Zl_2NHK9~#ys$DYl#!GEKZek42* zQZ+n$#~5h_btDme#$Ll!$-=W?rb;PLlTYn6_1mClvM9^(3*k_O_i~`Sj1o5GNyi-* z6fSQ+uc0heRWE3!Ts2d#TciEsT ziY{j&Wpd1FhS1eQ`gg#4quBXnz5n6`C8{#>^+f)laW#|?!(b3swFH{$Eauf)iCE4m zhMR9b$g*V4yS-J9Ben&gxY8;qsY-9}gb9M$CaX0{j0a^2y5nNW^5>tIgwmjXDT#+^ zW|YT>U+(^%Sx2l65FH+ir*Y=VzODvV9D5A9EtLKZ0vwxWf!|arnK=X}vec{za@s%= z1Fdi%uqD7IQ{=Y@$kQxP)5^DNz{J2Tyfp?2T|Wb{;iN5Ce&;zc*LN~UK% zAE{f-WK>ck{XV|sa`3x7&FcgEXt7@9n!tCtYNuThd|j{O9f*#RTVgesl)c<|sok>x z`%mn9qBBt2%4gxdFabo37zwb<4yA=mBrWDfPGlivpV5G9xOM>?M)*=u@q54~+bR$P zue4$dNI=4qy5)rr##rUJ5dBBSEk2&QOdWGz?2B#Hz#SqsFh_p879;+;=>D^{@e%>g z-JAl!ca7i;xcFTPF3bSq8{)f;id0a!1hFu$xNv~xv`33>6t10ocJvD(S@N0%hV*G& z$8&(hH&pqZr<0@S(z_?rrLRUMfP>gs0^@Wn0~j}KkHgN78)epZRGj=6KV>lTEviK6Jk$NuT-iP&KPUoK5uE;?n1qLpFE1<&XMc)9EvsJ z{cBKk$>4>0wQmAV99na^;zC~m+U5b{)XABKT z--IoJsa7mmy;97P)+$0Mgnf?|vGM+u_Ox##*IaXtcFe9h^T3^{cv>Gqw~6D)0>o)d z>sT9c_7*C(W&+Yfv6JldJeojP{A%*7ge$|f-i?E!Qj_LfK{H5BnlT{H%X$+*=E)Id zLlh12IHq#IT&jV=t20(=M7cdqOR^Zn6*(<(zucMeDegK|Ev#6y1pUD`Q-8ga~cW1$!9#|9nVuvUb}vF;#9Zz2c4AaVa5b>&FmQcoex3-yRm*cBBoGOIxcIV511G~` zDi=uf@}-C*+V~&kkosI)F7yuLa_N@QHTz9gSPn^C1JblY7VrTvkax}FjMe-lZP4ZC z2l!Wqyne^PWqCJos)sq*&#xOr!;8y*5h{ zb!ugdEiL=X@z9#dWME7fD!5X$gUH%5-aY5?9-Gp%+PW-_cv*hg;~K;UkEb8bipLtZ%s7tuL4 z^fFxf4D*)I?R8;Z`K3@=zcOHzB0on4paW;Hc`TS?U!-%qGZH-Q2+VecV%whAJ&X!H z|0Nwwp)it?wA|^d7W9}3s>Ung^kHY!3HM>{uH=e*g z=NuV%+t12oOhoko#dml!oR@Cn*6R>DED;Mjs-KzjVGX=0iHqJy z`h=?p%;+4kohz<*TH{}>RJuwx*Kk{0Gl|=Xg1hwXhT8U6#=~I-*q6?`{5S&dn19s2 zJ!R-`$Je2nL`$&Wv`xLkRrWZ)Fu{kDdy1KdU2yVZ-l(LiIR1!MVCWUhdxR90@+!s< znp4ecYrfiCme2cnJM&2JV4<_5Zf0H3`8%rjZlH%f>=Wfym3xMLSI%56X41P7zO9RW z2C@C&a6ykgtaIimr&?e4<44+~#W6E`!>H%4kD@J5Bett}XeGN-Nj=I?Jk+a24m=~C z(b^e|_9{C!&dfHHN08KtcbEFR2Q**rH41uMJQK@Tsy`yXmXa?Ed#eDZ)g^{9y0G^# z9pU7s?<3mY)~T+>!l-`UwLlw;c_wW_?;oCZ5+6n|ewSv=3A@!2hWR--@m%&(!PCrRD_7iEo z$0E3+7jU3fMKhwzE3%jZOJjs7ee27=T+lTnpAu(4B}k^m#8F{`YG9uV_hH1VtkS^+ zqKm}BP*un*saw;mdjW5x;VF4N7W>fg zPCflSVQsOX%^y^3mI*wZB5oBe!2$s^q5-mkts zRV~BwKMr;`3w@>iT;Cz|NO;^Kqo%{p!;<}~%rfSvHhMX4Y@yEkN1pOzvwISb zRCZLNfXFC!W_cewArPBeH*-<&^)}Q(%$S$Ax0m{9$`wOsOqmsivfxz|MtA$cC&bjsLK&g3MeTXK9%B%kho?o435K{VM#vNcDjOGo?yH@^-QY)Vi>ho^O6D8CiLiS#d)6cQ}cLP&A7 z_r`Y-jahbiX1S^owVx9+G*9#C={JChxI|h8UZt`pA0SdnMt-e2^MGM zODL!77bF$7Fn2kyZ2^q{L-Xx4hx>X{{SZ&w#on#_Tp{PBCrD4gT;555g%1$!1Cfh- z&!Dj)M3sO-*vZ7AT4`eMuWE5nAzSZlX$$IO=M#3j{IeNAK-Ee*?Got|PQdJIS`KDP z19cH&rW}Xqx<^J2;C`Ox{UC_KmWV~|o{l^Lu6Vpt&LBXUn|2&CapcB-N*)N3GT2qL zLw{y9uji-bAby26N87IsU=)y9r6KO;QZF{0dVXQ;#AaAijQ@IvAYd^M#}E9%b|9W) zZ{wxdeG4&+$_r5&j{+U*y)OJQ%gYNl= zV@3E^?sAX0OuNC^Y4{YeM_JK|LwG*xU5#Yq=9{U+?Vw!tf{HWfc-WNTIV0_fk!#ZZ z85ew0LLjPtAO@5&&3%Ep^V?XGDfyUyWG#M49vkFKUB%t~a0*Gu~OKGz$CoH^$2cC%+-U3W8C7^#sbcYi7 z<`B@q{npo9=2o1g9@Z(QJ;p8c$)4%ffT2%4$$u20)XJApi%(^e|IVpNJO&`Pu~=1~ z!!WBnsTd(5;Xf;@{jW(=VA3^qTVX|F&}ZKyuq(E8+zM7U)J{~saI+}qvnD!89i=qT zl>)Y>g?16DvY|uLZCLelyut}Yy@dbfW3g;mJ`OIn+RkW7YmXmiW4LN=BsuQL7IOXL z#NA6RQz0fQjB5;Ztdp2xD_Z%dZFUso%REas~^-p22pH zv#&O`kFp>+zKOeMZ=l)0?gW62on+(y=m)cm$plrAHTvm=`nFR2bo$%SvGR&a@b@} z^-8cfU(g-jp||2Bk{LAy+Z7DF=RuhHwLd@iAyQw-;SuibrJ55iEMpC^0`~;hLj+3D zy;(G3ma@8aIVd$1$c-Yu;l!(E?vva^PX zEHX{usmu@a7zshbps-?7wR-h@rrP@tg)(fO0e5iJSgP2E&aLJu1*w0aXdmhZeK2DA zTTV2oO;>p@(y^6l2o@fjp4~deQX@Z(;ahz%B-q7#|0vuAq*kY7wn?ZiQ8Hd(7Q)&G zs*D*7>u6K1)@Wn;spSonqFJZ#KmHe+Mq$#zou=TWO{8czUvNrL2wf^X-Z1Tj2QIIXc~)IRCqgB6Ii zkDyxi-$+<`^uzFn(daPOd>iK+CzC1(Vva{tf>Y1rGzg)uzA`zo(jFGej+3Cscz=6a`pTMSwC*DkY)A~IiEhRxumh4nOBvZx9g(D zDc=#Mw>(@Mn*VZ%7Nj!xHRMm~N&{!6!$R=KBJ7ljbcO$gwVutj0HrSWL2~eZgWdW5dy@~-Xwx3JGQ)ROJ;K8RkeSK-AZQYaX%nM+^%OSKv{ z-6zN+miDXL;tenkV*>F=(X-L*92J*xv7pv}Wgr-)J3l}vDOc5Wb+$Ql4bF`>{(oK> zg5hkQ%BuN7PDmV2+`4w7MKZ!?iwdJO{4hT%;+S(AF; zB4Q6ry^!+1wF6*c%ylDoV|79zS#mcrU*V2%ejdFFrc`zybZA;T0LR;$TD{ZkkstGb zW0VKXoCW=_E)GQr_y5wtVNw1|(8mBy>nQn8s)4<9!|`uqT@UGR3Qo2Vq=P1?Yi+zi zBaNHd&(8*~VWU8wO4_Vc2=bP+zTX&Dm;KYBG3k-KI3T(;1^$N-`TMsPlwxQka&)+n z1Z0KC`_RXz*fOevnGz%CNMpLHYfxm=zCk$gga0k?1ZV~j8vX;c{eM8ZfY0{-NI{Ln zOa8AwZGYXsmrxfbBr13V4kCnZTKTQQBYSJC8QhwGupzAj>aHHX0cHPnjoC|gKtZI>2u6)0P5RiHigsW{k8+$~I^&e}-pk?Eke z0pieYZ1;n^_RFc!DfdmsTG+|At71bNyDZVpr{C|ui@&22fQk#?*)>dT_fKdBL%epV zI3SW;4`2=bcig2$Qv-rE8NzsmY1@{jdV~5l`vVIR~QreD&D= zqD*ou&rQ>AxFI6LbLODNr!j(h(#9n;$zWY%ach8$v3L+fniLo3xvdL*Un!nPdy&B# zOhWCM=1Xn+QXYRhdZd9T=LdXFb8uG&R?U=m|4wv$_@8r8I?t<^UU(keXd3Yb6 zo~tx|Ebcm!s5G4;&bA#ick5x>p!^G%1+Ne2a|s!fn96T6R<@b7He0L;v6Tbv_fU?O zx8UTa4wY$liCXz)R;HaJm+!zgW4Ckxj%`~ZPUjKhtMWwibKS}cZuj|49(YdP0pxqH z#f96k?iM|o_FX4B_OsLL?$@5w zC52o3-l+7quP%CbBwIcUh@3t5_CYWh@E=Hu)ykGryRUP?iK$KUoQCR(r$rB2h91CD ztz7b_ZGH90^!l-lD~#FM?a$A&YWAbx#fs4S3?ZBPk~6>f%W98)YT6l_neX~~gOr)& z^}Bv1yRZxs*%%wM5}wyXf;*4k&5)83{k=G&=HqiwLxE21Vtt6gP`*q6bHRb`3{?Bd zP{aQ}N~4p4WR!-t7y1~=E-HINYT0UXch3OW;eJz{tF6Jdx@h7_?#;~Fsz(_pIZWu; zHo&@kbR%+`QSdig-{K-M*j{euDp9&#-ClhM`1)~@f__IWRb~D^sBKFqgvu)miq#e0 zZcYA)JmO%h3>YDJfS71tvoaW|cq!ai_#tngQXEX)>cHOI;*daee(78P@H~n=2 zk~QmAMN->5mh|bZ8=zueRwFbG&c?9d36h^AYW()~wDtW`2B7r(P|YAz!gr31ha!qs2k?`_rw+0>7!oRVn+i-_9J8 z%LE3et8<9sxkSYHM!5Scn|dR`P~n89^Esc!i4eYL$2*shMekjSe0qe}Q}u8nUDn#8 zO0un*cHgau=urK%BoHAuVrI8QYgLV^?6CT1e3AGFDTYLCOEduuu!-{YbiLSF)Og&9Op%kE^Fz^9w>#E;iiy`uk z3YC2TjE9)Jz8XhD@Q0O=*LnzGUmVgMTnOS{#6{nlP8!x0Wxfu`TR4u{+KEroU01@J z)M3keGfm$^T3bzDS^K(PR&b&!fU9`vQz(b=>P3%uV})wDTk9$|ya46GMp=Qz(TF?K zffDgz;wvAl_5ri6{Q^buk53(bY2NkKT$0ZMENd?v?RhxtyvqmP%^&_J*!Djv*735LIMX)We`&In5xbGU(oAlFIP!RQzLM}wHX1ESA*o)s zT1<+sW$Mn%+OF;w(}ku<3hti@ZC@UfPE?L(nQ?(ayTCz;-)*t&q8_!%{RfKh_vK$F z;k#TlV0j7hXiz|#Uh%GdQ+OJ%ABKEr|OVk?~>|VHjMD3sDs^zYr zY)I1YkN;X8?lN1BH)murI0vn9v-Zdy_^l-+f<;DRU^Q{NEbqRQM+Di4BSG|MV!_YO zo&j~~v|8QSUGKf+&xoHt7fUQP%&zt30YY#s3 z-wgDm)Wr}=hcaZCxS`=9;PSAgzCD@s-VH9=xCgZ44xZYf%geP`r zJu=*QB%A`6*=zmEC3vfn-E8$ zyr?Qc@2krP~fyMBry(&2*{gZ@b%_3kj!LMVG? znj@19Mt6XB9~@9-;<+POJI;XJx^Qa8+ptvS=9SsUAM22Zu;uTGLzU6q%V5OdMC|l{ zoE*m}3V|=f-89-tdo_ zHFo1IPs9|C*2KZ0)Hnuga@g^_6;KOQ(~_>XWHCMrJ!UC;rbq=K>L}4fzt9gb$MI4l z#=Xy=Be`!^k1LG#Spn;ep*0hvF1;&^z#YImIwF}lISiDduGWWQdV`V%Ro13Jjj56> zZ6b0XH7Uk>#qtbU<@$_AoYOXpuLpQ{uC#nuG|?L#z==E4YvVI}{{|(k&!2X`?bu!z zh-GHznFEQhHQq?wJ6k1iX;RRj63_jOl)W=NfFcM)7SNJ_&qld^?8w|MFl%RMe+5jm z*N;lo4z_M*id|Kad>6DEk`n{-*{fTrG|al2 zmGLbh_1;vM#4)cgESL#Sj0)7@F{O-00UEk!4|On3``yg=C#65M7G00}8iy^l1S8pr zFzjOu|o z+TVI~^+suf-H))Jf+z$;_C0IYL3fFAF3&aDUQ6O@-BKYkn*(V>(TMf&=DJ;Xr>(_r zQ4v2Ju{ZhBDX+a;cIp)C6n%xQ!sel1hleY+RaTfW7}9E-ze$&QGM;!IZFL(${FCN% zP%1j>j7E}3*4jX3FVMTIn#|rGgg$`OhUTP~F~2*{K-F4)P}10>4~ZV5k#5i)Gc$y6 zxBxIk@n4#BWR^Gxh)|zJRlaXSVD)SMqBn%1n{dUj-3P=^gmFaMqdu*16HpB#1GTXZ z`hUy6kANvxh`jS#Seg{CD|qqRcRk#JU452%4WnJ!u!aC!lbgl{7o6dCx(F5LtpH!eNvnTd3I_Q(^(VK+5h*d7YC zX*%=wq4@_)=`bF*oEl8Aw41^{kmr7sVU>h&yrn%F7LoXMm(!3a9j~;xQ8Mz3l#EPK zbD+)<%6W1DSYryCP?-sqj^Cg}L@m-diXKE%Dl{j*6O62ev#V#YSfLzKM`Nh*E>OA! zd37BlrP8sB+vzLMOhiD}*ajIL@1mo;mUmb%TFFh(0|IsnXwC^<`ACfr;d2PT+~7E8 zXS%Pon(i!7Z$%X*9cINXb@x~d#xov8MJilainEwL@=7?&YrYAJ{7&W%C8;KBSWth13>Q_g?9tnZRWxfk?Wt6d?#x5@z3%GbB?f_$9QiG` zcW3e$AMb6yuGzhlu9L5`pn}+)lOh}zw4ZqYa_-r0Pnk4oQ7hr=lsg3AUGFIG5RB1( zbaq%|_yN>^VT5~MEAes+=URMo&)$P6M>@gv+3|(nH@-n}a}enw^Ws=GfSGB;(*=O3 znEa!f8$}$lS#N!~VkpaR)5MjEislod`yVN-ZCGi6G~*Wkk9?gW1)-03PV$O zFP!N4Lej4Xe-}`bE(+C5=s8nxnHZJ1_Zf`WROVj{2bj|eXEWir3I}xi>P$$ROQ?lQ z4bx(AhLPI$-##vF+<8ZZp^)Rm1m&gExdAraC!=?n3ES`nR~k=oX{nB%nLuHps}oU~ zBLP1~huo=$rhIY(Hu?XWzS+>6%))h@>D20eo&szcvjB7cH)Gw&?~8_MI!w;_LOvMo zIrJIX$;%C{$EtHTLte$wMyA}7|(95$1c zA1SePTC7gdb)op?ea7v(%RGj@N59rLrNzEK5o3rCETmtxhWaT0k+ZZoT~6Sw zqTx5xWf3T*7tUwpzPE?pK6=+nUn&9nVmF@tdT~{Uo;Mhh@lnB7{^xBphA9>)EIPP{ z=Cz1BOCjC8EMU^7#o$eWib)!#i-|2M=Ui_kkJR%Y+X7-pjuk0VyuBJuJFhY0ml7h! zpEifMbrjbC6Ig5+OduAdRKa7IitrZ0J);_xK34hupbTg_CBYD^OcRV1{9YZHApH{w zT-R-UDar{T*qH<>-c{F7C5Hpx`o3Bx#8eT^G11Cg_L#MhN(GAkPs#RFBLl=QXGPQE zO0TJ`V6{eRxTF)N%PO2+)S3WIqz@M+gRsw46?#qQ-lA^C9(hjyE~{`)1nia?6P}5v zmvDjbO9!d!wuKf-#XBFqb^5K}Vt8Ga8HRE!@!0B-3PspKQc+u6N$1=5L|7^U{{o(| zQ1;#MPv2C^THJCQcKZ{L$vGN`j7zyBcZw!YK~Lu_ZN@u4n0vU8eOU#DxMP*h!lG8!^rX#L2pyj#q6S@Y64KMW1LMdEp%ox{K7(lE$DP8EqxLXr3m0m^ ze3BOYB-BLa(sGU)HQJiYUsTy`PL;CjD&=XoCauCa|`3@GgNZQHB!&cz2qmrbi}SMiMr1yO6@8gxGy=6FDEvHEt%+TVhUDV+gL{B`&(Xa-BN&uCO8Kz(10My}l!jce(Y zQ^Z^C44xqp9e8ou*u+#H9XFj)Nx{{u74!_@*D4rhFKA*TSm~t(@BO1db~S?r9nfz* z{!6|Ve9O%oX@oZDx}VY3fytG9=~qD5Gy3&b+aQzH)x5L+)oFJ> zt%A9zYmezGIzw@mOMurvRk84bToiJ098a-(GLs!OQ3o~mqIT=QhN#Tbx4t9VTiE}4 zqU2fWD+IL5a>Ym$GX0#IYycZu81+>GJ4Seftf>SOP)kePtz8tw??wg225{-6TyOK( zK=0VqH?*D$`7tYTJfW+%j~=9dqmW5cOq-|dQBCW-E~UN!@!4bmh>wrsX-;@de;Pm+ z-nKyH-&@>Rn%Oge%V?2ox@8Vb%T@ z9?ynWH_L?Rg3K;MEa@@7g+3PJXj5YF zpxWzx9h3IE`Qk@-DDRyyvHg8PR+Aez>omz?ZZVjPJzdcWx`)1HomybIovLojF{^VF{$j#7W zN8q>qg6sYaG)Lh{&9==Zw5GnrhXoQEv9ib){h&3VLKyFYd*f3C0B64jX(m?q)~3B$ z?|QYrLHC57R0!>ZS4VTO?BJ2h3YBw?*FxOL8JKqLW7a}CL&KDC@mnxV(RqQ^919{c z-Y!LROiG_wIlUPcWXKo9xA7$q1#{{ezf=IeFD}z`fYkJkxbVt%1Zf6+5p$#mqajRr zRCb4BJfHbS(|erHpePv2+|~T0zJ;Z}q-X&vYwAfKOwz}%O*V*nRC`;llVbcSk=75w z)6U8M=)y7F`;o2lo*y&h(QtANh5eTr9#3~eSEd?z@u-%cjbipyNklVgCON&#_$Vu3 zVoR@9uKYNn@NHr6Gey_iF#MoXoepcV-ou$UbYZW1fr|F6gRE^tIH~JGgQM`dxPN^C zfp8@OOW7@%2WFUVQHTJWg7=VC!@xhf56Mct3CeY7M4wY<{~(*IuT}a+v#_C&PQayP zB%7WBoNw!FyNlcI(ZU}2_Y8sp3h47lkT_E{RK-XM2i zF=FFf`#CR8SgK-GE=U`a$1?e^D5?r{rHOpv66W$DH=DO;iq@thqySgX2iru&+Qx^`AwMjnfbpQ(*vW z8HF1$e?woOq?daYM*PQR8#DH9&WA7yqW`&!_67}gcKR(IPxmN|WLVaqYf)4eFd~p& z*_$%YVnQmjgeT%OeZUrJaaTV0=R}Pp(bY?<;4yVsD%rpNz4eTr6)F9*zmi#s-n2l< zaFMv-)Hft=pd;~N0Y5I{=3@ud!%R$@r{OK&TD|KTqdcom&h z!so$}w>}+n+|WF)e}Ao7jpyWKu_ViFV&I8-EG<4?-OsIq@$H(^j z03kBixO#Ak`o@)@?AGHqZ_sbuy7jn$-K~w+>(JVu-Z^i1d0Acur7#Fn7kqN-Q_*t_ zPTzAx^=z{@9FQj<$k;|uu96dKuV;`N+~3c|4v<6RME=)dtBn{FL&Hn0cE z*czY>S<5dhRD+aHs#n#9XbsjL6nRvVV_@eP+=Bjx%be;6xo~LDuFiJ{fBwlf7d&sF z0@{Rw1+C=^&c=_@*o|&&Oa}F>oJKrq6Vo*HNxu*R@E2QotCJh1I=b3{C^Z)r_I>4+ z>Ql>Z`taWB?wtg>-Q=M$_M#+-ia&C$zx?ypB$nW%#}1VnC80o`Q}q zO$Ra{v`tezr6uvE^(BfE8ws6n4pEbuqBJ3oW9S7v6m3mm{?uhlm!jWF2fjGq!Nh#8 za*mxkR-{}5EUW#x1;5Qj_`n}|gdN>~C{R@_o?eD7!MMsk;bnP?+kVO=bcPX!##!j}AKvW{KJzd3>v`F3bk5*tSXHS= z%Gk=Us3a@@$seWQGMk)?9qTx&)~I?|g{`=KR(&x&rfw;5rZf2w+VEL7$-j2Ku+^BP9Vz(!dvF=S?{?P~i z@sPQhjt!munrUnU{o}iH@a%<<&UAfK^_S_8lFTggk*t=<)UnUDlfNkS8YML$vUQscsUhytYFb4zb%93|*HM@2JN0W$Un2YOOnMYB96OybHj1qt3a(}(nCIAAFUt zZ}`>Z#xto!KJQ`)hwScFzP;cQZ1GK6o)&^H)aooW*W=jliU}FGJ9wlu9SUp?TKKq3%*U*w3 zma~{?)_0M_Mo&HCk@d+FMRj- zz5j%}y{_fgnFL4*#JFsEQ)nW;dFsnr^YzgYzTL~$7o-x#wdzTnV6x?0BJ9fTd*l+!FkhEK{qc!N?Q{3~oiwhr6 z+RcJYl(hqcep8TJ_!)@J`xHO`0jR&KVCr9;{>e7MO)3h7mox$Ih<^7MZC zVvVzk(B`nmm&?r6+euV**Jmqq_cibz4eS)BT2eo-SDhVUz|^&!xy;_)Yc|~XuZ50V z>HYG4HDTI(#X;{YYJXQA;ZEvOEQ3k7o4{ z^;|M#1THTzY#Oojmy++fh`TC*?#bEc)B99xrf2!RYNIlJuLa!b^}8mm&aHPpyv7`r z7N*%f(|Yvb#T1C&O&@ulc%pN%kWMjH^KPfcZW5K&|Nh#HIM2_>k7jkYJ=Q^ddn2|r zm5)>6u$`)%>lJO8ZrpRmiCBz$il_U$v6jxHuVp4bADwthbrxqvpV8-2Y)B zw1VSjM?Ua{OpVV?0hGvUuEfxCvu3NZ%W#nvjgy5;FH2N!%=R#(Ljru`54FjiWuoG1 zu7MHv zZ3`=P8h@(zJik(koF(Ek@b+xDzn+>kZulnXFllR$Bxydt*H2pZ$=#6|gEOW;jN{RB znSakE;ddT<9wX0K5|sY)B3+FL;;nZ(sgtk7j@+v(h=dAmCpF;Tz0)K-!d-qX|);gEAus8N-p-!3gDmB?>+$oyb%Omc3Tck`$=kL9}gP4|H2 zFx?2Zw~yY#^`fQ8ujW&FYSn2F=l2O+GU0}skB({YaJEx%YKf_oaqUHLm-$wD>Br|^ zLav57Jj`F|6s3~m>h43vtGtWV6sR{VS&7TU4Ld9JTkR>|-Tg1OpYVKH=w2Zcxbt9~ zYx0?5Z3Ux7(_RcgkE?vdGVo{z}?$n-Oq1QROk9#LmS|kkwcDPrt-X^T6JJHO`?ac? z*6LHwmCoBMIyP9If4kKwCLJ~>IO$NDY3ep5<>07t-TOeoqgJ3#Vh;8-&TdBP2+sso zsTJHaP&hk#N8Q+D4kDt>Z=$q5i>Z61{O=*Gl6d{_W85c-GUD%WQ|!#=$8+Z06)Q!P;uGy~ z435hl9n6;Z=o_0KtIblijyFLniw6aQ;V()YkJaFI=<=wf%JcvENeS7d?pXt%e@GSO z1?s<^-}zez3W_isYbhoU;P)U*hvi@Zhbn~FUKPCfzNBetbhybg{ zzrP0c7RuijFqojcx%IE1@$Zc^xQy=c-=h`$IzF8V3i$r_+~6`y{IX9D%Sm%vrM1T8 z%9-Ay`q6&h?)aZ&Q=grGJvrMm<}Pap^zJTNk5Jb=_Asu+@pk`KduqCw9|Y;Bes#XP zw{0=$xH+>gou#6xd-Z2DTpoclt}a%axGt{IoiQ%vxA7@T_oUoN!uGw<*@d}#KP4li zFC;4`E%Een|Cf_>>xrO$hOh&VFQUBK&$CQ`YHZNK=TiRMb^H5?*JRDL`X=8t#7=NQ z$wT6}g|Ft1#6)UY)N%g~wLFZh6k{$6e-07D7`nBWvO7h>gH!db6JtU)c+>CP++)pp z1*YZyBrC}BD`)Cr^wD%v%=G5)&WOLZ2Wg9rX=u#lcGB^+_45vAu$8U6`&aWm&n^3% zV|6|ykegLbM*5>7pmMenJ8RqA=s|SF#ao}+D90yKM|-?l68k{^C{;*$stz z9EQQa3FYr*@Qy)fOC>__Le$q`*^soRlc0?6gAqK&We#pWS!pbhPVmUHi}({>^xKvq z>Mx+HN5m91&2MQkY8UI~caDamHW%Ot%a>j&@t^OG3qem;_ZAN?e&ZAg)z#vB5b6HL znPMjt?LV~5=RM%z&@6))ER>8xYtp$oSQU$H)%bCFVf75YB6Zvqv$!qhCG1B7DKclH z+wWhwtojb|I6Qe|cksQETU_IH?nn9gf#u+=ko#Qi_zy?0QP-PbN`!vZ2IO+mp%uPQ~sfJzet5$PQs zM0)QD5LAkE1qliQ(tGbER22~EB|w0PNKGKL5Fn789ew<@_dRF6`Ocg<-^@3|Kg!L% zcUkw^Yh7!tYuT9zG^|eT+P<+nAhK&&2wP?!uoZ>f)b*P|sO>z<1^*r#uexUYAs_Y0 zqxh5u8oq<=?N|GdZ3X{6Lh;#jZe7>vWz-(`8P-(j8h-g%Q-m>yZOQmYCdogD@9n^@ z|DgJ@lTz_7IN`!HXUCr{eVtu%&~ZZJ5PZ&jp)a@{vXjL%Xx%Ct=a!s)bnUq?*LY6{ zD70%jvC`N|Gps~AX^#5^A7&v8-G1ZsRfvZw<;(|vAFN6>sqY}FPg^9SZt5LBdG_*q_T2XKkVVphDdmM9q4M68lZy*fpIa&?z(CB;e5Z~?&x zG(tca)eQz;d8Vd?3H>ChiT8HFgOS%JrHk=_2bv|b#EV}YI%YautDHemik&QBrD3r( z!#ZJd7zBjO_?GWzWF`R_58jo38B$W#XqvL$AT`Yvopk3sCTsp!>CUsEtBOeFp_g2$ zaz0`wmC<)@5Y!B}u)S-SA7t_gn`yjDpH?%b!;7o5`BwCf?3bF~moe*q%qPS^#I32+ z_d1{RBqgRBmt^+Ff=M3GI`Uhq@J+I^qiTa!q)pp{cbM8GGsL4q*uK-UNg>HE>;gzr zOw-esrr9LCpnJD$z3u)QRkCWBF~NF|&utJ&Q^n0QX$1ReQ+W8}Hm26U9G48txn}9t zl$Lp^RkJ4jwvkv%;Rv7aW2g7d(JTb_HMdIZL>&j+0`{-$gwL8z^U&}3C`|1@L+NZs@KY=I6IP9`nb;hBs5~F4GTY##4jm?# zoj7(u158rv8nmx7Qbn zYXTIASunxeW8pnqU{^ngv&m#MrEiS9^-SrXHcIHzMNy1bWzJG%p#1zF>78koLG=v} zK5remtJ_?GS}bvXu1ksMpI>ze%!5#r33!xf}fw{R6QsL-kh*DgrVyHsmv1 zr+A(rv4~|U_eDI&w*a=^Jr}uB z+CAN@guLr+l$3uBIN<{;mFAw>F}L-YL>1=EG@@gdkCENgS)Y8&%4Q1+xdAq~zgGp7 zNi=FptN1{bh!5Sr@0=JmHE5pF<_ZOC?K_4x74oDvlO4J`{(408taxKvn_^nzBCq(j z;Rm{MChdgGT1W+^A;tf}Xk)`6gjR39l023m5I%PehqnKuIbuGsv1Ym0V5&j;sDj+x zXOYP4y`U_;)Om&0qayM?bMLV`OAb$BVh*uPri|>g-|MO~Mo-M2=a6FZQ{4!(OsU=9 z%lPtS+>e`7AZ8Vf$fe$;&0`V2KeAl?Ei@GM+HwEuX;!I)6StR=T)|DXtmU7K=GK=p zkaHj6)txc&wb&)|%}f|wnI1^@+t+k?R!ElcKY4ot2CZ~M5kz0|APc!d+Zz1y3eDSH756L!5pYHQ7TEoY&lw8Yy+9Idllg}ZLAgGJf zVRCeTe~W)Hqb#@4v{NM-!s1Zu#%JFrUUBi}HyXxi9vZ%<{i|8rB6n7blrHzQ5=zY< zaPje(ohj6<8QA>HV^p%<44Vo6X3j{jCy%t*G~xGt@|}7vbb6mcOsH4RcYDQOpXYBY z=>MHjLp7it{2#HI5KlHiP9bxE8z*&t0Sb1eUBtW8(cBH=_L`YNhyyzyD$ zdKy~iR67D<6OXcSxQfylko@@K@*i^z@#Mq%fZ2>fPE^0`)1m59(b3h>b3zq9H@Qb+ zB_&F}EuqFbhJ_0sv``^FbX2WeL3==MRsZY>ib-<}5qqv)BEJrD3oq}keLe{Qdm<$T zBgIEhMvdzdk17vBf=4GV?(}QlqWg!%`H-*YL9?rEEu>$xZAnH9bt)vDlhkw6^o=>I zdy+Xx^Xo%$TL71=tg<@$Ar>t`>e&Ir6#$cAH_w)Q&@+RGbd)?y*&TnxUC>cZ;DlJo zwF{RS?*tW($T)R_J^@Ni#~nO=+=SIAB8(;Hs#^>Fnq9*q-${L2u{P<=vz#|*8-d^m z_${6zm*5WD9m$QA?}zgdmSf@~Rag%1F~kZj&q<#uZ20w&azBfFO(C?aNZt5~zkjmB ziS>vEQ$@r40_ezc?X+h*bEVLHE4ga(X>uWlXON}%IkT=wuA>LLDqlK$T_6=|zclK~ z)xj7{?8gWx-_o64+w!$6CfYhh+Ub_(Rk9mqlQr#^-=w{X9J`+AXBq`4oqX25*4V%H z^Wv|Pa3bDdN9U&-n`EyV4YQ99d&$_9!}q1vPCx$**JVe$P5F#@qDiE`@R}|CtwjG< zlRj#4^_Q~qh8-tbppld>8B1Hr*~@W#@FgJ#@7M}OwlDA#+P>X}P0 ze7T5ye+BFER(N^AxJU80NJ}kc7y3%Px3luU!^wtT1aNKKk#5pq$4YzV`Q3q6E_bSP zlxTH!lm#cHlq#3ckKvSG7HICD>~fG@agTn})L3b*3pQ4*9-YrAQl`L(G&5#G)b$(rew=waQcixjFG1t!z2@dga(HRKl0p+CLL7xv&l)_cFWoY{ zgX^p=WRx;^)XgD56yYqA;)x1)afjyyY6 z7VBy{LfM6pW8c+v%t*407+Wh-r(#O-wR5EatXp^JVh=*;R=$kH_)4YnkIJ@lG>8te zG3*KtNOwHEA-{m<8fh}m5?`wCIMwd70<_NLmohh}a-t_T;V&Y>hj3ha@^)tPsh(wh zZ>M$p;3aey@@JNQ;cS`OC?X06=bFG_Mx!E$X4q3%gu*t4SExFC2F9>8^){?U`d zb&r9qqGSh)l%;1V@q%abx}B9-MD;Sxm(EvaL0sY3L$YV$C|_5eN8&6rh3SIH(|tBe zgCy)OdRx7zvisPT{`jf6g<=xh#9l*G@=UqUay3rzKIX`~bE$sZ1<~6h1)`R#W zTm6gNqa%T;b2UOZ?d-tYI$=izee#3HnBNl$FfpHYjMpWiE35RyX?t^(L&9sT+iv2L z^Ts>}e@+T}s~p#(-9itc-2_QlomJ8kH+d+pmI1}8Cq+A>{#1|XKb&>G&rOUO8JC=z z_HR{Iix(%@#53%E8Ol(XHY;tD*k5T4-WS4u3YoZoS$`k7GS(?v9A~3_!`5I>Sbc1W zlc61&ej&-m*o`RwSMhUSiEQ5N>iUL|8*5pp=v30Mm$Wq!sei&PFK}MImM|&HI2W}R zc0_Ooy&M^(j~H~&5e;mYw!|>hPLv6=KP_rgJp)8N_94k|zhF+{&bsyNi^H1BQ8;_- zdh(nN-`o_fY_yW?v$0AGe~)Rc`^_;;LN#BaCtq`a@cYN9W-?h_F}q#5br>+p=o#XI zlLIeSjuCaMzs=}R_R zh7J~9D5qgSRTUtvI`|DF^0AftEcEFq`eti(7{RrL>m)fu80&iX9Gl~9RrYtHA<34Y z%gYNkGK_^ksNh1}mqzZCvp{O_v??GBBxOTtXVoU{IkFYAhmb)$|N1yrv^I*ay|5dFcAa$(kp)7!&JBKd_E@{7UlFr^LVG%kux+jmrjwB4l9hN;)@(;Q>fD?a+(volseaOZH6`sj-gJ3Sq2ypRk{ z#GD!5#C%zMd=RwlpIByDqTsEX>bYKYg7;A^Gq~^2u&t$7sa2DR|0x8{z<4>m4>`9_ zuA21M7hvB~TNgcHb?RSi9n~X(Iwhz%A`l%n;ZnooWHZig(gaJ-PP3xy&;T$@N~NdJ zY;)><3(S!)dxJM7 zkn1$0>@nlo^Pc*|6M&XWePykaCImE^)Sc5K*g?^se7YPyr!m-fL=uG3r;H^$4A*BC z5_FkO+!P6065hLqNRHv`5tfNOUZqm{^o3oki&a0dvl3QD40Z^^;Uef(;z!oU&Q98{ zg*$RHxIs$+`?X^)3*;tSVfE9I-o=P3>SuP{iXaobgG-+0p5pz;aYBitVAxkp$HX&L zbKcI%+r6iMLxrpde_3W%d`LKwS4yd)1G{0;gkV>JPCHw5eQz?!`(;uxsiHZmz^9AD zcCy*EysYpG*D`JzrD#YDFJnA}_%O~ehUR3bL?;fH=8e^kln`D@n9n}%GveNlwR(4@j=~#r&wF zg0A+1JQABl`O9gocD=d7qvON`GgHbN_r0_KrjpOo={;__mhzH@*-+t>9^e7|9Wvbu z*@PK2b)C=)xN+I+Hmmk#fF)oa^~AjkuBBqBw_-P?jhfo2zrITS^-#cU$D6C3-=-%=b3F=M;PLd@juej#Rh7h-Y-R-6M=-P`=I3nhW`e~nez z#RIbHP7p|$A8`NucVTH?n>JyFP4xtl^c^DYLAn5y;0bkYN362anmPpxfd9d(JFn7w|L>uhv=P6CJFfTllEU&Le*OKKlE;4!tbHC} z;&*GWn5F*xNZt(=Fk@GRe+;5!DF`m!*|311U%L{Pmh)8)oWNI*%kby*ai!EP5je#1 zX9M^xeof_w;GgMhfBC;U5wIt&n+qC$rq^Sp0FTwJ_`TK8<{y+<|DPRabVC?8v;LgD zsUQVipLR@$x>9W*&#lv60Tsw{^Yg=1P8b?ufd4b-!mo(T|F?$k z8pDF($VyOZ(+fCX&KOhO%n!^!LO@I@CZVC>4y&hpKB#0Isq?Udt$k*7Xpg$sKS@6G z%g+6<{O3XEW>-)EH4Zpdf8>E~0c*4R`uY++>pvHYYy^4(W4JsR|l@!{(Ch@KpaFZx2(eslomCttDw4+QcPWBc78I}14h3B zP+aVoB2ZM*y6pC|$L~3F2Lanxbd3EbMkb5v)Dny!G7ZmNW#ltP|o@ zHiKViT$0H|)_r^5NtgDEsp;U`_>lDHXtWL^KyQLihfmVbo7>vwrxp@u6^2B6J3C#9 zu|v5QO?&GPTekoV%=75OtK$48nPJox*(dIO1?6EZn5}*#P7n01ViP$R1%YjyyjY4u z>3onSZ?_p#SWj*$z}J3QRiIu4aYdM~{K-(Fnt$fS*)SQxVuSx}63{=btqRD>Vz|{3o>Ci5qpbkn=9(Ybra5gU^1|%_Kc1gJ zQIFKRSyexR=%<~#0yG}~74TV6gSOnm0Sdl)rS6LZ+hw5MXFy1^IGA@bHaO4P&pSs2 zV8FzJ2=ihNKmz{7K8+C2s_`9~WONgoFCqnXX*|b{=7KT;m2vPIAW* zIvnsRM+E_qlzXe|4k-PekfM=V3T2`~xc{7Omf*o~hLf%ImKd0voJ-7_dDxtAs4(3z z!KKtx%caXP5y9)$$T=B}=u^cR0bEIT58H=wH78wKk&=yoPTe|(<%!)Is{AuS|;%;B6+?pSt$FfB|ykgK8|0=lHyAvcBh4tN_&kp5~%k)v$ zt8I;KV__}HfH`o1hO|vcQ0glDpua(Qsc^bCm6mvR?XrTmzKs}9_?CW+v$?zW6WSYl zwH^+i`>)lGe+dz#C^o0zi)FL!C;fr|9-sLenHLAyA9XUa$HG(2>8Ka2kq|o2*2s84 zvo&=-mCU`@Y(OZLiQ{4EQ&;`V^!GK1A5*24G+faR)wQ$Jq6!-+*7~6F__W-wm}_);yIadxgiZ3B zGTz^Bnvpvc#1F<)(VGuB9(0%mVr$SPX6}^d8*m-Ag9Yp=GAs{Id8zxSvBF7ezWg1`WF#uA3uAwt{*pf8Ohl>wTO zJB1*&v$!;z&xqin)1#7qZ+ir$JYm`b%{0b3V|f@6i;FVjJY%9M?nOf9gV@O9n-6~E z0Pehc4-jWg4NIAs1@-GE9WJK#))`dVIwBclxF3C3FcIi@Fj6kR(PWL}n8p!sV}n9e z6@T9_S;BYQxtd&uEeaRWd^{5ZD>SZ`sPKr8VJ#FW4p4CWZtar?aRU?YIr`^DQa%{Y zMozH!q&_F*`m-aDkXEZ)R#r9vrN{R}ys@a_YH%&o5)RKO}T>&Y_gxegy6W+c545IsAA3Hv&Q)^-Z*z;PRp=W zW%>ovv$MeE%MN7{F>qNj@4`ZZFzw5V=ps1`q`wiGpy}yZWvFX%Fgzuld$=b_)&3` z(F})20Sc;G0j&$PNz>&#u=wV40DWyaE5fn)2hX0iv3tM5iPW>ypkdhGVt(S7VB^rL&SB%|t0N_E zsjc6=1paCZrgvNjgPQTa*62&UtuWV{!Z}$n8lW&lXSx2fQ@8@q4=Xl7gYN(W4Pb*e zF3d%7zjYYM2xWJ5n~l?DId7tguoDQqe*(h%pe3XyGgZlL?prA!)~jpM-kl1{%dODx zH2w$3i=?R~65YqvKZ!WL&8|Ro)vudB1hkCH;Kq({G)Z$mgaC=deEvQAB%+e8E|ig5 z)fuk_FpBj2fUioCn&Mh;Jtv*Vr;X`8AUFMni8>h5`z-%D<~p$B^i52XfsPt6sCHaN zP|0UJfygchf4*YI2R|Zs_Z9R&&Kp`StzGgG?BvJ$f9BJAFud9WJF>kF+CzMfcN#1E zyn-Z}2Ks6b=qm~9zDss}AD>%VSs8+qxS4ieV4M7y4l4#W zeLFEp%qE7;ry?a-7zrAnAW~8|O*uVQzu%K=SWF8SF0&oZtNmyVI7LpNaZ^Y%AoZSJ zNmYzwqZ&!9{6W+lcHzE0A9hJc+zQVHF{;?n8-Pf0ZVH7f)uiGos_4TW3%M0?z<0~|$&eH4A(!w810csk@_raWe zZ~HOYd0M65UhDx%!3pHvM}{0rlJY3a)y%H*Glec@Zm)y8shy(J5fjk^v|0VOINznU zc|bs33~thBK(TqYDfz>P3&iT8hp8c|?{9GV3kQjj@y`z*t0RE>I*hog!N;@)hl8dE zj)`SQ1o{1rk`1(=oR+}D7^$$)tX4&N52{JV`HZqSKk7GPxvS7lJeMQ-XF)#>A;3%P zW&zVhGz|D(>h&nFfzBu>ZnV_fdmT)p&LQn!I5cm;12kqc#PajxAnP6689>?w?lY^Y zJJO=!QL&#o8{FigE>dr({xistCSWHkc>@P-5Ue%&VsXhTw0cbZHcbpN+s#NFUiTlL zPE>Qs1qPgE%euw73OUMu@^1qt3siAXZ~IyXJ>TflgtLpFr=9`bNsF)T_zQk8!*z*43LK4$dQf z&3aFwPNc~mIK+-1ljrpPHm3PQjqP`X?)~khGO?CyuRd)KIJn{g1mQ;{#d;D@a62Yi zH^3+ogpOjV=sdRten#W6yLs_ejJ?( zdIrTlmUn2R{AIh}#Nd*joX|@{AOG)O3v9m4shwGWlQU{td8l;7$S@~XW_rCLP5EMR zt?XOiEEfl}>rn}ZKQqMfb%VY*KjZ@4BNJ|o9J?c9rcum@JVi9?zs>BK!}^u#fHonV z84!RFyv9LH{sH4p+kH6(2$L!2N=sU*N*xQu0Ah2EEg3-9HXqHy+zw(a{;73<=9s&r z@jcb#l0nwv+3mF%$9mv})LJIo)p`DMA%*t(oxqGou8 zn3s!Tk4MwZGJz|uFz4P6;p^!4sl)@nYX<2q|NK?(dA?8m6119WEg{f3UZa7^g#=(+ zztd^H0>E)keC^a>$nf!;3bIX`d$YhZ2hLFKxyol0R9tALr9ZNYhD=Y{gq{2z0g`2Y zmDZgqY~40^e769u(-iw)rT#0klhok<9>#9EU!QI-m+S}%f@PC zN28pOm~Qx9$kf5pp?6e#c+q|Y%T<0jgt7Xz&sY1=#AhB(H%JtNgvuI>Jy|ytJwdd` zLANfd8Wj;!$B@~kSV(tW(SoNM{(An@btmX+lGX9wYF@@}7 zkGy}NN%gYQFjl?Ee+T(%Nt|sVcerxlZuXc&i#91n-iDm9P8_8o;v#8H*Wz;ci^wFH zx>L5Z!ey;x_U`0!7F*43&nV?VW5bh-hjXP}{pZ~4$SPtB3f2-6cHqM?}LtTST0R)N5 zEiJX2zI&J6FX-B5WiB&58^3oiE)X(8RXhuG^>*Csn~qk0ITZ6!=`4!DSE$OrC2X*Z z$-r9Qdto?^n2?0|V(*2sv5RWubRaIqm!eGfPQ&(_O9s(xtu^9#{%Q%{ zyvU4pY(son9+H00HB6`Y^=ye)osh)IJWb3Xh#?)g_HVnP6*(I-r@OXMk&$21cfZYm z>5jMULbbmr3-9(gVSbU2NyF>!=MC5P@6RrXV=M7(xVCl3OXOOgRF(Zp@=qyO;WU;L}0K`P?eA^z~YK*4` zsQa~lTRU0zV0dtw^{KPH4B979mR?CFDJsopCuQ}UFHw_oL7v`+;*n2PJ}^(5N6MK} z>`=+Y9ju-`5}Nu}z9qP7FtCiv#^2PQjK~QxZQtT#ywh1!aIou5(_hcOey(m0J`X&M z2QPj*PY0Z%_@aYz*}5nS&1oEh3Fk&M<(fJnrL~H_HjQUQ;sO+6CxVH(i=omQ;MG^N zuW?+Rh~-v^ZL>`&hKr#qu8zEvFXrh9D@6UQs4E(PmiV6kR`|q#f#qU$28SR%W9+5E zUS*R^5(o=D`R!aE3~*ER5mTjv2Ut>4_1ef;?T=ir7AJrN=u~q7q zmZ>BJ>lf{W;h4+MX#NFv8e>M|Tjm+7`!$21jb>YG1EbiftAC*#CK75U-JHH4@|D!Q z>sK|y!~&Jw3M+6fQ2lK`UF&o+1$F&_57)s2Kuz6mkLs6@kwFNT(qC#xKJ)d-nZt0B-HZmF8-af_9daPfV?U&2(5qF2PS3rte49Q zd{3*VMN20Zy3~bFTCthVO~qH!p~{^;jR+ihRrJsjnXJmBZO|N3kcP@{mP4uuH%YtH zTK|Qn_(cLOr7lA9Fcj2!l9N_4J9qFIRx-r|&-b)8&$)>*cwI!FWMYu*5CDJZ z;~RbO!{J|UIG|9Kn=o+4)xH3gBp&7r6I-BGXKl)>`9VWueL3rik$#=pl9ZnT>vRt zQ9D&GW13{^9%hQ$3|vc;h5PSSzK8@y8v<4Wpnk7WHOWaPW1|8<$@kgMB%D)bR}83t6P z(?v-Evp6C^SPZES#7AA5{(m>6GVPN=S7g*j-8LE3$XY;ui2;!B1=Fm{a%_*pfZqrM zZE)>pz6{152kEF43Y5xyKwjsGUU>H~UbqriB(=SkLpd5-fYG$Z{6QLNScVEwljK7_ z1@;ob+{eo-yUvbaM{ip7RDe*$C}?hj>*PtP0M;&#{Z%gG>IMKdZ*@yzM!`Y;WGk<; zqJOhKUe#5 zg`u!>SyN^PRemH-q5(#ZVgg!H!d4OpKD^%;CyT3^fFDlntnCHI!gTol z%Ygx?zyYMgTDh0n@#d#ecIHcYc)=Xn9MHhw#17}j8w1A{k(h`@bOCUFVhdQ&?veMp z)vi!GW{O+)H5UQQ9R^r1C&)56fD=)m0Qg%Yr4~xn_6vQfYa1X~(w!jbw4#CrXxS9d z8|P=ls*)?+H!1?U^~{6ByD^v-BL=Our$03 zJTqsvp;s^HjbB`e)oHckj(`%+(`m5BKy&5~5b`jvZK?&`bfV}e}E z@ex~1^T~s5It$2w`OIFeC{EdxsdPHwn&uV2p+{|QK3OU7VAY+|fXYMxO2M8PY=Iuz z^{CH&)oDyMz%A*L@>;<)-mH_EYy&{<44QYl&ozi;S7rg0y5rb-FJh_-pa5P@b^d;= z0J~>5Ew&pb?!-J4cEQIsN&<|*<#~8^i8_is%UPKSMuyj*q@sHYi8a7A{^hL`07m46 zm8FIv0c*o#8IZFnKP9G9+A3nIF2dhoC$-M~jYlV?z!fOW5LJ{5HIf;eLheG6!|T{G zXdmo-s;1=~${AW^(y+KLARxfe@rpqNFzqs8)FD@f%(SkeB*myrN{Zer=DsNkt^ogi zbm*Km1Jhc2<8&~)QSr%skEMjY)dZ~~wB*!qV#~1;OL3`|(1QUS83SU|U%#h}+2HUmH?i@7NWu87ZOS2pHdj&P& z)jA#`wN#kuz$E;t(T!~-gM-(EpQPXcsA_3UledPidoGX9nqbMyueL=WZW{NIGJ4gY z&|gWz6oLp^qui3mOfD)qD*d|x;Aj5X!%UW0s!z8AAXMy{c?j~fy-m~*lNZCTFTePIA{ITp zO=%RVB8oxr6Q{F;kB{YgDS*$2W$9k39bxbE6Q|0u;8cvH>RetMrxB}us zB_NBWE|qO*IQ9EI^!Cn;7@Dhq!rK$Q&B2&yT%EI4WOB{i_K2OSi2kMNmyynQ(=2u_ z-=r-B?V&H4vSuE*cklivAe3I{nZdx9IgyU0joA@J#>mJ|#GX*c{DI2dT1Z;tmKHI5 z!0O`;Ouk(!;CqM!WWD2Rk*?C)MpLOQsNY+zSFil5)7(vhIBA!dVir=C)~F=0U#k0W zben5l=zf{z7Pt9RFo>5t-YWK1X*%Pr<*4SZOG6ZLrE1IT_=0(@O!@zWl$a$cDx;wL zxpBHWgi*}?ih=DYx1C_vp<~_bX8?tAbZzQ&^QG>z;Hs3z+DMwsZ43J0wKlt<00v3K zLpntuIY?qB^bGI0;~`i3@7`~13C<2KdBH56#(alK@^UWQYF(AJ2uBbD?c2TAm+5Jq z^hPdJ=I_BWInE~>(DTKgRy%rOQf6;Vo_#rYg*B4{GOiAJ>pn@FcE=c27NFb~=Ge6F zN%X3_Cw~J($m2X|fw zQjQg1wS+zNl0SCC%=#1`8hkg9 z=Oi=1v(Hx~%{dh$pKN^?g^q|!+J-CAr8clvAj_Msy+vXs4Y>Et=b{zlr1 zcjzUb94IwwIYitxho~6bi%khpY`N?GE@nluz0WEYs~b&sQ5|{1xA>gwNoAzxW^!ho z=?%M)0vD1^PqOu`bWzo|UZ%6Wf*Q_g-&K*%?;t4&*@`KpPzT-!&EAxO7q56ZHy08J zO>lyLf2G~~6bZ?o`<4PlGR9XhR*ZtA|@$rj#!84_bpW`=y#>uTL7&bhZV ze?;T3ZurS?nz6TXXpd&6r$GB=7k)Zcxlu!39cGW=ZxVlDd}*h;hBY$0jmrCn_f4h zqNg@uRy2^ho09@7`y-?*v&YD=uyo>+%bG64Bz}m&xNJ9w?|nG`+umt`-!p#+wa`L* wSj`(`ix2WZmK*8l(j literal 0 HcmV?d00001 diff --git a/docs/subscribe/web.md b/docs/subscribe/web.md index 74763b8..5c2672f 100644 --- a/docs/subscribe/web.md +++ b/docs/subscribe/web.md @@ -18,3 +18,10 @@ is to pin the tab so that it's always open, but sort of out of the way: ![pinned](../static/img/web-pin.png){ width=500 }