From 147362cb403271b92f10cc2fe75be3ffba9ff6fb Mon Sep 17 00:00:00 2001 From: oasisk Date: Thu, 2 Feb 2023 09:03:11 +0530 Subject: [PATCH] zinc-observe initial commit --- Cargo.lock | 5780 ++ Cargo.toml | 107 + README.md | 62 +- build.rs | 87 + coverage.sh | 38 + deploy/build/Dockerfile | 31 + deploy/build/Dockerfile-tag.aarch64 | 36 + deploy/build/Dockerfile-tag.amd64 | 32 + deploy/build/Dockerfile.aarch64 | 36 + deploy/build/buildspec-arm.yml | 59 + deploy/build/buildspec-tag-amd64.yml | 22 + deploy/build/buildspec-tag-arm64.yml | 34 + deploy/build/buildspec-test.yml | 21 + deploy/build/buildspec.yml | 24 + examples/actix-web.rs | 37 + examples/datafusion.rs | 50 + examples/env_config.rs | 35 + examples/etcd.rs | 93 + examples/event_client.rs | 48 + examples/generate_openapi.rs | 22 + examples/json.rs | 20 + examples/lock_file.rs | 102 + examples/memchr.rs | 24 + examples/prometheus.rs | 97 + examples/search_client.rs | 68 + examples/simd-json.rs | 26 + examples/simple_udf_sql.rs | 152 + examples/sqlparser.rs | 36 + examples/threads.rs | 29 + examples/time.rs | 80 + examples/tracing.rs | 73 + examples/transform.rs | 126 + proto/cluster/common.proto | 30 + proto/cluster/event.proto | 25 + proto/cluster/search.proto | 78 + proto/gogoproto/gogo.proto | 144 + proto/googleapis/google/api/annotations.proto | 31 + proto/googleapis/google/api/client.proto | 99 + .../google/api/field_behavior.proto | 84 + proto/googleapis/google/api/http.proto | 375 + proto/googleapis/google/api/resource.proto | 299 + .../googleapis/google/pubsub/v1/pubsub.proto | 1316 + .../googleapis/google/pubsub/v1/schema.proto | 289 + proto/prometheus/proto_model.proto | 81 + proto/prometheus/remote.proto | 88 + proto/prometheus/types.proto | 186 + src/.DS_Store | Bin 0 -> 6148 bytes src/common/auth.rs | 26 + src/common/file.rs | 35 + src/common/http.rs | 25 + src/common/json.rs | 151 + src/common/mod.rs | 9 + src/common/notification.rs | 15 + src/common/str.rs | 23 + src/common/stream.rs | 14 + src/common/time.rs | 74 + src/common/utils.rs | 149 + src/handler/grpc/auth/mod.rs | 37 + src/handler/grpc/mod.rs | 81 + src/handler/grpc/request/event.rs | 44 + src/handler/grpc/request/mod.rs | 25 + src/handler/grpc/request/search.rs | 34 + src/handler/grpc/request/traces.rs | 41 + src/handler/http/auth/mod.rs | 85 + src/handler/http/mod.rs | 4 + src/handler/http/request/alerts/mod.rs | 36 + src/handler/http/request/dashboards/mod.rs | 30 + .../http/request/document/data_ingest.rs | 48 + src/handler/http/request/document/mod.rs | 1 + src/handler/http/request/functions/mod.rs | 1 + src/handler/http/request/functions/udf.rs | 47 + src/handler/http/request/health/mod.rs | 51 + src/handler/http/request/mod.rs | 11 + src/handler/http/request/organization/mod.rs | 85 + src/handler/http/request/prom/mod.rs | 32 + src/handler/http/request/search/mod.rs | 173 + src/handler/http/request/stream/mod.rs | 164 + src/handler/http/request/traces/mod.rs | 30 + src/handler/http/request/users/mod.rs | 68 + src/handler/http/router/mod.rs | 113 + src/handler/http/router/ui.rs | 38 + src/handler/mod.rs | 2 + src/infra/cache/file_data.rs | 124 + src/infra/cache/file_list.rs | 524 + src/infra/cache/mod.rs | 4 + src/infra/cache/stats.rs | 90 + src/infra/cache/tmpfs.rs | 76 + src/infra/cluster.rs | 525 + src/infra/config.rs | 364 + src/infra/db/etcd.rs | 556 + src/infra/db/mod.rs | 99 + src/infra/db/sled.rs | 288 + src/infra/errors.rs | 31 + src/infra/file_lock.rs | 274 + src/infra/ider.rs | 21 + src/infra/mod.rs | 8 + src/infra/storage/local.rs | 56 + src/infra/storage/mod.rs | 66 + src/infra/storage/s3.rs | 151 + src/job/alert_manager.rs | 20 + src/job/compact.rs | 24 + src/job/file_list.rs | 103 + src/job/files.rs | 232 + src/job/mod.rs | 72 + src/job/prom.rs | 32 + src/lib.rs | 9 + src/main.rs | 180 + src/meta/alert.rs | 196 + src/meta/common.rs | 67 + src/meta/dashboards.rs | 12 + src/meta/dialect.rs | 40 + src/meta/http.rs | 57 + src/meta/ingestion.rs | 51 + src/meta/mod.rs | 58 + src/meta/prom.rs | 44 + src/meta/search.rs | 146 + src/meta/service.rs | 3 + src/meta/sql.rs | 876 + src/meta/stream.rs | 124 + src/meta/traces.rs | 61 + src/meta/transform.rs | 62 + src/meta/user.rs | 34 + src/service/alert_manager.rs | 138 + src/service/alerts.rs | 170 + src/service/compact/file_list.rs | 146 + src/service/compact/merge.rs | 378 + src/service/compact/mod.rs | 63 + src/service/dashboards.rs | 72 + src/service/db/alerts.rs | 128 + src/service/db/compact.rs | 2 + src/service/db/compact/file_list.rs | 17 + src/service/db/compact/files.rs | 44 + src/service/db/dashboard.rs | 44 + src/service/db/file_list/broadcast.rs | 92 + src/service/db/file_list/local.rs | 67 + src/service/db/file_list/mod.rs | 80 + src/service/db/file_list/remote.rs | 90 + src/service/db/mod.rs | 109 + src/service/db/schema.rs | 304 + src/service/db/transform.rs | 81 + src/service/db/triggers.rs | 84 + src/service/db/udf.rs | 64 + src/service/db/user.rs | 99 + src/service/file_list.rs | 80 + src/service/logs/bulk.rs | 290 + src/service/logs/json.rs | 243 + src/service/logs/mod.rs | 403 + src/service/logs/multi.rs | 243 + src/service/metrics/mod.rs | 336 + src/service/mod.rs | 16 + src/service/router/mod.rs | 78 + src/service/schema.rs | 357 + src/service/search.rs | 538 + src/service/search/cache.rs | 99 + src/service/search/datafusion/exec.rs | 717 + src/service/search/datafusion/match_udf.rs | 144 + src/service/search/datafusion/mod.rs | 6 + src/service/search/datafusion/regexp_udf.rs | 250 + .../search/datafusion/storage/file_list.rs | 44 + .../search/datafusion/storage/memory.rs | 182 + src/service/search/datafusion/storage/mod.rs | 3 + .../search/datafusion/storage/tmpfs.rs | 189 + .../search/datafusion/time_range_udf.rs | 149 + .../search/datafusion/transform_udf.rs | 275 + src/service/search/exec.rs | 209 + src/service/search/sql.rs | 600 + src/service/search/storage.rs | 214 + src/service/stream.rs | 219 + src/service/traces/metadata.rs | 81 + src/service/traces/mod.rs | 327 + src/service/traces/otlp_http.rs | 337 + src/service/transform.rs | 160 + src/service/triggers.rs | 53 + src/service/users.rs | 73 + tests/input.json | 4335 ++ tests/integration_test.rs | 542 + tests/trace_input.json | 1 + web/.eslintrc.cjs | 25 + web/.gitignore | 28 + web/.prettierrc.json | 1 + web/README.md | 68 + web/cypress.config.ts | 8 + web/cypress/e2e/tsconfig.json | 10 + web/env.d.ts | 1 + web/eslint.sh | 9 + web/index.html | 20 + web/package-lock.json | 55774 ++++++++++++++++ web/package.json | 83 + web/public/favicon.ico | Bin 0 -> 15086 bytes web/quasar.conf.js | 16 + web/src/App.vue | 19 + web/src/assets/base.css | 74 + web/src/assets/images/common/add_icon.svg | 6 + web/src/assets/images/common/app_logo.png | Bin 0 -> 6334 bytes .../images/common/case_insensitive_icon.svg | 1 + .../assets/images/common/clipboard_icon.svg | 20 + web/src/assets/images/common/close_icon.svg | 6 + .../images/common/collapse_sidebar_icon.svg | 7 + web/src/assets/images/common/copy_icon.svg | 4 + web/src/assets/images/common/delete_icon.svg | 7 + .../images/common/expand_sidebar_icon.svg | 6 + .../images/common/input_search_icon.svg | 7 + .../images/common/language_menu_arrow.svg | 4 + web/src/assets/images/common/list_icon.svg | 8 + web/src/assets/images/common/menu_icon.svg | 4 + web/src/assets/images/common/mini_logo.svg | 5 + .../images/common/pointer-to-demo-2.svg | 4 + .../assets/images/common/pointer-to-demo.svg | 4 + web/src/assets/images/common/profile.svg | 1 + web/src/assets/images/common/refresh_icon.png | Bin 0 -> 1305 bytes web/src/assets/images/common/remove_icon.svg | 4 + web/src/assets/images/common/search_icon.svg | 5 + .../assets/images/common/settings_icon.svg | 1 + web/src/assets/images/common/slack.svg | 1 + web/src/assets/images/common/time_icon.png | Bin 0 -> 1346 bytes .../assets/images/common/user_down_icon.svg | 4 + .../assets/images/common/user_menu_arrow.svg | 9 + web/src/assets/images/common/view_icon.svg | 5 + .../images/ingestion/fluentbit_icon.png | Bin 0 -> 3264 bytes .../assets/images/ingestion/fluentd_icon.svg | 53 + .../images/ingestion/kubernetes_icon.svg | 4 + .../assets/images/ingestion/vector_icon.png | Bin 0 -> 4069 bytes .../assets/images/language_flags/en-gb.svg | 15 + .../assets/images/language_flags/tr-turk.svg | 12 + .../assets/images/language_flags/zh-cn.svg | 12 + web/src/assets/images/left_nav/about_icon.svg | 6 + web/src/assets/images/left_nav/dashb2.svg | 56 + web/src/assets/images/left_nav/index_icon.svg | 6 + .../assets/images/left_nav/ingestion_icon.svg | 3 + .../images/left_nav/organization_icon.svg | 6 + .../assets/images/left_nav/search_icon.svg | 6 + .../assets/images/left_nav/ticket_icon.svg | 6 + web/src/assets/images/left_nav/user_icon.svg | 6 + .../assets/images/left_nav/warning_icon.svg | 1 + web/src/assets/logo-full.svg | 1 + web/src/assets/logo.jpeg | Bin 0 -> 2568 bytes web/src/assets/main.css | 35 + web/src/aws-exports.ts | 24 + web/src/components/ConfirmDialog.vue | 60 + web/src/components/HighLight.vue | 129 + web/src/components/MenuLink.vue | 105 + web/src/components/alerts/add.vue | 411 + .../dashboards/AddUpdateDashboards.vue | 153 + web/src/components/ingestion/Curl.vue | 87 + web/src/components/ingestion/FluentBit.vue | 95 + web/src/components/ingestion/Fluentd.vue | 102 + web/src/components/ingestion/Vector.vue | 94 + web/src/components/jstransform/add.vue | 321 + web/src/components/logBarChart.vue | 119 + web/src/components/log_index/schema.vue | 330 + web/src/components/shared/grid/NoData.vue | 26 + web/src/components/shared/grid/Pagination.vue | 242 + web/src/components/shared/grid/Table.vue | 36 + web/src/components/shared/plotly/barchart.vue | 138 + .../shared/plotly/barchartMetrics.vue | 133 + .../components/shared/plotly/linechart.vue | 121 + .../shared/plotly/panelcontainer.vue | 252 + .../components/shared/plotly/panelheader.vue | 95 + .../components/shared/plotly/tablechart.vue | 163 + .../components/tickets/AddUpdateTicket.vue | 343 + .../components/tickets/TicketAttachments.vue | 62 + web/src/components/users/UpdateRole.vue | 213 + web/src/composables/useLogs.ts | 119 + web/src/constants/config.ts | 9 + web/src/constants/key.ts | 9 + web/src/layouts/MainLayout.vue | 804 + web/src/locales/index.ts | 45 + web/src/locales/languages/en.json | 265 + web/src/locales/languages/tr.json | 265 + web/src/locales/languages/zh.json | 265 + web/src/main.ts | 54 + web/src/plugins/index.ts | 6 + web/src/plugins/logs/DateTime.vue | 539 + web/src/plugins/logs/DetailTable.vue | 334 + web/src/plugins/logs/Index.vue | 1033 + web/src/plugins/logs/IndexList.vue | 355 + web/src/plugins/logs/QueryEditor.vue | 316 + web/src/plugins/logs/RefreshInterval.vue | 51 + web/src/plugins/logs/SearchBar.vue | 385 + web/src/plugins/logs/SearchResult.vue | 395 + web/src/plugins/logs/SyntaxGuide.vue | 156 + web/src/router/index.ts | 250 + web/src/services/alerts.ts | 27 + web/src/services/attachments.ts | 36 + web/src/services/auth.ts | 13 + web/src/services/billings.ts | 11 + web/src/services/dashboards.ts | 25 + web/src/services/http.ts | 57 + web/src/services/httpsearch.ts | 85 + web/src/services/index.ts | 36 + web/src/services/jstransform.ts | 30 + web/src/services/nativequery.ts | 9 + web/src/services/organizations.ts | 54 + web/src/services/search.ts | 10 + web/src/services/segment_analytics.ts | 40 + web/src/services/tickets.ts | 27 + web/src/services/users.ts | 42 + web/src/stores/index.ts | 128 + web/src/styles/app.scss | 41 + web/src/styles/quasar-overrides.scss | 121 + web/src/styles/quasar-variables.sass | 26 + web/src/test/unit/helpers/index.ts | 1 + .../unit/helpers/install-quasar-plugin.ts | 21 + .../test/unit/helpers/layout-injections.ts | 17 + web/src/test/unit/views/About.spec.ts | 23 + web/src/utils/common.ts | 65 + web/src/utils/commons.ts | 235 + web/src/utils/cookies.ts | 20 + web/src/utils/json.ts | 79 + web/src/utils/zincutils.ts | 226 + web/src/views/About.vue | 77 + web/src/views/Alerts.vue | 335 + web/src/views/Dashboard.vue | 438 + web/src/views/DetailTable.vue | 128 + web/src/views/EditPanel.vue | 488 + web/src/views/Error404.vue | 29 + web/src/views/HomeView.vue | 58 + web/src/views/Ingestion.vue | 304 + web/src/views/JSTransform.vue | 393 + web/src/views/LogIndex.vue | 367 + web/src/views/Login.vue | 211 + web/src/views/LoginCallback.vue | 202 + web/src/views/Logs.vue | 5 + web/src/views/MemberSubscription.vue | 68 + web/src/views/Search.vue | 6 + web/src/views/TicketsView.vue | 231 + web/src/views/User.vue | 571 + web/src/views/ViewDashboard.vue | 580 + web/tsconfig.app.json | 12 + web/tsconfig.config.json | 22 + web/tsconfig.json | 14 + web/tsconfig.node.json | 8 + web/tsconfig.vitest.json | 10 + web/vite.config.ts | 64 + 334 files changed, 104360 insertions(+), 1 deletion(-) create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 build.rs create mode 100755 coverage.sh create mode 100644 deploy/build/Dockerfile create mode 100644 deploy/build/Dockerfile-tag.aarch64 create mode 100644 deploy/build/Dockerfile-tag.amd64 create mode 100644 deploy/build/Dockerfile.aarch64 create mode 100644 deploy/build/buildspec-arm.yml create mode 100644 deploy/build/buildspec-tag-amd64.yml create mode 100644 deploy/build/buildspec-tag-arm64.yml create mode 100644 deploy/build/buildspec-test.yml create mode 100644 deploy/build/buildspec.yml create mode 100644 examples/actix-web.rs create mode 100644 examples/datafusion.rs create mode 100644 examples/env_config.rs create mode 100644 examples/etcd.rs create mode 100644 examples/event_client.rs create mode 100644 examples/generate_openapi.rs create mode 100644 examples/json.rs create mode 100644 examples/lock_file.rs create mode 100644 examples/memchr.rs create mode 100644 examples/prometheus.rs create mode 100644 examples/search_client.rs create mode 100644 examples/simd-json.rs create mode 100644 examples/simple_udf_sql.rs create mode 100644 examples/sqlparser.rs create mode 100644 examples/threads.rs create mode 100644 examples/time.rs create mode 100644 examples/tracing.rs create mode 100644 examples/transform.rs create mode 100644 proto/cluster/common.proto create mode 100644 proto/cluster/event.proto create mode 100644 proto/cluster/search.proto create mode 100644 proto/gogoproto/gogo.proto create mode 100644 proto/googleapis/google/api/annotations.proto create mode 100644 proto/googleapis/google/api/client.proto create mode 100644 proto/googleapis/google/api/field_behavior.proto create mode 100644 proto/googleapis/google/api/http.proto create mode 100644 proto/googleapis/google/api/resource.proto create mode 100644 proto/googleapis/google/pubsub/v1/pubsub.proto create mode 100644 proto/googleapis/google/pubsub/v1/schema.proto create mode 100644 proto/prometheus/proto_model.proto create mode 100644 proto/prometheus/remote.proto create mode 100644 proto/prometheus/types.proto create mode 100644 src/.DS_Store create mode 100644 src/common/auth.rs create mode 100644 src/common/file.rs create mode 100644 src/common/http.rs create mode 100644 src/common/json.rs create mode 100644 src/common/mod.rs create mode 100644 src/common/notification.rs create mode 100644 src/common/str.rs create mode 100644 src/common/stream.rs create mode 100644 src/common/time.rs create mode 100644 src/common/utils.rs create mode 100644 src/handler/grpc/auth/mod.rs create mode 100644 src/handler/grpc/mod.rs create mode 100644 src/handler/grpc/request/event.rs create mode 100644 src/handler/grpc/request/mod.rs create mode 100644 src/handler/grpc/request/search.rs create mode 100644 src/handler/grpc/request/traces.rs create mode 100644 src/handler/http/auth/mod.rs create mode 100644 src/handler/http/mod.rs create mode 100644 src/handler/http/request/alerts/mod.rs create mode 100644 src/handler/http/request/dashboards/mod.rs create mode 100644 src/handler/http/request/document/data_ingest.rs create mode 100644 src/handler/http/request/document/mod.rs create mode 100644 src/handler/http/request/functions/mod.rs create mode 100644 src/handler/http/request/functions/udf.rs create mode 100644 src/handler/http/request/health/mod.rs create mode 100644 src/handler/http/request/mod.rs create mode 100644 src/handler/http/request/organization/mod.rs create mode 100644 src/handler/http/request/prom/mod.rs create mode 100644 src/handler/http/request/search/mod.rs create mode 100644 src/handler/http/request/stream/mod.rs create mode 100644 src/handler/http/request/traces/mod.rs create mode 100644 src/handler/http/request/users/mod.rs create mode 100644 src/handler/http/router/mod.rs create mode 100644 src/handler/http/router/ui.rs create mode 100644 src/handler/mod.rs create mode 100644 src/infra/cache/file_data.rs create mode 100644 src/infra/cache/file_list.rs create mode 100644 src/infra/cache/mod.rs create mode 100644 src/infra/cache/stats.rs create mode 100644 src/infra/cache/tmpfs.rs create mode 100644 src/infra/cluster.rs create mode 100644 src/infra/config.rs create mode 100644 src/infra/db/etcd.rs create mode 100644 src/infra/db/mod.rs create mode 100644 src/infra/db/sled.rs create mode 100644 src/infra/errors.rs create mode 100644 src/infra/file_lock.rs create mode 100644 src/infra/ider.rs create mode 100644 src/infra/mod.rs create mode 100644 src/infra/storage/local.rs create mode 100644 src/infra/storage/mod.rs create mode 100644 src/infra/storage/s3.rs create mode 100644 src/job/alert_manager.rs create mode 100644 src/job/compact.rs create mode 100644 src/job/file_list.rs create mode 100644 src/job/files.rs create mode 100644 src/job/mod.rs create mode 100644 src/job/prom.rs create mode 100644 src/lib.rs create mode 100644 src/main.rs create mode 100644 src/meta/alert.rs create mode 100644 src/meta/common.rs create mode 100644 src/meta/dashboards.rs create mode 100644 src/meta/dialect.rs create mode 100644 src/meta/http.rs create mode 100644 src/meta/ingestion.rs create mode 100644 src/meta/mod.rs create mode 100644 src/meta/prom.rs create mode 100644 src/meta/search.rs create mode 100644 src/meta/service.rs create mode 100644 src/meta/sql.rs create mode 100644 src/meta/stream.rs create mode 100644 src/meta/traces.rs create mode 100644 src/meta/transform.rs create mode 100644 src/meta/user.rs create mode 100644 src/service/alert_manager.rs create mode 100644 src/service/alerts.rs create mode 100644 src/service/compact/file_list.rs create mode 100644 src/service/compact/merge.rs create mode 100644 src/service/compact/mod.rs create mode 100644 src/service/dashboards.rs create mode 100644 src/service/db/alerts.rs create mode 100644 src/service/db/compact.rs create mode 100644 src/service/db/compact/file_list.rs create mode 100644 src/service/db/compact/files.rs create mode 100644 src/service/db/dashboard.rs create mode 100644 src/service/db/file_list/broadcast.rs create mode 100644 src/service/db/file_list/local.rs create mode 100644 src/service/db/file_list/mod.rs create mode 100644 src/service/db/file_list/remote.rs create mode 100644 src/service/db/mod.rs create mode 100644 src/service/db/schema.rs create mode 100644 src/service/db/transform.rs create mode 100644 src/service/db/triggers.rs create mode 100644 src/service/db/udf.rs create mode 100644 src/service/db/user.rs create mode 100644 src/service/file_list.rs create mode 100644 src/service/logs/bulk.rs create mode 100644 src/service/logs/json.rs create mode 100644 src/service/logs/mod.rs create mode 100644 src/service/logs/multi.rs create mode 100644 src/service/metrics/mod.rs create mode 100644 src/service/mod.rs create mode 100644 src/service/router/mod.rs create mode 100644 src/service/schema.rs create mode 100644 src/service/search.rs create mode 100644 src/service/search/cache.rs create mode 100644 src/service/search/datafusion/exec.rs create mode 100644 src/service/search/datafusion/match_udf.rs create mode 100644 src/service/search/datafusion/mod.rs create mode 100644 src/service/search/datafusion/regexp_udf.rs create mode 100644 src/service/search/datafusion/storage/file_list.rs create mode 100644 src/service/search/datafusion/storage/memory.rs create mode 100644 src/service/search/datafusion/storage/mod.rs create mode 100644 src/service/search/datafusion/storage/tmpfs.rs create mode 100644 src/service/search/datafusion/time_range_udf.rs create mode 100644 src/service/search/datafusion/transform_udf.rs create mode 100644 src/service/search/exec.rs create mode 100644 src/service/search/sql.rs create mode 100644 src/service/search/storage.rs create mode 100644 src/service/stream.rs create mode 100644 src/service/traces/metadata.rs create mode 100644 src/service/traces/mod.rs create mode 100644 src/service/traces/otlp_http.rs create mode 100644 src/service/transform.rs create mode 100644 src/service/triggers.rs create mode 100644 src/service/users.rs create mode 100644 tests/input.json create mode 100644 tests/integration_test.rs create mode 100644 tests/trace_input.json create mode 100644 web/.eslintrc.cjs create mode 100644 web/.gitignore create mode 100644 web/.prettierrc.json create mode 100644 web/README.md create mode 100644 web/cypress.config.ts create mode 100644 web/cypress/e2e/tsconfig.json create mode 100644 web/env.d.ts create mode 100755 web/eslint.sh create mode 100644 web/index.html create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/public/favicon.ico create mode 100644 web/quasar.conf.js create mode 100644 web/src/App.vue create mode 100644 web/src/assets/base.css create mode 100644 web/src/assets/images/common/add_icon.svg create mode 100644 web/src/assets/images/common/app_logo.png create mode 100644 web/src/assets/images/common/case_insensitive_icon.svg create mode 100644 web/src/assets/images/common/clipboard_icon.svg create mode 100644 web/src/assets/images/common/close_icon.svg create mode 100644 web/src/assets/images/common/collapse_sidebar_icon.svg create mode 100644 web/src/assets/images/common/copy_icon.svg create mode 100644 web/src/assets/images/common/delete_icon.svg create mode 100644 web/src/assets/images/common/expand_sidebar_icon.svg create mode 100644 web/src/assets/images/common/input_search_icon.svg create mode 100644 web/src/assets/images/common/language_menu_arrow.svg create mode 100644 web/src/assets/images/common/list_icon.svg create mode 100644 web/src/assets/images/common/menu_icon.svg create mode 100644 web/src/assets/images/common/mini_logo.svg create mode 100644 web/src/assets/images/common/pointer-to-demo-2.svg create mode 100644 web/src/assets/images/common/pointer-to-demo.svg create mode 100644 web/src/assets/images/common/profile.svg create mode 100644 web/src/assets/images/common/refresh_icon.png create mode 100644 web/src/assets/images/common/remove_icon.svg create mode 100644 web/src/assets/images/common/search_icon.svg create mode 100644 web/src/assets/images/common/settings_icon.svg create mode 100644 web/src/assets/images/common/slack.svg create mode 100644 web/src/assets/images/common/time_icon.png create mode 100644 web/src/assets/images/common/user_down_icon.svg create mode 100644 web/src/assets/images/common/user_menu_arrow.svg create mode 100644 web/src/assets/images/common/view_icon.svg create mode 100644 web/src/assets/images/ingestion/fluentbit_icon.png create mode 100644 web/src/assets/images/ingestion/fluentd_icon.svg create mode 100644 web/src/assets/images/ingestion/kubernetes_icon.svg create mode 100644 web/src/assets/images/ingestion/vector_icon.png create mode 100644 web/src/assets/images/language_flags/en-gb.svg create mode 100644 web/src/assets/images/language_flags/tr-turk.svg create mode 100644 web/src/assets/images/language_flags/zh-cn.svg create mode 100644 web/src/assets/images/left_nav/about_icon.svg create mode 100644 web/src/assets/images/left_nav/dashb2.svg create mode 100644 web/src/assets/images/left_nav/index_icon.svg create mode 100644 web/src/assets/images/left_nav/ingestion_icon.svg create mode 100644 web/src/assets/images/left_nav/organization_icon.svg create mode 100644 web/src/assets/images/left_nav/search_icon.svg create mode 100644 web/src/assets/images/left_nav/ticket_icon.svg create mode 100644 web/src/assets/images/left_nav/user_icon.svg create mode 100644 web/src/assets/images/left_nav/warning_icon.svg create mode 100644 web/src/assets/logo-full.svg create mode 100644 web/src/assets/logo.jpeg create mode 100644 web/src/assets/main.css create mode 100644 web/src/aws-exports.ts create mode 100644 web/src/components/ConfirmDialog.vue create mode 100644 web/src/components/HighLight.vue create mode 100644 web/src/components/MenuLink.vue create mode 100644 web/src/components/alerts/add.vue create mode 100644 web/src/components/dashboards/AddUpdateDashboards.vue create mode 100644 web/src/components/ingestion/Curl.vue create mode 100644 web/src/components/ingestion/FluentBit.vue create mode 100644 web/src/components/ingestion/Fluentd.vue create mode 100644 web/src/components/ingestion/Vector.vue create mode 100644 web/src/components/jstransform/add.vue create mode 100644 web/src/components/logBarChart.vue create mode 100644 web/src/components/log_index/schema.vue create mode 100644 web/src/components/shared/grid/NoData.vue create mode 100644 web/src/components/shared/grid/Pagination.vue create mode 100644 web/src/components/shared/grid/Table.vue create mode 100644 web/src/components/shared/plotly/barchart.vue create mode 100644 web/src/components/shared/plotly/barchartMetrics.vue create mode 100644 web/src/components/shared/plotly/linechart.vue create mode 100644 web/src/components/shared/plotly/panelcontainer.vue create mode 100644 web/src/components/shared/plotly/panelheader.vue create mode 100644 web/src/components/shared/plotly/tablechart.vue create mode 100644 web/src/components/tickets/AddUpdateTicket.vue create mode 100644 web/src/components/tickets/TicketAttachments.vue create mode 100644 web/src/components/users/UpdateRole.vue create mode 100644 web/src/composables/useLogs.ts create mode 100644 web/src/constants/config.ts create mode 100644 web/src/constants/key.ts create mode 100644 web/src/layouts/MainLayout.vue create mode 100644 web/src/locales/index.ts create mode 100644 web/src/locales/languages/en.json create mode 100644 web/src/locales/languages/tr.json create mode 100644 web/src/locales/languages/zh.json create mode 100644 web/src/main.ts create mode 100644 web/src/plugins/index.ts create mode 100644 web/src/plugins/logs/DateTime.vue create mode 100644 web/src/plugins/logs/DetailTable.vue create mode 100644 web/src/plugins/logs/Index.vue create mode 100644 web/src/plugins/logs/IndexList.vue create mode 100644 web/src/plugins/logs/QueryEditor.vue create mode 100644 web/src/plugins/logs/RefreshInterval.vue create mode 100644 web/src/plugins/logs/SearchBar.vue create mode 100644 web/src/plugins/logs/SearchResult.vue create mode 100644 web/src/plugins/logs/SyntaxGuide.vue create mode 100644 web/src/router/index.ts create mode 100644 web/src/services/alerts.ts create mode 100644 web/src/services/attachments.ts create mode 100644 web/src/services/auth.ts create mode 100644 web/src/services/billings.ts create mode 100644 web/src/services/dashboards.ts create mode 100644 web/src/services/http.ts create mode 100644 web/src/services/httpsearch.ts create mode 100644 web/src/services/index.ts create mode 100644 web/src/services/jstransform.ts create mode 100644 web/src/services/nativequery.ts create mode 100644 web/src/services/organizations.ts create mode 100644 web/src/services/search.ts create mode 100644 web/src/services/segment_analytics.ts create mode 100644 web/src/services/tickets.ts create mode 100644 web/src/services/users.ts create mode 100644 web/src/stores/index.ts create mode 100644 web/src/styles/app.scss create mode 100644 web/src/styles/quasar-overrides.scss create mode 100644 web/src/styles/quasar-variables.sass create mode 100644 web/src/test/unit/helpers/index.ts create mode 100644 web/src/test/unit/helpers/install-quasar-plugin.ts create mode 100644 web/src/test/unit/helpers/layout-injections.ts create mode 100644 web/src/test/unit/views/About.spec.ts create mode 100644 web/src/utils/common.ts create mode 100644 web/src/utils/commons.ts create mode 100644 web/src/utils/cookies.ts create mode 100644 web/src/utils/json.ts create mode 100644 web/src/utils/zincutils.ts create mode 100644 web/src/views/About.vue create mode 100644 web/src/views/Alerts.vue create mode 100644 web/src/views/Dashboard.vue create mode 100644 web/src/views/DetailTable.vue create mode 100644 web/src/views/EditPanel.vue create mode 100644 web/src/views/Error404.vue create mode 100644 web/src/views/HomeView.vue create mode 100644 web/src/views/Ingestion.vue create mode 100644 web/src/views/JSTransform.vue create mode 100644 web/src/views/LogIndex.vue create mode 100644 web/src/views/Login.vue create mode 100644 web/src/views/LoginCallback.vue create mode 100644 web/src/views/Logs.vue create mode 100644 web/src/views/MemberSubscription.vue create mode 100644 web/src/views/Search.vue create mode 100644 web/src/views/TicketsView.vue create mode 100644 web/src/views/User.vue create mode 100644 web/src/views/ViewDashboard.vue create mode 100644 web/tsconfig.app.json create mode 100644 web/tsconfig.config.json create mode 100644 web/tsconfig.json create mode 100644 web/tsconfig.node.json create mode 100644 web/tsconfig.vitest.json create mode 100644 web/vite.config.ts diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000000..062687ba6e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5780 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "actix-codec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "log", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util 0.7.4", +] + +[[package]] +name = "actix-cors" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b340e9cfa5b08690aae90fb61beb44e9b06f44fe3d0f93781aaa58cfba86245e" +dependencies = [ + "actix-utils", + "actix-web", + "derive_more", + "futures-util", + "log", + "once_cell", + "smallvec 1.10.0", +] + +[[package]] +name = "actix-http" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0070905b2c4a98d184c4e81025253cb192aa8a73827553f38e9410801ceb35bb" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "ahash 0.7.6", + "base64 0.21.0", + "bitflags", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "futures-core", + "h2", + "http", + "httparse", + "httpdate", + "itoa 1.0.5", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand 0.8.5", + "sha1", + "smallvec 1.10.0", + "tokio", + "tokio-util 0.7.4", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "actix-router" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799" +dependencies = [ + "bytestring", + "http", + "regex", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "num_cpus", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" +dependencies = [ + "futures-core", + "paste", + "pin-project-lite", +] + +[[package]] +name = "actix-tls" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fde0cf292f7cdc7f070803cb9a0d45c018441321a78b1042ffbbb81ec333297" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "http", + "log", + "pin-project-lite", + "tokio-util 0.7.4", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "464e0fddc668ede5f26ec1f9557a8d44eda948732f40c6b0ad79126930eb775f" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "ahash 0.7.6", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "futures-core", + "futures-util", + "http", + "itoa 1.0.5", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec 1.10.0", + "socket2", + "time 0.3.17", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa9362663c8643d67b2d5eafba49e4cb2c8a053a29ed00a0bea121f17c76b13" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "actix-web-httpauth" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dda62cf04bc3a9ad2ea8f314f721951cfdb4cdacec4e984d20e77c7bb170991" +dependencies = [ + "actix-utils", + "actix-web", + "base64 0.13.1", + "futures-core", + "futures-util", + "log", + "pin-project-lite", +] + +[[package]] +name = "actix-web-opentelemetry" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503ff1136a085f39fc9fd96818a5e9c7ab58ccd36682f3cfc32a001d01cc3a50" +dependencies = [ + "actix-http", + "actix-web", + "futures-util", + "opentelemetry 0.17.0", + "opentelemetry-prometheus", + "opentelemetry-semantic-conventions", + "prometheus", + "serde", +] + +[[package]] +name = "actix-web-prometheus" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad5228fd1a6b5d0f60d636776c2a70acc9fc667034bb4ac02ec4259f0eeeab6c" +dependencies = [ + "actix-service", + "actix-web", + "futures-lite", + "pin-project", + "prometheus", + "quanta", + "thiserror", +] + +[[package]] +name = "actix-web-rust-embed-responder" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d75679673b3a0ba86cbaa097d74f8be1f00c4c1ed099050ffa8819d2fcebb6" +dependencies = [ + "actix-web", + "base64 0.13.1", + "brotli", + "chrono", + "flate2", + "futures-core", + "lazy_static", + "regex", + "rust-embed-for-web", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "serde", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" + +[[package]] +name = "argon2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4ce4441f99dbd377ca8a8f57b698c44d0d6e712d8329b5040da5a64aa1ce73" +dependencies = [ + "base64ct", + "blake2", + "password-hash", +] + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "arrow" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b556d39f9d19e363833a0fe65d591cd0e2ecc0977589a78179b592bea8dc945" +dependencies = [ + "ahash 0.8.3", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-csv", + "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", + "comfy-table", +] + +[[package]] +name = "arrow-arith" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c61b9235694b48f60d89e0e8d6cb478f39c65dd14b0fe1c3f04379b7d50068" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "num", +] + +[[package]] +name = "arrow-array" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6e839764618a911cc460a58ebee5ad3d42bc12d9a5e96a29b7cc296303aa1" +dependencies = [ + "ahash 0.8.3", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.13.2", + "num", + "packed_simd_2", +] + +[[package]] +name = "arrow-buffer" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a21d232b1bc1190a3fdd2f9c1e39b7cd41235e95a0d44dd4f522bc5f495748" +dependencies = [ + "half", + "num", +] + +[[package]] +name = "arrow-cast" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83dcdb1436cac574f1c1b30fda91c53c467534337bef4064bbd4ea2d6fbc6e04" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "chrono", + "lexical-core", + "num", +] + +[[package]] +name = "arrow-csv" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01677ae9458f5af9e35e1aa6ba97502f539e621db0c6672566403f97edd0448" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e3e69c9fd98357eeeab4aa0f626ecf7ecf663e68e8fc04eac87c424a414477" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num", +] + +[[package]] +name = "arrow-ipc" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cac2706acbd796965b6eaf0da30204fe44aacf70273f8cb3c9b7d7f3d4c190" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", + "lz4", + "zstd", +] + +[[package]] +name = "arrow-json" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7790e8b7df2d8ef5ac802377ac256cf2fb80cbf7d44b82d6464e20ace6232a5a" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap", + "num", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ee6e1b761dfffaaf7b5bbe68c113a576a3a802146c5c0b9fcec781e30d80a3" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "num", +] + +[[package]] +name = "arrow-row" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e65bfedf782fc92721e796fdd26ae7343c98ba9a9243d62def9e4e1c4c1cf0b" +dependencies = [ + "ahash 0.8.3", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", + "hashbrown 0.13.2", +] + +[[package]] +name = "arrow-schema" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ca49d010b27e2d73f70c1d1f90c1b378550ed0f4ad379c4dea0c997d97d723" +dependencies = [ + "serde", +] + +[[package]] +name = "arrow-select" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976cbaeb1a85c09eea81f3f9c149c758630ff422ed0238624c5c3f4704b6a53c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d4882762f8f48a9218946c016553d38b04b4fe8202038dad4141b3b887b7da8" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "regex", + "regex-syntax", +] + +[[package]] +name = "askama" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb98f10f371286b177db5eeb9a6e5396609555686a35e1d4f7b9a9c6d8af0139" +dependencies = [ + "askama_derive", + "askama_escape", + "askama_shared", +] + +[[package]] +name = "askama_derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87bf87e6e8b47264efa9bde63d6225c6276a52e05e91bf37eaa8afd0032d6b71" +dependencies = [ + "askama_shared", + "proc-macro2", + "syn", +] + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "askama_shared" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf722b94118a07fcbc6640190f247334027685d4e218b794dbfe17c32bf38ed0" +dependencies = [ + "askama_escape", + "humansize", + "mime", + "mime_guess", + "nom", + "num-traits", + "percent-encoding", + "proc-macro2", + "quote", + "serde", + "syn", + "toml", +] + +[[package]] +name = "async-channel" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-compression" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" +dependencies = [ + "bzip2", + "flate2", + "futures-core", + "futures-io", + "memchr", + "pin-project-lite", + "tokio", + "xz2", +] + +[[package]] +name = "async-stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +dependencies = [ + "async-stream-impl", + "futures-core", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff18d764974428cf3a9328e23fc5c986f5fbed46e6cd4cdf42544df5d297ec1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async_once" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ce4f10ea3abcd6617873bae9f91d1c5332b4a778bd9ce34d0cd517474c1de82" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "awc" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dff3fc64a176e0d4398c71b0f2c2679ff4a723c6ed8fcc68dfe5baa00665388" +dependencies = [ + "actix-codec", + "actix-http", + "actix-rt", + "actix-service", + "actix-tls", + "actix-utils", + "ahash 0.7.6", + "base64 0.21.0", + "bytes", + "cfg-if", + "cookie", + "derive_more", + "futures-core", + "futures-util", + "h2", + "http", + "itoa 1.0.5", + "log", + "mime", + "percent-encoding", + "pin-project-lite", + "rand 0.8.5", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", +] + +[[package]] +name = "aws-config" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56a636c44c77fa18bdba56126a34d30cfe5538fe88f7d34988fa731fee143ddd" +dependencies = [ + "aws-http", + "aws-sdk-sso", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-types", + "aws-types", + "bytes", + "hex", + "http", + "hyper", + "ring", + "time 0.3.17", + "tokio", + "tower", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-endpoint" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ca8f374874f6459aaa88dc861d7f5d834ca1ff97668eae190e97266b5f6c3fb" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "aws-types", + "http", + "regex", + "tracing", +] + +[[package]] +name = "aws-http" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78d41e19e779b73463f5f0c21b3aacc995f4ba783ab13a7ae9f5dfb159a551b4" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "aws-types", + "bytes", + "http", + "http-body", + "lazy_static", + "percent-encoding", + "pin-project-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-s3" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9f08665c8e03aca8cb092ef01e617436ebfa977fddc1240e1b062488ab5d48a" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-checksums", + "aws-smithy-client", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "bytes-utils", + "http", + "http-body", + "tokio-stream", + "tower", + "tracing", +] + +[[package]] +name = "aws-sdk-sso" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86dcb1cb71aa8763b327542ead410424515cff0cde5b753eedd2917e09c63734" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-types", + "aws-types", + "bytes", + "http", + "tokio-stream", + "tower", +] + +[[package]] +name = "aws-sdk-sts" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdfcf584297c666f6b472d5368a78de3bc714b6e0a53d7fbf76c3e347c292ab1" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-query", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "http", + "tower", +] + +[[package]] +name = "aws-sig-auth" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cbe7b2be9e185c1fbce27fc9c41c66b195b32d89aa099f98768d9544221308" +dependencies = [ + "aws-sigv4", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-types", + "http", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03ff4cff8c4a101962d593ba94e72cd83891aecd423f0c6e3146bff6fb92c9e3" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-http", + "bytes", + "form_urlencoded", + "hex", + "http", + "once_cell", + "percent-encoding", + "regex", + "ring", + "time 0.3.17", + "tracing", +] + +[[package]] +name = "aws-smithy-async" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b3442b4c5d3fc39891a2e5e625735fba6b24694887d49c6518460fde98247a9" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", + "tokio-stream", +] + +[[package]] +name = "aws-smithy-checksums" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc227e36e346f45298288359f37123e1a92628d1cec6b11b5eb335553278bd9e" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "bytes", + "crc32c", + "crc32fast", + "hex", + "http", + "http-body", + "md-5", + "pin-project-lite", + "sha1", + "sha2", + "tracing", +] + +[[package]] +name = "aws-smithy-client" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff28d553714f8f54cd921227934fc13a536a1c03f106e56b362fd57e16d450ad" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-types", + "bytes", + "fastrand", + "http", + "http-body", + "hyper", + "hyper-rustls", + "lazy_static", + "pin-project-lite", + "tokio", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-eventstream" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ea0df7161ce65b5c8ca6eb709a1a907376fa18226976e41c748ce02ccccf24" +dependencies = [ + "aws-smithy-types", + "bytes", + "crc32fast", +] + +[[package]] +name = "aws-smithy-http" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf58ed4fefa61dbf038e5421a521cbc2c448ef69deff0ab1d915d8a10eda5664" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http", + "http-body", + "hyper", + "once_cell", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tokio", + "tokio-util 0.7.4", + "tracing", +] + +[[package]] +name = "aws-smithy-http-tower" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c96d7bd35e7cf96aca1134b2f81b1b59ffe493f7c6539c051791cbbf7a42d3" +dependencies = [ + "aws-smithy-http", + "bytes", + "http", + "http-body", + "pin-project-lite", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8324ba98c8a94187723cc16c37aefa09504646ee65c3d2c3af495bab5ea701b" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-query" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83834ed2ff69ea6f6657baf205267dc2c0abe940703503a3e5d60ce23be3d306" +dependencies = [ + "aws-smithy-types", + "urlencoding", +] + +[[package]] +name = "aws-smithy-types" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b02e06ea63498c43bc0217ea4d16605d4e58d85c12fc23f6572ff6d0a840c61" +dependencies = [ + "itoa 1.0.5", + "num-integer", + "ryu", + "time 0.3.17", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246e9f83dd1fdf5d347fa30ae4ad30a9d1d42ce4cd74a93d94afa874646f94cd" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05701d32da168b44f7ee63147781aed8723e792cc131cb9b18363b5393f17f70" +dependencies = [ + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-types", + "http", + "rustc_version", + "tracing", + "zeroize", +] + +[[package]] +name = "axum" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678c5130a507ae3a7c797f9a17393c14849300b8440eac47cdb90a5bdcb3a543" +dependencies = [ + "async-trait", + "axum-core", + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa 1.0.5", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cae3e661676ffbacb30f1a824089a8c9150e71017f7e1e38f2aa32009188d34" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "base64ct" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" + +[[package]] +name = "base85rs" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7b7172542a3d446ca7b2be4e28e4f4c119a89c396712f7ca1ad2822bfc54ca2" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "blake3" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "boa_engine" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d42e34ff7c02423cb5248bc67021f13f2bb7aec22de7ab351a6a4e31ec6d9" +dependencies = [ + "bitflags", + "boa_gc", + "boa_interner", + "boa_profiler", + "boa_unicode", + "chrono", + "dyn-clone", + "fast-float", + "gc", + "indexmap", + "num-bigint", + "num-integer", + "num-traits", + "once_cell", + "rand 0.8.5", + "regress", + "rustc-hash", + "ryu-js", + "serde", + "serde_json", + "tap", + "unicode-normalization", +] + +[[package]] +name = "boa_gc" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a1167c469e96484d0f1d73d2a1ae5e44983aa49a32630d76f5a555116b18204" +dependencies = [ + "gc", +] + +[[package]] +name = "boa_interner" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8a4c15b4b0e86daa063c7123da11f8e41ecdc91fc086d1fd8898670b2f40e" +dependencies = [ + "gc", + "string-interner", +] + +[[package]] +name = "boa_profiler" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28bd5912d57793f8fd312ce63eaedd34fa6ff5fe759be508d3d2455905b0880a" + +[[package]] +name = "boa_unicode" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b9a73ca3f2bdd98e3e132e3c93684d9ab682ed5a3cad8be6b87c38d7f349e6" +dependencies = [ + "unicode-general-category", +] + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "bstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "bytes-utils" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9" +dependencies = [ + "bytes", + "either", +] + +[[package]] +name = "bytestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7f83e57d9154148e355404702e2694463241880b939570d7c97c014da7a69a1" +dependencies = [ + "bytes", +] + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "c_linked_list" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cc" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "serde", + "time 0.1.43", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "cluFlock" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5c0fabbd86438044c17b633a514a4e5512f356ee114d7378665d24212462f88" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "comfy-table" +version = "6.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +dependencies = [ + "strum", + "strum_macros", + "unicode-width", +] + +[[package]] +name = "concurrent-queue" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-random" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +dependencies = [ + "getrandom", + "once_cell", + "proc-macro-hack", + "tiny-keccak", +] + +[[package]] +name = "constant_time_eq" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time 0.3.17", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "coverage-helper" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9db510e477cf3c14a6c56aa2ed28e499f1e27e01c17723b41ece793d11cf3fe" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32c" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfea2db42e9927a3845fb268a10a72faed6d416065f77873f05e411457c363e" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +dependencies = [ + "bstr 0.2.17", + "csv-core", + "itoa 0.4.8", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "curl" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "winapi 0.3.9", +] + +[[package]] +name = "curl-sys" +version = "0.4.59+curl-7.86.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cfce34829f448b08f55b7db6d0009e23e2e86a34e8c2b366269bf5799b4a407" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "winapi 0.3.9", +] + +[[package]] +name = "cxx" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b61a7545f753a88bcbe0a70de1fcc0221e10bfc752f576754fa91e663db1622e" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f464457d494b5ed6905c63b0c4704842aba319084a0a3561cdc1359536b53200" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c7119ce3a3701ed81aca8410b9acf6fc399d2629d057b87e2efa4e63a3aaea" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e07508b90551e610910fa648a1878991d367064997a596135b86df30daf07e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dashmap" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if", + "num_cpus", +] + +[[package]] +name = "dashmap" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +dependencies = [ + "cfg-if", + "hashbrown 0.12.3", + "lock_api", + "once_cell", + "parking_lot_core 0.9.6", + "serde", +] + +[[package]] +name = "datafusion" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6d90cae91414aaeda37ae8022a23ef1124ca8efc08ac7d7770274249f7cf148" +dependencies = [ + "ahash 0.8.3", + "arrow", + "async-compression", + "async-trait", + "bytes", + "bzip2", + "chrono", + "dashmap 5.4.0", + "datafusion-common", + "datafusion-expr", + "datafusion-optimizer", + "datafusion-physical-expr", + "datafusion-row", + "datafusion-sql", + "flate2", + "futures", + "glob", + "hashbrown 0.13.2", + "indexmap", + "itertools", + "lazy_static", + "log", + "num_cpus", + "object_store", + "parking_lot 0.12.1", + "parquet", + "paste", + "percent-encoding", + "pin-project-lite", + "rand 0.8.5", + "smallvec 1.10.0", + "sqlparser", + "tempfile", + "tokio", + "tokio-stream", + "tokio-util 0.7.4", + "url", + "uuid", + "xz2", +] + +[[package]] +name = "datafusion-common" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b21c4b8e8b7815e86d79d25da16854fee6d4d1b386572e802a248b7d43188e86" +dependencies = [ + "arrow", + "chrono", + "num_cpus", + "object_store", + "parquet", + "sqlparser", +] + +[[package]] +name = "datafusion-expr" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8c07b051fbaf01657a3eb910a76b042ecfed0350a40412f70cf6b949bd5328" +dependencies = [ + "ahash 0.8.3", + "arrow", + "datafusion-common", + "log", + "sqlparser", +] + +[[package]] +name = "datafusion-optimizer" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ce4d34a808cd2e4c4864cdc759dd1bd22dcac2b8af38aa570e30fd54577c4d" +dependencies = [ + "arrow", + "async-trait", + "chrono", + "datafusion-common", + "datafusion-expr", + "datafusion-physical-expr", + "hashbrown 0.13.2", + "log", + "regex-syntax", +] + +[[package]] +name = "datafusion-physical-expr" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a38afa11a09505c24bd7e595039d7914ec39329ba490209413ef2d37895c8220" +dependencies = [ + "ahash 0.8.3", + "arrow", + "arrow-buffer", + "arrow-schema", + "blake2", + "blake3", + "chrono", + "datafusion-common", + "datafusion-expr", + "datafusion-row", + "half", + "hashbrown 0.13.2", + "indexmap", + "itertools", + "lazy_static", + "md-5", + "num-traits", + "paste", + "rand 0.8.5", + "regex", + "sha2", + "unicode-segmentation", + "uuid", +] + +[[package]] +name = "datafusion-row" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9172411b25ff4aa97f8e99884898595a581636d93cc96c12f96dbe3bf51cd7e5" +dependencies = [ + "arrow", + "datafusion-common", + "paste", + "rand 0.8.5", +] + +[[package]] +name = "datafusion-sql" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fbe5e61563ced2f6992a60afea568ff3de69e32940bbf07db06fc5c9d8cd866" +dependencies = [ + "arrow-schema", + "datafusion-common", + "datafusion-expr", + "log", + "sqlparser", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "dotenv_config" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850c634409912953e23d6ef00eef1b09367a4ca7429eb34f937a88116bb9a60b" +dependencies = [ + "anyhow", + "askama", + "convert_case 0.6.0", + "dotenv", +] + +[[package]] +name = "dyn-clone" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "erased-serde" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ca605381c017ec7a5fef5e548f1cfaa419ed0f6df6367339300db74c92aa7d" +dependencies = [ + "serde", +] + +[[package]] +name = "etcd-client" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1259da3b15ec7e54bd7203adb2c4335adb9ca1d47b56220d650e52c247e824a" +dependencies = [ + "http", + "prost 0.11.6", + "tokio", + "tokio-stream", + "tonic 0.8.3", + "tonic-build 0.8.4", + "tower", + "tower-service", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fast-float" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flatbuffers" +version = "22.9.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce016b9901aef3579617931fbb2df8fc9a9f7cb95a16eb8acc8148209bb9e70" +dependencies = [ + "bitflags", + "thiserror", +] + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flatten-json-object" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9539d6d8c87acbf7c3189fb4d1c8ce926de16369212e97ba1629b62febb3d512" +dependencies = [ + "serde_json", + "thiserror", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "fslock" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "futures" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" + +[[package]] +name = "futures-executor" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" + +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" + +[[package]] +name = "futures-task" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" + +[[package]] +name = "futures-util" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gc" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edaac0f5832202ebc99520cb77c932248010c4645d20be1dc62d6579f5b3752" +dependencies = [ + "gc_derive", +] + +[[package]] +name = "gc_derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60df8444f094ff7885631d80e78eb7d88c3c2361a98daaabb06256e4500db941" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "get_if_addrs" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abddb55a898d32925f3148bd281174a68eeb68bbfd9a5938a57b18f506ee4ef7" +dependencies = [ + "c_linked_list", + "get_if_addrs-sys", + "libc", + "winapi 0.2.8", +] + +[[package]] +name = "get_if_addrs-sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d04f9fb746cf36b191c00f3ede8bde9c8e64f9f4b05ae2694a9ccf5e3f5ab48" +dependencies = [ + "gcc", + "libc", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +dependencies = [ + "aho-corasick", + "bstr 1.1.0", + "fnv", + "log", + "regex", +] + +[[package]] +name = "h2" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util 0.7.4", + "tracing", +] + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", + "num-traits", +] + +[[package]] +name = "halfbrown" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2a3c70a9c00cc1ee87b54e89f9505f73bb17d63f1b25c9a462ba8ef885444f" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", +] + +[[package]] +name = "headers" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +dependencies = [ + "base64 0.13.1", + "bitflags", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.5", +] + +[[package]] +name = "http-auth-basic" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2e17aacf7f4a2428def798e2ff4f4f883c0987bdaf47dd5c8bc027bc9f1ebc" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "humansize" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.5", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +dependencies = [ + "http", + "hyper", + "log", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "ipnet" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "event-listener", + "futures-lite", + "http", + "log", + "once_cell", + "polling", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" + +[[package]] +name = "jobserver" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lexical-core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "libmimalloc-sys" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8c7cbf8b89019683667e347572e6d55a7df7ea36b0c4ce69961b0cde67b174" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libz-sys" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "local-channel" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" +dependencies = [ + "futures-core", + "futures-sink", + "futures-util", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "lru" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lua-src" +version = "544.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "708ba3c844d5e9d38def4a09dd871c17c370f519b3c4b7261fbabe4a613a814c" +dependencies = [ + "cc", +] + +[[package]] +name = "luajit-src" +version = "210.4.5+resty2cf5186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b7992a40e602786272d84c6f2beca44a588ededcfd57b48ec6f82008a7cb97" +dependencies = [ + "cc", +] + +[[package]] +name = "lz4" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mimalloc" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcb174b18635f7561a0c6c9fc2ce57218ac7523cf72c50af80e2d79ab8f3ba1" +dependencies = [ + "libmimalloc-sys", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", +] + +[[package]] +name = "mlua" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee2ad7a9aa69056b148d9d590344bc155d3ce0d2200e3b2838f7034f6ba33c1" +dependencies = [ + "bstr 0.2.17", + "cc", + "erased-serde", + "lua-src", + "luajit-src", + "num-traits", + "once_cell", + "pkg-config", + "rustc-hash", + "serde", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "new_mime_guess" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d684d1b59e0dc07b37e2203ef576987473288f530082512aff850585c61b1f" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-complex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", + "libm 0.2.6", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "object_store" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4201837dc4c27a8670f0363b1255cd3845a4f0c521211cced1ed14c1d0cc6d2" +dependencies = [ + "async-trait", + "base64 0.20.0", + "bytes", + "chrono", + "futures", + "itertools", + "parking_lot 0.12.1", + "percent-encoding", + "quick-xml", + "rand 0.8.5", + "reqwest", + "ring", + "rustls-pemfile", + "serde", + "serde_json", + "snafu", + "tokio", + "tracing", + "url", + "walkdir", +] + +[[package]] +name = "once_cell" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" + +[[package]] +name = "openssl" +version = "0.10.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "opentelemetry" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap 4.0.2", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "js-sys", + "lazy_static", + "percent-encoding", + "pin-project", + "rand 0.8.5", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-http" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "449048140ee61e28f57abe6e9975eedc1f3a29855c7407bd6c12b18578863379" +dependencies = [ + "async-trait", + "bytes", + "http", + "opentelemetry 0.17.0", + "reqwest", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c0b12cd9e3f9b35b52f6e0dac66866c519b26f424f4bbf96e3fe8bfbdc5229" +dependencies = [ + "async-trait", + "headers", + "http", + "isahc", + "lazy_static", + "opentelemetry 0.17.0", + "opentelemetry-http", + "opentelemetry-semantic-conventions", + "reqwest", + "thiserror", + "thrift 0.15.0", + "tokio", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a" +dependencies = [ + "async-trait", + "futures", + "futures-util", + "http", + "opentelemetry 0.17.0", + "opentelemetry-http", + "prost 0.9.0", + "prost-build 0.9.0", + "reqwest", + "serde", + "thiserror", + "tokio", + "tonic 0.6.2", + "tonic-build 0.6.2", +] + +[[package]] +name = "opentelemetry-prometheus" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9328977e479cebe12ce0d3fcecdaea4721d234895a9440c5b5dfd113f0594ac6" +dependencies = [ + "opentelemetry 0.17.0", + "prometheus", + "protobuf", +] + +[[package]] +name = "opentelemetry-proto" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61a2f56df5574508dd86aaca016c917489e589ece4141df1b5e349af8d66c28" +dependencies = [ + "futures", + "futures-util", + "opentelemetry 0.18.0", + "prost 0.11.6", + "protobuf", + "serde", + "serde_json", + "tonic 0.8.3", + "tonic-build 0.8.4", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985cc35d832d412224b2cffe2f9194b1b89b6aa5d0bef76d080dce09d90e62bd" +dependencies = [ + "opentelemetry 0.17.0", +] + +[[package]] +name = "opentelemetry_api" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap 5.4.0", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand 0.8.5", + "thiserror", +] + +[[package]] +name = "ordered-float" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordered-float" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owning_ref" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" +dependencies = [ + "owning_ref", + "parking_lot_core 0.2.14", +] + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.6", +] + +[[package]] +name = "parking_lot_core" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" +dependencies = [ + "libc", + "rand 0.4.6", + "smallvec 0.6.14", + "winapi 0.3.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec 1.10.0", + "winapi 0.3.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec 1.10.0", + "windows-sys", +] + +[[package]] +name = "parquet" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4ee1ffc0778395c9783a5c74f2cad2fb1a128ade95a965212d31b7b13e3d45" +dependencies = [ + "ahash 0.8.3", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64 0.21.0", + "brotli", + "bytes", + "chrono", + "flate2", + "futures", + "hashbrown 0.13.2", + "lz4", + "num", + "num-bigint", + "paste", + "seq-macro", + "snap", + "thrift 0.17.0", + "tokio", + "twox-hash", + "zstd", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "petgraph" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "polling" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +dependencies = [ + "autocfg", + "cfg-if", + "libc", + "log", + "wepoll-ffi", + "windows-sys", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.1", + "protobuf", + "thiserror", +] + +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" +dependencies = [ + "bytes", + "prost-derive 0.11.6", +] + +[[package]] +name = "prost-build" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" +dependencies = [ + "bytes", + "heck 0.3.3", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prost 0.9.0", + "prost-types 0.9.0", + "regex", + "tempfile", + "which", +] + +[[package]] +name = "prost-build" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" +dependencies = [ + "bytes", + "heck 0.4.0", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost 0.11.6", + "prost-types 0.11.6", + "regex", + "syn", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +dependencies = [ + "bytes", + "prost 0.9.0", +] + +[[package]] +name = "prost-types" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" +dependencies = [ + "bytes", + "prost 0.11.6", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "quanta" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e31331286705f455e56cca62e0e717158474ff02b7936c1fa596d983f4ae27" +dependencies = [ + "crossbeam-utils", + "libc", + "mach", + "once_cell", + "raw-cpuid", + "wasi 0.10.2+wasi-snapshot-preview1", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "quick-xml" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.9", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-cpuid" +version = "10.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6823ea29436221176fe662da99998ad3b4db2c7f31e7b6f5fe43adccd6320bb" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "regress" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a92ff21fe8026ce3f2627faaf43606f0b67b014dbc9ccf027181a804f75d92e" +dependencies = [ + "memchr", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "reqwest" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +dependencies = [ + "base64 0.21.0", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util 0.7.4", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "rs-snowflake" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e60ef3b82994702bbe4e134d98aadca4b49ed04440148985678d415c68127666" + +[[package]] +name = "rsfs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "101969b02a54a072eaa40591765fa61d54e30bed4c7dfa7f3006380600546be6" +dependencies = [ + "parking_lot 0.4.8", +] + +[[package]] +name = "rust-embed" +version = "6.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "283ffe2f866869428c92e0d61c2f35dfb4355293cdfdc48f49e895c15f1333d1" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-for-web" +version = "11.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "315ba69a3ecad03d3c99629d7190993599e7e2612b6e4b27bd3c769969f5eec1" +dependencies = [ + "rust-embed-for-web-impl", + "rust-embed-for-web-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-for-web-impl" +version = "11.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c181b631a5952c043c187d396778db3a56ec0df4abad6e34c5e1753d6e7631" +dependencies = [ + "brotli", + "flate2", + "globset", + "proc-macro2", + "quote", + "rust-embed-for-web-utils", + "shellexpand", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-for-web-utils" +version = "11.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a1a7f864975b56e94ea5258076d5bdca4920cfbc7eaabc68d85eb524cd217f" +dependencies = [ + "base85rs", + "chrono", + "globset", + "new_mime_guess", + "sha2", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "6.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ab23d42d71fb9be1b643fe6765d292c5e14d46912d13f3ae2815ca048ea04d" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "shellexpand", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "7.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1669d81dfabd1b5f8e2856b8bbe146c6192b0ba22162edc738ac0a5de18f054" +dependencies = [ + "sha2", + "walkdir", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustls" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +dependencies = [ + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +dependencies = [ + "base64 0.21.0", +] + +[[package]] +name = "rustversion" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" + +[[package]] +name = "ryu" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" + +[[package]] +name = "ryu-js" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6518fc26bced4d53678a22d6e423e9d8716377def84545fe328236e3af070e7f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645926f31b250a2dca3c232496c2d898d91036e45ca0e97e0e2390c54e11be36" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" + +[[package]] +name = "seq-macro" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1685deded9b272198423bdbdb907d8519def2f26cf3699040e54e8c4fbd5c5ce" + +[[package]] +name = "serde" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718dc5fff5b36f99093fc49b280cfc96ce6fc824317783bff5a1fed0c7a64819" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +dependencies = [ + "itoa 1.0.5", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.5", + "ryu", + "serde", +] + +[[package]] +name = "serde_v8" +version = "0.66.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2b0ef50e4ea3b5a74bcddb063c132176b2433d873e126db983667ac951f98e" +dependencies = [ + "bytes", + "derive_more", + "serde", + "serde_bytes", + "smallvec 1.10.0", + "v8", +] + +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-json" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e3375b6c3d8c048ba09c8b4b6c3f1d3f35e06b71db07d231c323943a949e1b8" +dependencies = [ + "halfbrown", + "lexical-core", + "serde", + "serde_json", + "simdutf8", + "value-trait", +] + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sled" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" +dependencies = [ + "crc32fast", + "crossbeam-epoch", + "crossbeam-utils", + "fs2", + "fxhash", + "libc", + "log", + "parking_lot 0.11.2", +] + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" +dependencies = [ + "maybe-uninit", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "snafu" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2" +dependencies = [ + "heck 0.4.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "snap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + +[[package]] +name = "socket2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "sqlparser" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db67dc6ef36edb658196c3fef0464a80b53dbbc194a904e81f9bd4190f9ecc5b" +dependencies = [ + "log", + "serde", + "sqlparser_derive", +] + +[[package]] +name = "sqlparser_derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55fe75cb4a364c7f7ae06c7dbbc8d84bddd85d6cdf9975963c3935bc1991761e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string-interner" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e2531d8525b29b514d25e275a43581320d587b86db302b9a7e464bac579648" +dependencies = [ + "cfg-if", + "hashbrown 0.11.2", + "serde", +] + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "sys-info" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.9", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b82ca8f46f95b3ce96081fe3dd89160fdea970c254bb72925255d1b62aae692e" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float 1.1.1", + "threadpool", +] + +[[package]] +name = "thrift" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09678c4cdbb4eed72e18b7c2af1329c69825ed16fcbac62d083fc3e2b0590ff0" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float 1.1.1", + "threadpool", +] + +[[package]] +name = "thrift" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +dependencies = [ + "byteorder", + "integer-encoding", + "ordered-float 2.10.0", +] + +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "time" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +dependencies = [ + "itoa 1.0.5", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "parking_lot 0.12.1", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-stream" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "tonic" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" +dependencies = [ + "async-stream", + "async-trait", + "base64 0.13.1", + "bytes", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost 0.9.0", + "prost-derive 0.9.0", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "tower", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + +[[package]] +name = "tonic" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.13.1", + "bytes", + "flate2", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost 0.11.6", + "prost-derive 0.11.6", + "rustls-pemfile", + "tokio", + "tokio-rustls", + "tokio-stream", + "tokio-util 0.7.4", + "tower", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + +[[package]] +name = "tonic-build" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" +dependencies = [ + "proc-macro2", + "prost-build 0.9.0", + "quote", + "syn", +] + +[[package]] +name = "tonic-build" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build 0.11.6", + "quote", + "syn", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util 0.7.4", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" +dependencies = [ + "once_cell", + "opentelemetry 0.17.0", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec 1.10.0", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" + +[[package]] +name = "unicode-general-category" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1218098468b8085b19a2824104c70d976491d247ce194bbd9dc77181150cdfd6" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" + +[[package]] +name = "utoipa" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b626abb3bbbe41ce00df6dea3d109a83a034930245c3307026d82d71e7a06e43" +dependencies = [ + "indexmap", + "serde", + "serde_json", + "utoipa-gen", +] + +[[package]] +name = "utoipa-gen" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250e8cdb0461b6fbaa1c1acb7f08300d773713fab721776becf5f7386b41a791" +dependencies = [ + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "utoipa-swagger-ui" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0820c88504465c32db74d3765f7a06cb85a89b29d080c4481abd86c01e73944d" +dependencies = [ + "actix-web", + "mime_guess", + "regex", + "rust-embed", + "serde", + "serde_json", + "utoipa", + "zip", +] + +[[package]] +name = "uuid" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +dependencies = [ + "getrandom", + "rand 0.8.5", + "uuid-macro-internal", +] + +[[package]] +name = "uuid-macro-internal" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73bc89f2894593e665241e0052c3791999e6787b7c4831daa0a5c2e637e276d8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "v8" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e952e936bcb610c9f22997f50dc7f65887afe76e1fedd37daf532a20211335ca" +dependencies = [ + "bitflags", + "fslock", + "lazy_static", + "libc", + "which", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-trait" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "995de1aa349a0dc50f4aa40870dce12961a30229027230bad09acd2843edbe9e" +dependencies = [ + "float-cmp", + "halfbrown", + "itoa 1.0.5", + "ryu", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + +[[package]] +name = "wasm-streams" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + +[[package]] +name = "which" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +dependencies = [ + "either", + "libc", + "once_cell", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "xmlparser" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" + +[[package]] +name = "xz2" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" +dependencies = [ + "lzma-sys", +] + +[[package]] +name = "zeroize" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" + +[[package]] +name = "zinc-oxide" +version = "0.1.0" +dependencies = [ + "actix-cors", + "actix-web", + "actix-web-httpauth", + "actix-web-opentelemetry", + "actix-web-prometheus", + "actix-web-rust-embed-responder", + "ahash 0.8.3", + "anyhow", + "argon2", + "arrow", + "arrow-schema", + "async-trait", + "async_once", + "awc", + "aws-config", + "aws-sdk-s3", + "aws-types", + "boa_engine", + "bytes", + "chrono", + "cluFlock", + "coverage-helper", + "dashmap 5.4.0", + "datafusion", + "datafusion-common", + "dotenv", + "dotenv_config", + "env_logger", + "etcd-client", + "flatten-json-object", + "futures", + "futures-util", + "get_if_addrs", + "glob", + "http-auth-basic", + "lazy_static", + "log", + "lru", + "memchr", + "mimalloc", + "mlua", + "object_store", + "once_cell", + "opentelemetry 0.17.0", + "opentelemetry-jaeger", + "opentelemetry-otlp", + "opentelemetry-prometheus", + "opentelemetry-proto", + "parking_lot 0.12.1", + "parquet", + "prometheus", + "prost 0.11.6", + "prost-build 0.11.6", + "rand 0.8.5", + "regex", + "regex-syntax", + "reqwest", + "rs-snowflake", + "rsfs", + "rust-embed-for-web", + "serde", + "serde_json", + "serde_v8", + "simd-json", + "sled", + "snap", + "sqlparser", + "sys-info", + "thiserror", + "thrift 0.16.0", + "tokio", + "tonic 0.8.3", + "tonic-build 0.8.4", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "uuid", + "v8", + "walkdir", + "zstd", +] + +[[package]] +name = "zip" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537ce7411d25e54e8ae21a7ce0b15840e7bfcff15b51d697ec3266cc76bdf080" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", +] + +[[package]] +name = "zstd" +version = "0.12.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9262a83dc741c0b0ffec209881b45dbc232c21b02a2b9cb1adb93266e41303d" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "6.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cf39f730b440bab43da8fb5faf5f254574462f73f260f85f7987f32154ff17" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.5+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" +dependencies = [ + "cc", + "libc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000000..dabc5c4260 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,107 @@ +[package] +name = "zinc-oxide" +version = "0.1.0" +edition = "2021" +# exclude = ["/web"] +# include = ["/ui"] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[features] +mimalloc = [] + +[profile.release] +debug = false +debug-assertions = false +overflow-checks = false +strip = true + +[dependencies] +anyhow = "1.0" +thiserror = "1.0" +log = "0.4.17" +futures = "0.3" +futures-util = "0.3.25" +tokio = { version = "1", features = ["full"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +simd-json = "0.7.0" +flatten-json-object = "0.6.1" +actix-web = "4.2" +actix-web-httpauth = "0.8" +actix-web-prometheus = "0.1.2" +actix-cors = "0.6.4" +prometheus = "0.13.3" +env_logger = "0.9" +dotenv = "0.15.0" +dotenv_config = "0.1.3" +prost = "0.11.2" +tonic = { version = "0.8", features = ["prost", "gzip"] } +sqlparser = { version = "0.30", features = ["serde"] } +arrow = { version = "31.0", features = ["simd", "ipc_compression"] } +arrow-schema = { version = "31.0", features = ["serde"] } +parquet = { version = "31.0", features = ["arrow", "async"] } +datafusion = { version = "17.0", features = ["simd"] } +datafusion-common = "17.0" +object_store = { version = "0.5.3", features = ["aws", "gcp"] } +etcd-client = { version = "0.10.2", features = ["tls"] } +sled = "0.34.7" +aws-config = "0.51.0" +aws-types = "0.51.0" +aws-sdk-s3 = "0.21.0" +zstd = "0.12.1" +chrono = "0.4" +rs-snowflake = "0.6.0" +lazy_static = "1.4.0" +async-trait = "0.1.57" +async_once = "0.2.6" +once_cell = "1.15.0" +glob = "0.3.0" +walkdir = "2" +bytes = "1.1" +memchr = "2.5.0" +rand = "0.8.5" +regex = "1" +regex-syntax = "0.6.27" +sys-info = "0.9.1" +get_if_addrs = "0.5.3" +lru = "0.8.1" +mimalloc = { version = "0.1", default-features = false } +uuid = { version = "1.2.2", features = ["v4", "fast-rng", "macro-diagnostics"] } +mlua = { version = "0.8.4", features = ["luajit52", "vendored" ,"serialize"] } +ahash = { version = "0.8.3", features = ["serde"] } +dashmap = { version = "5.4.0", features = ["serde"] } +argon2 = {version = "0.4.1" ,features = ["alloc", "password-hash"]} +snap = "1" +utoipa = { version = "2", features = ["actix_extras"] } +utoipa-swagger-ui = { version = "2", features = ["actix-web"] } +parking_lot = "0.12" +url = "2.2" +rsfs = "0.4.1" +http-auth-basic = "0.3.3" +opentelemetry = { version = "0.17", features = ["rt-tokio"] } +tracing = "0.1" +tracing-opentelemetry = "0.17" +tracing-subscriber = { version = "0.3", features = ["tracing-log" ,"env-filter"] } +opentelemetry-proto = { version = "0.1", features = ["gen-tonic","traces","with-serde","build-server"] } +opentelemetry-otlp = { version = "0.10", features = ["http-proto", "serialize" , "reqwest-client"] } +actix-web-opentelemetry = { version = "0.12", features = ["metrics"] } +actix-web-rust-embed-responder = { version = "2.1.1", default-features = false, features = ["support-rust-embed-for-web", "base64"] } +rust-embed-for-web="11.1.0" +awc = "3.0.1" +reqwest = "0.11" + +[build-dependencies] +tonic-build = { version = "0.8", features = ["prost"] } +prost-build = { version = "0.11.2" } + +[dev-dependencies] +boa_engine = { version = "0.15.0", features = ["console"] } +coverage-helper = "0.1" +v8 = "0.53.1" +serde_v8 = "0.66.0" +cluFlock = "1.2.7" +thrift = "0.16" +opentelemetry-prometheus = "0.10" +opentelemetry-proto = { version = "0.1", features = ["build-client"] } +opentelemetry-jaeger = { version = "0.16",features = ["reqwest_collector_client","collector_client", "rt-tokio-current-thread" , "isahc"] } diff --git a/README.md b/README.md index 1e47491c99..bd0cf68cc5 100644 --- a/README.md +++ b/README.md @@ -1 +1,61 @@ -# zinc-observe \ No newline at end of file +# zinc-oxide + +| | | +-----------|----------------------------------------- +| User ID | admin | +| Password | Complexpass#123 | + + +etcd-client which is used by zin-oxide needs protocol buffer compiler, please refer https://grpc.io/docs/protoc-installation/ + +For MacOS,using Homebrew + +brew install protobuf + +protoc --version + +## Application structure + +User -> API Interface -> Protocol{http|grpc|job} -> Services{logs|metrics|traces|users} -> Infra{db|storage|config} -> meta | common{thirdparty|function utils} + +## init + +1. register cluster +2. load cache +3. start move job +4. start file list +5. start grpc +6. start http +7. change node status to online + +## Mimalloc + +We use [Mimalloc](https://github.com/microsoft/mimalloc) replaced jemalloc. + +But default we didn't enable it, if you want enable should add cargo flags like this: + +``` +RUSTFLAGS='-C target-cpu=native' cargo build --release --features "mimalloc" +``` + +if you want better control to release memory quickly, you can set some evironments + +``` +export MIMALLOC_VERBOSE=1 +export MIMALLOC_PAGE_RESET=1 +export MIMALLOC_DECOMMIT_DELAY=25 +``` + +More options refer to: https://github.com/microsoft/mimalloc#environment-options + +## Format code + +``` +cargo clippy -- -A clippy::uninlined_format_args +``` + +## check cargo build feature + +``` +diff -u <(rustc --print cfg) <(rustc -C target-cpu=native --print cfg) +``` diff --git a/build.rs b/build.rs new file mode 100644 index 0000000000..61d8a5e400 --- /dev/null +++ b/build.rs @@ -0,0 +1,87 @@ +use std::io::Result; + +fn main() -> Result<()> { + tonic_build::configure() + .type_attribute("FileList", "#[derive(Eq)]") + .type_attribute("FileList", "#[derive(serde::Serialize)]") + .type_attribute("FileKey", "#[derive(Eq)]") + .type_attribute("FileKey", "#[derive(serde::Serialize)]") + .type_attribute("FileDescriptor", "#[derive(Eq)]") + .type_attribute("FileDescriptor", "#[derive(serde::Serialize)]") + .type_attribute("FileMeta", "#[derive(Eq)]") + .type_attribute("FileMeta", "#[derive(serde::Serialize)]") + .type_attribute("Job", "#[derive(Eq)]") + .type_attribute("Job", "#[derive(serde::Serialize)]") + .type_attribute("Partition", "#[derive(Eq)]") + .type_attribute("SearchQuery", "#[derive(Eq)]") + .type_attribute("SearchRequest", "#[derive(Eq)]") + .type_attribute("SearchResponse", "#[derive(Eq)]") + .type_attribute("SearchResponse", "#[derive(serde::Serialize)]") + .type_attribute("SearchAggRequest", "#[derive(Eq)]") + .type_attribute("SearchAggRequest", "#[derive(serde::Serialize)]") + .type_attribute("SearchAggResponse", "#[derive(Eq)]") + .type_attribute("SearchAggResponse", "#[derive(serde::Serialize)]") + .compile( + &[ + "proto/cluster/common.proto", + "proto/cluster/event.proto", + "proto/cluster/search.proto", + ], + &["proto"], + ) + .unwrap(); + + let mut config = prost_build::Config::new(); + config + .type_attribute( + "MetricMetadata", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute( + "MetricType", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute("Sample", "#[derive(serde::Deserialize,serde::Serialize)]") + .type_attribute("Exemplar", "#[derive(serde::Deserialize,serde::Serialize)]") + .type_attribute( + "Histogram", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute( + "BucketSpan", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute( + "TimeSeries", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute("Label", "#[derive(serde::Deserialize,serde::Serialize)]") + .type_attribute("Labels", "#[derive(serde::Deserialize,serde::Serialize)]") + .type_attribute( + "LabelMatcher", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute( + "ReadHints", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute("Chunk", "#[derive(serde::Deserialize,serde::Serialize)]") + .type_attribute( + "ChunkedSeries", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute( + "zero_count", + "#[derive(serde::Deserialize,serde::Serialize)]", + ) + .type_attribute("count", "#[derive(serde::Deserialize,serde::Serialize)]"); + config.compile_protos( + &[ + "proto/prometheus/remote.proto", + "proto/prometheus/types.proto", + ], + &["proto"], + )?; + + Ok(()) +} diff --git a/coverage.sh b/coverage.sh new file mode 100755 index 0000000000..1d131584f7 --- /dev/null +++ b/coverage.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# cargo llvm-cov >report.json && ls -l | grep TOTAL report.json | xargs > coverage.txt +summary="$(RUSTFLAGS='-C target-cpu=native' cargo llvm-cov >report.json && ls -l | grep TOTAL report.json | xargs)" +echo "Coverage Summary $summary %" + +region_cov="$(cut -d' ' -f4 <<<"$summary")" +region_cov=${region_cov//%/} +func_cov="$(cut -d' ' -f7 <<<"$summary")" +func_cov=${func_cov//%/} +line_cov="$(cut -d' ' -f10 <<<"$summary")" +line_cov=${line_cov//%/} + +echo "region_cov $region_cov" +echo "func_cov $func_cov" +echo "line_cov $line_cov" + +# enable threshold +#COVERAGE_THRESHOLD=80 +FUNC_COV_THRESHOLD=40 +LINE_COV_THRESHOLD=35 +REGION_COV_THRESHOLD=25 + +# clean up +# find ./target -name llvm-cov-target -type d|xargs rm -fR +# clean up finished + +func_diff=$(echo "$func_cov < $FUNC_COV_THRESHOLD" | bc) +line_diff=$(echo "$line_cov < $LINE_COV_THRESHOLD" | bc) +region_diff=$(echo "$region_cov < $REGION_COV_THRESHOLD" | bc) + +if [ $func_diff -eq 1 ] || [ $line_diff -eq 1 ] || [ $region_diff -eq 1 ]; then + echo "Coverage is below threshold of function coverage $FUNC_COV_THRESHOLD% or line coverage $LINE_COV_THRESHOLD% or region coverage $REGION_COV_THRESHOLD%" + exit 1 +else + echo "Coverage is above threshold of function coverage $FUNC_COV_THRESHOLD% & line coverage $LINE_COV_THRESHOLD% & region coverage $REGION_COV_THRESHOLD%" + exit 0 +fi \ No newline at end of file diff --git a/deploy/build/Dockerfile b/deploy/build/Dockerfile new file mode 100644 index 0000000000..ca0517f726 --- /dev/null +++ b/deploy/build/Dockerfile @@ -0,0 +1,31 @@ +FROM public.ecr.aws/docker/library/node:18.12.1-bullseye as webBuilder +WORKDIR /web +COPY ./web /web/ + +RUN npm install +RUN NODE_OPTIONS="--max-old-space-size=6192" npm run build + +FROM public.ecr.aws/docker/library/rust:bullseye as builder +RUN apt-get update +RUN apt-get install -y protobuf-compiler +RUN apt-get install -y cmake curl + +RUN rustup toolchain install nightly-2023-01-26 +RUN rustup default nightly-2023-01-26 +RUN rustup target add x86_64-unknown-linux-gnu + +WORKDIR /app +COPY . /app +COPY --from=webBuilder /web/dist web/dist + +# RUN cargo build --release +RUN RUSTFLAGS='-C target-feature=+aes,+avx,+avx2,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2' cargo build --release --target x86_64-unknown-linux-gnu +RUN mv /app/target/x86_64-unknown-linux-gnu/release/zinc-oxide /app/target/release/ziox + +# FROM gcr.io/distroless/cc as runtime +FROM public.ecr.aws/debian/debian:bullseye-slim as runtime +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN apt-get install -y curl htop iftop sysstat procps lsof net-tools +RUN update-ca-certificates +COPY --from=builder /app/target/release/ziox / +CMD ["/ziox"] diff --git a/deploy/build/Dockerfile-tag.aarch64 b/deploy/build/Dockerfile-tag.aarch64 new file mode 100644 index 0000000000..3d0752ea56 --- /dev/null +++ b/deploy/build/Dockerfile-tag.aarch64 @@ -0,0 +1,36 @@ +FROM public.ecr.aws/docker/library/node:18.12.1-bullseye as webBuilder +WORKDIR /web +COPY ./web /web/ + +RUN npm install +RUN NODE_OPTIONS="--max-old-space-size=6192" npm run build + +FROM public.ecr.aws/docker/library/rust:bullseye as builder +RUN apt-get update +RUN apt-get install -y protobuf-compiler +RUN apt-get install -y cmake curl + +RUN rustup toolchain install nightly-2023-01-26 +RUN rustup default nightly-2023-01-26 +RUN rustup target add aarch64-unknown-linux-gnu + +WORKDIR /app +COPY . /app +COPY --from=webBuilder /web/dist web/dist + +# RUN cargo build --release +ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \ + CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc \ + CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ \ + RUSTFLAGS='-C target-feature=+aes,+crc,+fhm,+lse,+neon,+jsconv,+sha2' +RUN cargo build --release --target aarch64-unknown-linux-gnu +RUN mv /app/target/aarch64-unknown-linux-gnu/release/zinc-oxide /app/target/release/ziox + +FROM gcr.io/distroless/cc:latest-arm64 as runtime +# FROM public.ecr.aws/debian/debian:bullseye-slim as runtime +# RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +# RUN apt-get install -y curl htop iftop sysstat procps lsof net-tools +# RUN update-ca-certificates +COPY --from=builder /app/target/release/ziox / +COPY --from=builder /lib/aarch64-linux-gnu/liblzma.so.5 /lib/aarch64-linux-gnu/liblzma.so.5 +CMD ["/ziox"] diff --git a/deploy/build/Dockerfile-tag.amd64 b/deploy/build/Dockerfile-tag.amd64 new file mode 100644 index 0000000000..a2215cc297 --- /dev/null +++ b/deploy/build/Dockerfile-tag.amd64 @@ -0,0 +1,32 @@ +FROM public.ecr.aws/docker/library/node:18.12.1-bullseye as webBuilder +WORKDIR /web +COPY ./web /web/ + +RUN npm install +RUN NODE_OPTIONS="--max-old-space-size=6192" npm run build + +FROM public.ecr.aws/docker/library/rust:bullseye as builder +RUN apt-get update +RUN apt-get install -y protobuf-compiler +RUN apt-get install -y cmake curl + +RUN rustup toolchain install nightly-2023-01-26 +RUN rustup default nightly-2023-01-26 +RUN rustup target add x86_64-unknown-linux-gnu + +WORKDIR /app +COPY . /app +COPY --from=webBuilder /web/dist web/dist + +# RUN cargo build --release +RUN RUSTFLAGS='-C target-feature=+aes,+avx,+avx2,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2' cargo build --release --target x86_64-unknown-linux-gnu +RUN mv /app/target/x86_64-unknown-linux-gnu/release/zinc-oxide /app/target/release/ziox + +FROM gcr.io/distroless/cc as runtime +# FROM public.ecr.aws/debian/debian:bullseye-slim as runtime +# RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +# RUN apt-get install -y curl htop iftop sysstat procps lsof net-tools +# RUN update-ca-certificates +COPY --from=builder /app/target/release/ziox / +COPY --from=builder /lib/x86_64-linux-gnu/liblzma.so.5 /lib/x86_64-linux-gnu/liblzma.so.5 +CMD ["/ziox"] diff --git a/deploy/build/Dockerfile.aarch64 b/deploy/build/Dockerfile.aarch64 new file mode 100644 index 0000000000..bf1d1ec5fa --- /dev/null +++ b/deploy/build/Dockerfile.aarch64 @@ -0,0 +1,36 @@ +FROM public.ecr.aws/docker/library/node:18.12.1-bullseye as webBuilder +WORKDIR /web +COPY ./web /web/ + +RUN npm install +RUN NODE_OPTIONS="--max-old-space-size=6192" npm run build + +FROM public.ecr.aws/docker/library/rust:bullseye as builder +RUN apt-get update +RUN apt-get install -y protobuf-compiler +RUN apt-get install -y cmake curl + +RUN rustup toolchain install nightly-2023-01-26 +RUN rustup default nightly-2023-01-26 +RUN rustup target add aarch64-unknown-linux-gnu + +WORKDIR /app +COPY . /app +COPY --from=webBuilder /web/dist web/dist + +# RUN cargo build --release +ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \ + CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc \ + CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ \ + RUSTFLAGS='-C target-feature=+aes,+crc,+fhm,+lse,+neon,+jsconv,+sha2' +RUN cargo build --release --target aarch64-unknown-linux-gnu +RUN mv /app/target/aarch64-unknown-linux-gnu/release/zinc-oxide /app/target/release/ziox + +# FROM gcr.io/distroless/cc:latest-arm64 as runtime +# FROM gcr.io/distroless/cc:latest-arm64 as runtime +FROM public.ecr.aws/debian/debian:bullseye-slim as runtime +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN apt-get install -y curl htop iftop sysstat procps lsof net-tools +RUN update-ca-certificates +COPY --from=builder /app/target/release/ziox / +CMD ["/ziox"] diff --git a/deploy/build/buildspec-arm.yml b/deploy/build/buildspec-arm.yml new file mode 100644 index 0000000000..7628bff2a8 --- /dev/null +++ b/deploy/build/buildspec-arm.yml @@ -0,0 +1,59 @@ +version: 0.2 + +phases: + pre_build: + commands: + - aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 058694856476.dkr.ecr.us-west-2.amazonaws.com + - aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/zinclabs + + build: + commands: + - pwd + - GIT_TAG="$(git describe --tags --abbrev=0)" + - GIT_HASH="$(git rev-parse --short HEAD)" + - docker build -t ziox:latest-arm64 -f deploy/build/Dockerfile.aarch64 . + + - docker tag ziox:latest-arm64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-arm64 + - docker tag ziox:latest-arm64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-arm64 + + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-arm64 + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-arm64 + + - echo 'Pull amd64 image' + - docker pull 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-amd64 + - docker pull 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-amd64 + + - echo 'Create manifests' + - docker manifest create 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-amd64 --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-arm64 + - docker manifest create 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-amd64 --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-arm64 + + - echo 'Push manifests' + - docker manifest push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev + - docker manifest push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest + + # for ecr-public + - docker tag ziox:latest-arm64 public.ecr.aws/zinclabs/zinc-oxide:latest-arm64 + - docker tag ziox:latest-arm64 public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev-arm64 + + - docker push public.ecr.aws/zinclabs/zinc-oxide:latest-arm64 + - docker push public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev-arm64 + + - echo 'Pull amd64 image' + - docker pull 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-amd64 + - docker pull 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-amd64 + - docker tag 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-amd64 public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev-amd64 + - docker tag 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-amd64 public.ecr.aws/zinclabs/zinc-oxide:latest-amd64 + - docker push public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev-amd64 + - docker push public.ecr.aws/zinclabs/zinc-oxide:latest-amd64 + + - echo 'Create manifests' + - docker manifest create public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev --amend public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev-amd64 --amend public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev-arm64 + - docker manifest create public.ecr.aws/zinclabs/zinc-oxide:latest --amend public.ecr.aws/zinclabs/zinc-oxide:latest-amd64 --amend public.ecr.aws/zinclabs/zinc-oxide:latest-arm64 + + - echo 'Push manifests' + - docker manifest push public.ecr.aws/zinclabs/zinc-oxide:$GIT_TAG-$GIT_HASH-dev + - docker manifest push public.ecr.aws/zinclabs/zinc-oxide:latest + +# cache: +# paths: +# - ./target diff --git a/deploy/build/buildspec-tag-amd64.yml b/deploy/build/buildspec-tag-amd64.yml new file mode 100644 index 0000000000..a9c5928309 --- /dev/null +++ b/deploy/build/buildspec-tag-amd64.yml @@ -0,0 +1,22 @@ +version: 0.2 + +phases: + pre_build: + commands: + - aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 058694856476.dkr.ecr.us-west-2.amazonaws.com + + build: + commands: + - pwd + - GIT_TAG="$(git describe --tags --abbrev=0)" + - docker build -t ziox:latest-amd64 -f deploy/build/Dockerfile-tag.amd64 . + + - docker tag ziox:latest-amd64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG-amd64 + - docker tag ziox:latest-amd64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest-amd64 + + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG-amd64 + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest-amd64 + +# cache: +# paths: +# - ./target diff --git a/deploy/build/buildspec-tag-arm64.yml b/deploy/build/buildspec-tag-arm64.yml new file mode 100644 index 0000000000..f8db2e482d --- /dev/null +++ b/deploy/build/buildspec-tag-arm64.yml @@ -0,0 +1,34 @@ +version: 0.2 + +phases: + pre_build: + commands: + - aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 058694856476.dkr.ecr.us-west-2.amazonaws.com + + build: + commands: + - pwd + - GIT_TAG="$(git describe --tags --abbrev=0)" + - docker build -t ziox:latest-arm64 -f deploy/build/Dockerfile-tag.aarch64 . + + - docker tag ziox:latest-arm64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest-arm64 + - docker tag ziox:latest-arm64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG-arm64 + + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest-arm64 + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG-arm64 + - + - echo 'Pull amd64 image' + - docker pull 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG-amd64 + - docker pull 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest-amd64 + + - echo 'Create manifests' + - docker manifest create 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG-amd64 --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG-arm64 + - docker manifest create 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest-amd64 --amend 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest-arm64 + + - echo 'Push manifests' + - docker manifest push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:$GIT_TAG + - docker manifest push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox:latest + +# cache: +# paths: +# - ./target diff --git a/deploy/build/buildspec-test.yml b/deploy/build/buildspec-test.yml new file mode 100644 index 0000000000..a2bc81c399 --- /dev/null +++ b/deploy/build/buildspec-test.yml @@ -0,0 +1,21 @@ +version: 0.2 + +phases: + pre_build: + commands: + - apt-get update + - apt-get install -y bc + - apt-get install -y protobuf-compiler + - curl https://sh.rustup.rs -sSf | sh -s -- -y + - . "$HOME/.cargo/env" + - rustup toolchain install nightly-2023-01-26 + - rustup toolchain list + - rustup default nightly-2023-01-26 + - export RUSTFLAGS='-C target-cpu=native' + - cargo install cargo-llvm-cov + + build: + commands: + - pwd + - cargo clippy -- -A clippy::uninlined_format_args + - ./coverage.sh diff --git a/deploy/build/buildspec.yml b/deploy/build/buildspec.yml new file mode 100644 index 0000000000..2874b971af --- /dev/null +++ b/deploy/build/buildspec.yml @@ -0,0 +1,24 @@ +version: 0.2 + +phases: + pre_build: + commands: + - aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 058694856476.dkr.ecr.us-west-2.amazonaws.com + + build: + commands: + - pwd + # - git config --global --add safe.directory /codebuild/output/srcDownload/src + - GIT_TAG="$(git describe --tags --abbrev=0)" + - GIT_HASH="$(git rev-parse --short HEAD)" + - docker build -t ziox:latest-amd64 -f deploy/build/Dockerfile . + + - docker tag ziox:latest-amd64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-amd64 + - docker tag ziox:latest-amd64 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-amd64 + + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:$GIT_TAG-$GIT_HASH-dev-amd64 + - docker push 058694856476.dkr.ecr.us-west-2.amazonaws.com/ziox-dev:latest-amd64 + +# cache: +# paths: +# - ./target diff --git a/examples/actix-web.rs b/examples/actix-web.rs new file mode 100644 index 0000000000..da3e1687e6 --- /dev/null +++ b/examples/actix-web.rs @@ -0,0 +1,37 @@ +use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder}; +use opentelemetry_proto::{self, tonic::collector::trace::v1::ExportTraceServiceRequest}; +use prost::Message; + +#[get("/")] +async fn hello() -> impl Responder { + HttpResponse::Ok().body("Hello world!") +} + +#[post("/echo")] +async fn echo(req_body: String) -> impl Responder { + HttpResponse::Ok().body(req_body) +} + +async fn manual_hello() -> impl Responder { + HttpResponse::Ok().body("Hey there!") +} + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + HttpServer::new(|| { + App::new() + .service(hello) + .service(echo) + .route("/hey", web::get().to(manual_hello)) + .service(web::resource("/v1/traces").to(trace)) + }) + .bind(("127.0.0.1", 4317))? + .run() + .await +} + +async fn trace(body: actix_web::web::Bytes) -> String { + let request = ExportTraceServiceRequest::decode(body).expect("Invalid protobuf"); + print!("{:?}", request); + format!("Done") +} diff --git a/examples/datafusion.rs b/examples/datafusion.rs new file mode 100644 index 0000000000..f182631675 --- /dev/null +++ b/examples/datafusion.rs @@ -0,0 +1,50 @@ +use std::sync::Arc; + +use datafusion::arrow::array::Int32Array; +use datafusion::arrow::array::StringArray; +use datafusion::arrow::datatypes::{DataType, Field, Schema}; +use datafusion::arrow::record_batch::RecordBatch; +use datafusion::datasource::MemTable; +use datafusion::error::Result; +use datafusion::from_slice::FromSlice; +use datafusion::prelude::{cast, col, SessionContext}; + +/// This example demonstrates how to use the DataFrame API against in-memory data. +#[tokio::main] +async fn main() -> Result<()> { + // define a schema. + let schema = Arc::new(Schema::new(vec![Field::new("f", DataType::Int32, false)])); + // define data. + let batch = RecordBatch::try_new( + schema.clone(), + vec![Arc::new(Int32Array::from_slice([1, 10, 10, 100]))], + )?; + + let schema2 = Arc::new(Schema::new(vec![Field::new("f", DataType::Utf8, false)])); + let batch2 = RecordBatch::try_new( + schema2.clone(), + vec![Arc::new(StringArray::from_slice(["2", "20", "20", "200"]))], + )?; + + // declare a new context. In spark API, this corresponds to a new spark SQLsession + let ctx = SessionContext::new(); + + // declare a table in memory. In spark API, this corresponds to createDataFrame(...). + let provider = MemTable::try_new(schema.clone(), vec![vec![batch]])?; + ctx.register_table("t", Arc::new(provider))?; + let df = ctx.table("t").await?; + let df1 = df.select(vec![cast(col("f"), DataType::Utf8)])?; + + let provider2 = MemTable::try_new(schema2.clone(), vec![vec![batch2]])?; + ctx.register_table("t2", Arc::new(provider2))?; + let df2 = ctx.table("t2").await?; + + let new_df = df1.union(df2.clone())?; + ctx.register_table("final", new_df.into_view())?; + + let result = ctx.sql("select * from final").await?; + println!("{:?}", result.schema()); + result.show().await.unwrap(); + + Ok(()) +} diff --git a/examples/env_config.rs b/examples/env_config.rs new file mode 100644 index 0000000000..a7d4a5f2b0 --- /dev/null +++ b/examples/env_config.rs @@ -0,0 +1,35 @@ +use dotenv_config::EnvConfig; + +#[derive(Debug, EnvConfig)] +struct Config { + #[env_config(default = "192.168.2.1")] + server_addr: String, + server_mode: bool, + #[env_config(name = "ZINC_FOO", default = true)] + foo: bool, + #[env_config(name = "ZINC_BAR", default = 123456)] + bar: Option, + rr: Redis, +} + +#[derive(Debug, EnvConfig)] +struct Redis { + addr: String, + port: String, + auth: String, + #[env_config(name = "ZINC_REDIS_TIMEOUT", default = 30)] + timeout: i32, +} + +fn main() { + let cfg = Config::init().unwrap(); + println!("{:#?}", cfg); + println!("{}", cfg.server_addr); + println!("{}", cfg.server_mode); + println!("{}", cfg.foo); + println!("{:?}", cfg.bar); + println!("{:?}", cfg.rr.addr); + println!("{:?}", cfg.rr.port); + println!("{:?}", cfg.rr.auth); + println!("{:?}", cfg.rr.timeout); +} diff --git a/examples/etcd.rs b/examples/etcd.rs new file mode 100644 index 0000000000..35e4d19954 --- /dev/null +++ b/examples/etcd.rs @@ -0,0 +1,93 @@ +use async_once::AsyncOnce; +use etcd_client::{Client, Error}; +use lazy_static::lazy_static; + +lazy_static! { + static ref CLIENT: AsyncOnce = + AsyncOnce::new(async { Client::connect(["localhost:2379"], None).await.unwrap() }); +} + +#[tokio::main] +async fn main() -> Result<(), Error> { + // let mut client = Client::connect(["localhost:2379"], None).await?; + let mut tasks = Vec::new(); + for i in 0..10 { + let mut client = CLIENT.get().await.clone(); + let i = i; + let task = tokio::task::spawn(async move { + let _ret = test(&mut client, i).await; + }); + tasks.push(task); + } + + for task in tasks { + task.await.unwrap(); + } + + // do 1000k write test + // let mut client = CLIENT.get().await.clone(); + // write_1000k(&mut client).await?; + // read_1000k(&mut client).await?; + + Ok(()) +} + +// async fn write_1000k(client: &mut Client) -> Result<(), Error> { +// for i in 0..1000000 { +// let key = format!( +// "/btest/default/olympics/2022/10/03/10/6982652937134804993_{}.parquet", +// i +// ); +// let value = format!( +// r##"{{"min_ts":1664794181570777,"max_ts":1664794188309667,"records":60000,"original_size":13605746,"compressed_size":520701}}"## +// ); +// client.put(key.as_bytes(), value.as_bytes(), None).await?; +// } +// Ok(()) +// } + +// #[derive(Clone, Debug, serde::Deserialize)] +// struct fileInfo { +// min_ts: u64, +// max_ts: u64, +// records: u64, +// original_size: u64, +// compressed_size: u64, +// } + +// async fn read_1000k(client: &mut Client) -> Result<(), Error> { +// let key = "/btest/".to_string(); +// let opt = GetOptions::new().with_prefix(); +// let ret = client.get(key.as_bytes(), Some(opt)).await?; +// let mut files = HashMap::with_capacity(1000000); +// for kv in ret.kvs() { +// let key = String::from_utf8(kv.key().to_vec()).unwrap(); +// // let value = String::from_utf8(kv.value().to_vec()).unwrap(); +// let value:fileInfo = serde_json::from_str(kv.value_str().unwrap()).unwrap(); +// // println!("key: {}, value: {}", key, value); +// for i in 0..10 { +// let key = format!("{}/{}", key, i); +// files.insert(key, value.clone()); +// } +// } + +// println!("files len: {}", files.len()); + +// tokio::time::sleep(tokio::time::Duration::from_secs(10)).await; + +// Ok(()) +// } + +async fn test(client: &mut Client, i: usize) -> Result<(), Error> { + // let mut client = Client::connect(["localhost:2379"], None).await?; + // put kv + let key = format!("key_{}", i); + let val = format!("value_{}", i); + client.put(key.clone(), val, None).await?; + // get kv + let resp = client.get(key.clone(), None).await?; + if let Some(kv) = resp.kvs().first() { + println!("Get kv: {{{}: {}}}", kv.key_str()?, kv.value_str()?); + } + Ok(()) +} diff --git a/examples/event_client.rs b/examples/event_client.rs new file mode 100644 index 0000000000..8fb2a970ca --- /dev/null +++ b/examples/event_client.rs @@ -0,0 +1,48 @@ +use cluster::event_client::EventClient; +use http_auth_basic::Credentials; +use tonic::{codec::CompressionEncoding, metadata::MetadataValue, transport::Channel, Request}; +use zinc_oxide::infra::config::CONFIG; + +pub mod cluster { + tonic::include_proto!("cluster"); +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let credentials = Credentials::new(&CONFIG.auth.username, &CONFIG.auth.password); + let credentials = credentials.as_http_header(); + let token: MetadataValue<_> = credentials.parse()?; + let org_id: MetadataValue<_> = "default".parse()?; + let channel = Channel::from_static("http://127.0.0.1:5081") + .connect() + .await?; + + let mut client = EventClient::with_interceptor(channel, move |mut req: Request<()>| { + req.metadata_mut().insert("authorization", token.clone()); + req.metadata_mut() + .insert(CONFIG.grpc.org_header_key.as_str(), org_id.clone()); + Ok(req) + }); + client = client + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + + let mut req_query = cluster::FileList::default(); + req_query.items.push(cluster::FileKey { + key: "default/logs/olympics/2022/10/03/10/6982652937134804993_1.parquet".to_string(), + meta: Some(cluster::FileMeta::default()), + deleted: false, + }); + req_query.items.push(cluster::FileKey { + key: "default/logs/olympics/2022/10/03/10/6982652937134804993_2.parquet".to_string(), + meta: Some(cluster::FileMeta::default()), + deleted: true, + }); + + let request = tonic::Request::new(req_query); + + let response = client.send_file_list(request).await?; + + println!("RESPONSE={:?}", response); + Ok(()) +} diff --git a/examples/generate_openapi.rs b/examples/generate_openapi.rs new file mode 100644 index 0000000000..de48b14d26 --- /dev/null +++ b/examples/generate_openapi.rs @@ -0,0 +1,22 @@ +use utoipa::OpenApi; +use zinc_oxide::handler::http::request::stream::*; +use zinc_oxide::meta::stream; +use zinc_oxide::meta::StreamType; + +#[tokio::main] +async fn main() { + #[derive(OpenApi)] + #[openapi( + paths(list_streams), + components(schemas( + stream::ListStream, + stream::Stream, + StreamType, + stream::Stats, + stream::StreamProperty, + )) + )] + struct ApiDoc; + + println!("{}", ApiDoc::openapi().to_pretty_json().unwrap()); +} diff --git a/examples/json.rs b/examples/json.rs new file mode 100644 index 0000000000..5d267bf390 --- /dev/null +++ b/examples/json.rs @@ -0,0 +1,20 @@ +use std::{ + env, + fs::File, + io::{BufRead, BufReader}, + process, +}; + +fn main() { + let file = env::args().nth(1).unwrap_or_else(|| { + eprintln!("Usage: {} ", env::args().next().unwrap()); + process::exit(1) + }); + let f = File::open(file).unwrap(); + let reader = BufReader::new(f); + for line in reader.lines() { + let line = line.unwrap(); + let data: serde_json::Value = serde_json::from_str(&line).unwrap(); + println!("{:?}", data.is_null()); + } +} diff --git a/examples/lock_file.rs b/examples/lock_file.rs new file mode 100644 index 0000000000..7f4cad485e --- /dev/null +++ b/examples/lock_file.rs @@ -0,0 +1,102 @@ +use std::{ + fs::OpenOptions, + io::{BufWriter, ErrorKind, Write}, + thread, + time::Duration, +}; + +use cluFlock::{ExclusiveFlock, FlockLock}; + +fn main() { + println!("Checking lock"); + let handle = thread::spawn(|| { + for i in 1..3 { + let file = OpenOptions::new() + .write(true) + .create(true) + .append(true) + .open("./test_file.json") + .unwrap(); + + let file_lock = ExclusiveFlock::try_lock(&file); + match file_lock { + Ok(_) => println!("{:?} locked using thread {}", file_lock, i), + Err(_) => println!(" ****** Create New File "), + } + + println!("################# Checking if lock exists"); + + let is_locked = is_locked("./test_file.json").unwrap(); + + println!("################# lock exists {}", is_locked); + let mut writer = BufWriter::new(&file); + writer + .write( + format!("Writing using thread {} ", i) + .to_string() + .as_bytes(), + ) + .unwrap(); + writer.write(b"\n").unwrap(); + + thread::sleep(Duration::from_millis(5)); + writer + .write( + format!("Somthing using thread after sleep {} ", i) + .to_string() + .as_bytes(), + ) + .unwrap(); + writer.write(b"\n").unwrap(); + //file_lock.unlock().unwrap(); + println!("unlocked by thread {}", i); + } + }); + + for i in 1..3 { + let file = OpenOptions::new() + .write(true) + .create(true) + .append(true) + .open("./test_file.json") + .unwrap(); + + let file_lock = ExclusiveFlock::wait_lock(&file).unwrap(); + println!("{:?} locked using Main Attempt {}", file_lock, i); + let mut writer = BufWriter::new(&file); + writer + .write(format!("Writing Main Attempt{}", i).to_string().as_bytes()) + .unwrap(); + writer.write(b"\n").unwrap(); + + writer + .write( + format!("Somthing Main Attempt After sleep{} ", i) + .to_string() + .as_bytes(), + ) + .unwrap(); + writer.write(b"\n").unwrap(); + thread::sleep(Duration::from_millis(10)); + file_lock.unlock().unwrap(); + println!("unlocked using Main Attempt {}", i); + } + handle.join().unwrap(); + + println!("Checking if lock exists before existing"); + let is_locked = is_locked("./test_file.json").unwrap(); + println!("lock exists {}", is_locked); +} + +pub fn is_locked(path: &str) -> Result { + let file = OpenOptions::new().read(true).write(false).open(path)?; + + FlockLock::try_exclusive_lock_fn( + &file, + |_| Ok(false), + |e| match e.kind() { + ErrorKind::WouldBlock => Ok(true), // ignore err + _ => Err(e.into_err()), // into_err: FlockErr -> std::io::Error + }, + ) +} diff --git a/examples/memchr.rs b/examples/memchr.rs new file mode 100644 index 0000000000..572a8f9f3d --- /dev/null +++ b/examples/memchr.rs @@ -0,0 +1,24 @@ +use memchr::memmem; +use std::env; +use std::time::Instant; + +fn main() { + let haystack = r##"{"Athlete":"PAHUD DE MORTANGES, Charles Ferdinand","City":"Los Angeles","Country":"NED","Discipline":"Eventing","Event":"Team","Gender":"Men","Medal":"Silver","Season":"summer","Sport":"Equestrian","Year":1932,"_timestamp":"2022-08-31T03:32:44.555229+00:00"}"##; + let haystackb = haystack.as_bytes(); + + let mode = env::args().nth(1).unwrap_or("std".to_string()); + println!("arch: {:?}, mode: {}", env::consts::ARCH, mode); + let start_time = Instant::now(); + + if mode == "memchr" { + for _i in 1..1000000 { + memmem::find(haystackb, b"NED"); + } + } else { + for _i in 1..1000000 { + haystack.contains("NED"); + } + } + + println!("Time elapsed is: {:?}", start_time.elapsed()); +} diff --git a/examples/prometheus.rs b/examples/prometheus.rs new file mode 100644 index 0000000000..3da753e83e --- /dev/null +++ b/examples/prometheus.rs @@ -0,0 +1,97 @@ +use bytes::{Bytes, BytesMut}; +use chrono::Utc; +use prost::Message; +use tokio::time::sleep; +use tokio::time::Duration; +pub mod prometheus_prot { + include!(concat!(env!("OUT_DIR"), "/prometheus.rs")); +} + +#[tokio::main] +async fn main() { + let replicas = ["prom-k8s-0", "prom-k8s-2", "prom-k8s-0"]; + let labels = [ + "grafana_api_dashboard_save_milliseconds_count", + "kube_cronjob_info", + "alertmanager_config_hash", + ]; + let handle = tokio::spawn(async move { + for i in 1..10 { + sleep(Duration::from_secs(1)).await; + let client = reqwest::Client::new(); + let mut loc_lable: Vec = vec![]; + loc_lable.push(prometheus_prot::Label { + name: "__name__".to_string(), + value: labels[i % 3].to_string(), + }); + + loc_lable.push(prometheus_prot::Label { + name: "cluster".to_string(), + value: "prom-k8s".to_string(), + }); + loc_lable.push(prometheus_prot::Label { + name: "__replica__".to_string(), + value: replicas[i % 3].to_string(), + }); + + let mut loc_samples: Vec = vec![]; + + for i in 1..100 { + loc_samples.push(prometheus_prot::Sample { + value: i as f64, + timestamp: Utc::now().timestamp_micros(), + }); + } + loc_samples.push(prometheus_prot::Sample { + value: f64::NEG_INFINITY, + timestamp: Utc::now().timestamp_micros(), + }); + loc_samples.push(prometheus_prot::Sample { + value: f64::INFINITY, + timestamp: Utc::now().timestamp_micros(), + }); + + loc_samples.push(prometheus_prot::Sample { + value: 0.0_f64 / 0.0_f64, + timestamp: Utc::now().timestamp_micros(), + }); + println!("Number of samples {}", loc_samples.len()); + let loc_exemp: Vec = vec![]; + let loc_hist: Vec = vec![]; + + let ts = prometheus_prot::TimeSeries { + labels: loc_lable, + samples: loc_samples, + exemplars: loc_exemp, + histograms: loc_hist, + }; + + let metadata: Vec = vec![]; + let wr_req: prometheus_prot::WriteRequest = prometheus_prot::WriteRequest { + timeseries: vec![ts], + metadata, + }; + let mut out = BytesMut::with_capacity(wr_req.encoded_len()); + wr_req.encode(&mut out).expect("Out of memory"); + let body = snap_block(out.into()); + + let req = client + .post("http://localhost:5080/api/nexus/prometheus/write") + .header("Authorization", "Basic YWRtaW46Q29tcGxleHBhc3MjMTIz") + .header("X-Prometheus-Remote-Write-Version", "0.1.0") + .header("Content-Encoding", "snappy") + .header("Content-Type", "application/x-protobuf") + .body(body); + + let res = req.send().await.unwrap(); + println!("{}", res.status()); + } + }); + let _out = handle.await.unwrap(); +} + +fn snap_block(data: Bytes) -> Vec { + snap::raw::Encoder::new() + .compress_vec(&data) + .expect("Out of memory") +} diff --git a/examples/search_client.rs b/examples/search_client.rs new file mode 100644 index 0000000000..9921d9904c --- /dev/null +++ b/examples/search_client.rs @@ -0,0 +1,68 @@ +use cluster::search_client::SearchClient; +use cluster::SearchRequest; +use http_auth_basic::Credentials; +use tonic::{codec::CompressionEncoding, metadata::MetadataValue, transport::Channel, Request}; +use zinc_oxide::infra::config::CONFIG; + +pub mod cluster { + tonic::include_proto!("cluster"); +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let credentials = Credentials::new(&CONFIG.auth.username, &CONFIG.auth.password); + let credentials = credentials.as_http_header(); + let token: MetadataValue<_> = credentials.parse()?; + let org_id: MetadataValue<_> = "default".parse()?; + let channel = Channel::from_static("http://127.0.0.1:5081") + .connect() + .await?; + + let mut client = SearchClient::with_interceptor(channel, move |mut req: Request<()>| { + req.metadata_mut().insert("authorization", token.clone()); + req.metadata_mut() + .insert(CONFIG.grpc.org_header_key.as_str(), org_id.clone()); + Ok(req) + }); + client = client + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + + let req_query = cluster::SearchQuery { + sql: "select * from k8s".to_string(), + sql_mode: "".to_string(), + from: 0, + size: 10, + start_time: 0, + end_time: 0, + track_total_hits: true, + }; + // let mut aggs = AHashMap::new(); + // aggs.insert("histogram".to_string(),"select histogram(_timestamp, '1 minute') AS key, count(*) AS num from query GROUP BY key ORDER BY key".to_string()); + // let mut file_list = Vec::with_capacity(100000); + // for _ in 0..2 { + // file_list + // .push("default/logs/olympics/2022/10/03/10/6982652937134804993_1.parquet".to_string()); + // file_list + // .push("default/logs/olympics/2022/10/03/10/6982655327841947649_1.parquet".to_string()); + // file_list + // .push("default/logs/olympics/2022/10/03/11/6982665068089577473_1.parquet".to_string()); + // } + + let request = tonic::Request::new(SearchRequest { + job: Some(cluster::Job::default()), + org_id: "default".to_string(), + stype: cluster::SearchType::User.into(), + query: Some(req_query), + aggs: Vec::new(), + partition: None, + file_list: Vec::new(), + stream_type: "logs".to_string(), + }); + + let response = client.search(request).await?; + + println!("{}", serde_json::to_string(&response.into_inner()).unwrap()); + + Ok(()) +} diff --git a/examples/simd-json.rs b/examples/simd-json.rs new file mode 100644 index 0000000000..4def02dda9 --- /dev/null +++ b/examples/simd-json.rs @@ -0,0 +1,26 @@ +use std::env; + +fn main() -> Result<(), anyhow::Error> { + let jsonstr = br#"{"kubernetes.annotations.checksum/config":"7e233732c5d6164e2408296cc5d77749803905c56148fdfc4c92e497abd25093", "kubernetes.annotations.checksum/luascripts":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "kubernetes.annotations.kubernetes.io/psp":"eks.privileged", "kubernetes.container_image":"cr.fluentbit.io/fluent/fluent-bit:1.9.7", "kubernetes.container_name":"fluent-bit", "kubernetes.docker_id":"d0fe1d22906c6918c71322c700f6a9b00f2c47eb14c460a05c709694c7de1644", "kubernetes.host":"ip-10-1-81-177.us-west-2.compute.internal", "kubernetes.labels.app.kubernetes.io/instance":"fluent-bit", "kubernetes.labels.app.kubernetes.io/name":"fluent-bit", "kubernetes.labels.controller-revision-hash":"6db46d9688", "kubernetes.labels.pod-template-generation":"1", "kubernetes.namespace_name":"logging", "kubernetes.pod_id":"f3ce6981-3add-472b-bce5-a4e561d3019d", "kubernetes.pod_name":"fluent-bit-5x4b7", "requestId":"a01ef7fc-0001-bc3a-51d1-0183cfa1c1ec", "stream":"stderr", "time":"2022-10-13T04:37:08.253116988Z"}"#; + let mut jsonstr = jsonstr.to_vec(); + + let mode = env::args().nth(1).unwrap_or("std".to_string()); + println!("arch: {:?}, mode: {}", env::consts::ARCH, mode); + let start_time = std::time::Instant::now(); + + let n = 1000000; + if mode == "simd" { + for _ in 0..n { + let _val: serde_json::Value = simd_json::serde::from_slice(&mut jsonstr).unwrap(); + // println!("{}", val.get("kubernetes.pod_id").unwrap().as_str().unwrap()); + } + } else { + for _ in 0..n { + let _val: serde_json::Value = serde_json::from_slice(&jsonstr).unwrap(); + // println!("{}", val.get("kubernetes.pod_id").unwrap().as_str().unwrap()); + } + } + + println!("Time elapsed is: {:?}", start_time.elapsed()); + Ok(()) +} diff --git a/examples/simple_udf_sql.rs b/examples/simple_udf_sql.rs new file mode 100644 index 0000000000..2839872f4f --- /dev/null +++ b/examples/simple_udf_sql.rs @@ -0,0 +1,152 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +use datafusion::{ + arrow::{ + array::{ArrayRef, Float32Array, Float64Array}, + datatypes::DataType, + record_batch::RecordBatch, + }, + logical_expr::Volatility, +}; + +use datafusion::from_slice::FromSlice; +use datafusion::prelude::*; +use datafusion::{error::Result, physical_plan::functions::make_scalar_function}; +use std::sync::Arc; + +// create local execution context with an in-memory table +fn create_context() -> Result { + use datafusion::arrow::datatypes::{Field, Schema}; + use datafusion::datasource::MemTable; + // define a schema. + let schema = Arc::new(Schema::new(vec![ + Field::new("a", DataType::Float32, false), + Field::new("b", DataType::Float64, false), + ])); + + // define data. + let batch = RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(Float32Array::from_slice([2.1, 3.1, 4.1, 5.1])), + Arc::new(Float64Array::from_slice([1.0, 2.0, 3.0, 4.0])), + ], + )?; + + // declare a new context. In spark API, this corresponds to a new spark SQLsession + let ctx = SessionContext::new(); + + // declare a table in memory. In spark API, this corresponds to createDataFrame(...). + let provider = MemTable::try_new(schema, vec![vec![batch]])?; + ctx.register_table("t", Arc::new(provider))?; + Ok(ctx) +} + +/// In this example we will declare a single-type, single return type UDF that exponentiates f64, a^b +#[tokio::main] +async fn main() -> Result<()> { + let ctx = create_context()?; + + // First, declare the actual implementation of the calculation + let pow = |args: &[ArrayRef]| { + // in DataFusion, all `args` and output are dynamically-typed arrays, which means that we need to: + // 1. cast the values to the type we want + // 2. perform the computation for every element in the array (using a loop or SIMD) and construct the result + + // this is guaranteed by DataFusion based on the function's signature. + assert_eq!(args.len(), 2); + + // 1. cast both arguments to f64. These casts MUST be aligned with the signature or this function panics! + let base = &args[0] + .as_any() + .downcast_ref::() + .expect("cast failed"); + let exponent = &args[1] + .as_any() + .downcast_ref::() + .expect("cast failed"); + + // this is guaranteed by DataFusion. We place it just to make it obvious. + assert_eq!(exponent.len(), base.len()); + + // 2. perform the computation + let array = base + .iter() + .zip(exponent.iter()) + .map(|(base, exponent)| { + match (base, exponent) { + // in arrow, any value can be null. + // Here we decide to make our UDF to return null when either base or exponent is null. + (Some(base), Some(exponent)) => Some(base.powf(exponent)), + _ => None, + } + }) + .collect::(); + + // `Ok` because no error occurred during the calculation (we should add one if exponent was [0, 1[ and the base < 0 because that panics!) + // `Arc` because arrays are immutable, thread-safe, trait objects. + Ok(Arc::new(array) as ArrayRef) + }; + // the function above expects an `ArrayRef`, but DataFusion may pass a scalar to a UDF. + // thus, we use `make_scalar_function` to decorare the closure so that it can handle both Arrays and Scalar values. + let pow = make_scalar_function(pow); + + // Next: + // * give it a name so that it shows nicely when the plan is printed + // * declare what input it expects + // * declare its return type + let pow = create_udf( + "pow", + // expects two f64 + vec![DataType::Float64, DataType::Float64], + // returns f64 + Arc::new(DataType::Float64), + Volatility::Immutable, + pow, + ); + + // at this point, we can use it or register it, depending on the use-case: + // * if the UDF is expected to be used throughout the program in different contexts, + // we can register it, and call it later: + ctx.register_udf(pow.clone()); // clone is only required in this example because we show both usages + + // * if the UDF is expected to be used directly in the scope, `.call` it directly: + // let expr = pow.call(vec![col("a"), col("b")]); + + // get a DataFrame from the context + let df = ctx.table("t").await?; + + let df_with_all = df.with_column("_all", col("a") + col("b"))?; + println!("Printing schema"); + println!("{}", df_with_all.schema()); + ctx.register_table("t_new", df_with_all.into_view())?; + + // println!("{:?}", ctx.tables().unwrap()); + let result = ctx + .sql( + "SELECT a, b , _all FROM t_new ; + ", + ) + .await?; + + println!("Printing results"); + // print the results + result.show().await?; + + Ok(()) +} diff --git a/examples/sqlparser.rs b/examples/sqlparser.rs new file mode 100644 index 0000000000..5f31366252 --- /dev/null +++ b/examples/sqlparser.rs @@ -0,0 +1,36 @@ +use sqlparser::dialect::GenericDialect; +use sqlparser::parser::Parser; + +fn main() { + let sql = "SELECT a, b, 123, myfunc(b) \ + FROM table_1 \ + WHERE a > b AND b < 100 AND (c = 1 or b = 2) \ + ORDER BY a DESC, b ASC limit 10,0 "; + + let dialect = GenericDialect {}; // or AnsiDialect, or your own dialect ... + + let parse_result = Parser::parse_sql(&dialect, sql); + let ast = match parse_result { + Ok(stmt) => stmt, + Err(e) => { + println!("err {:?}", e); + vec![] + } + }; + + let query = ast + .iter() + .filter_map(|stmt| match stmt { + sqlparser::ast::Statement::Query(q) => Some(q), + _ => None, + }) + .next() + .unwrap(); + + // println!("AST: {:?}", query); + + println!("SQL->body: {:?}", query.body); + println!("SQL->order_by: {:?}", query.order_by); + println!("SQL->limit: {:?}", query.limit); + println!("SQL->offset: {:?}", query.offset); +} diff --git a/examples/threads.rs b/examples/threads.rs new file mode 100644 index 0000000000..e1992bc4cc --- /dev/null +++ b/examples/threads.rs @@ -0,0 +1,29 @@ +use std::sync::mpsc::channel; +use std::thread::{self, sleep}; +use std::time; + +fn main() { + let (tx, rx) = channel(); + + let receiver = thread::spawn(move || { + for received in rx { + println!("Got: {}", received); + } + // let value = rx.recv().expect("Unable to receive from channel"); + // println!("{value}"); + }); + + let sender = thread::spawn(move || { + for i in 0..100 { + tx.send(i).expect("Unable to send on channel"); + println!("send {}", i); + let ten_millis = time::Duration::from_millis(10); + let _now = time::Instant::now(); + + sleep(ten_millis); + } + }); + + receiver.join().expect("The receiver thread has panicked"); + sender.join().expect("The sender thread has panicked"); +} diff --git a/examples/time.rs b/examples/time.rs new file mode 100644 index 0000000000..d8e01605d0 --- /dev/null +++ b/examples/time.rs @@ -0,0 +1,80 @@ +use chrono::{DateTime, Datelike, Duration, FixedOffset, NaiveDateTime, TimeZone, Timelike, Utc}; +use std::ops::Sub; + +fn main() { + let s = "2022-09-27T00:00:00Z"; + let time = DateTime::parse_from_rfc3339(s).unwrap(); + println!("{:?}, {:?}", time, time.timestamp_micros()); + + let s = "2022-08-29 18:23:23"; + let fmt = "%Y-%m-%d %H:%M:%S"; + let time = NaiveDateTime::parse_from_str(s, fmt).unwrap(); + println!("{:?}", time); + + let s = "2022-09-27T18:23:23+08:00"; + let fmt = "%Y-%m-%dT%H:%M:%S%z"; + let time = NaiveDateTime::parse_from_str(s, fmt).unwrap(); + println!("{:?}", time); + + /* let dt = Utc.with_ymd_and_hms(2022, 9, 12, 2, 0, 0).unwrap(); // `2014-07-08T09:10:11Z` + println!("{:?}, {:?}", dt, dt.timestamp_micros()); + */ + let dt = Utc.timestamp_nanos(1661752800000000000); + println!("{:?}", dt); + + let dt = Utc.timestamp_nanos(1661731871000000000); + println!("{:?}", dt); + + let dt = Utc.timestamp_nanos(1662102671000000000); + println!("{:?}", dt); + + let dt = parse_time("2022-08-29 18:23:23").unwrap(); + println!("{:?}", dt.to_string()); + + let dt = parse_time("2022-08-29T18:23:23Z").unwrap(); + println!("{:?}", dt.to_string()); + + let dt = parse_time("2022-08-29T18:23:23+08:00").unwrap(); + println!("{:?}", dt.to_string()); + + let dt = parse_time("2022-10-13T04:38:52.260290946+08:00").unwrap(); + println!("{:?}", dt.to_string()); + let dt = parse_time("2022-10-13T04:38:52.260290946Z").unwrap(); + println!("{:?}", dt.to_string()); + let dt = parse_time("2022-10-13T04:38:52.260Z").unwrap(); + println!("{:?}", dt.to_string()); + let dt = parse_time("2022-10-13T04:38:52Z").unwrap(); + println!("{:?}", dt.to_string()); + let dt = parse_time("2022-10-13T04:38:52").unwrap(); + println!("{:?}", dt.to_string()); + let dt = parse_time("2022-10-13 04:38:52").unwrap(); + println!("{:?}", dt.to_string()); + + let dt = chrono::Utc::now().timestamp_micros(); + println!("{:?}", dt); + + let now = Utc::now().sub(Duration::hours(1)); + let offset: DateTime = Utc + .with_ymd_and_hms(now.year(), now.month(), now.day(), now.hour(), 0, 0) + .unwrap(); + println!("{:?}", now); + println!("{:?}", offset); +} + +fn parse_time(s: &str) -> Result, anyhow::Error> { + if s.contains('T') { + if s.len() == 19 { + let fmt = "%Y-%m-%dT%H:%M:%S"; + let ret = Utc.datetime_from_str(s, fmt)?; + Ok(ret.into()) + } else { + Ok(chrono::DateTime::parse_from_rfc3339(s)?) + } + } else if s.contains(',') { + Ok(chrono::DateTime::parse_from_rfc2822(s)?) + } else { + let fmt = "%Y-%m-%d %H:%M:%S"; + let ret = Utc.datetime_from_str(s, fmt)?; + Ok(ret.into()) + } +} diff --git a/examples/tracing.rs b/examples/tracing.rs new file mode 100644 index 0000000000..a867b18077 --- /dev/null +++ b/examples/tracing.rs @@ -0,0 +1,73 @@ +use opentelemetry::sdk::propagation::TraceContextPropagator; +use opentelemetry::trace::TraceError; +use opentelemetry::{global, sdk::trace as sdktrace}; +use opentelemetry::{ + trace::{TraceContextExt, Tracer}, + Key, +}; +use opentelemetry_otlp::WithExportConfig; +use std::collections::HashMap; +use std::error::Error; +use std::time::Duration; + +/* fn _init_tracer() -> Result { + opentelemetry_jaeger::new_pipeline() + .with_collector_endpoint("http://127.0.0.1:4317/v1/traces") + .with_service_name("trace-http-demo") + .install_batch(opentelemetry::runtime::TokioCurrentThread) +} */ + +fn init_tracer_otlp() -> Result { + let mut headers = HashMap::new(); + headers.insert( + "Authorization".to_string(), + "Basic YWRtaW46Q29tcGxleHBhc3MjMTIz".to_string(), + ); + // Start a new jaeger trace pipeline + global::set_text_map_propagator(TraceContextPropagator::new()); + + let exporter = opentelemetry_otlp::new_exporter() + .http() + .with_headers(headers) + .with_endpoint("http://localhost:5080/api/org1/traces"); + + opentelemetry_otlp::new_pipeline() + .tracing() + .with_exporter(exporter) + .install_batch(opentelemetry::runtime::Tokio) +} + +const LEMONS_KEY: Key = Key::from_static_str("ex.com/lemons"); +const ANOTHER_KEY: Key = Key::from_static_str("ex.com/another"); + +#[tokio::main] +async fn main() -> Result<(), Box> { + let _ = init_tracer_otlp()?; + let tracer = global::tracer("ex.com/basic"); + tracer.in_span("operation", |cx| { + let span = cx.span(); + println!("{:?}", span.span_context()); + span.add_event( + "Nice operation!".to_string(), + vec![Key::new("bogons").i64(100)], + ); + span.add_event( + "Nice operation!".to_string(), + vec![Key::new("bogons").i64(100)], + ); + span.set_attribute(ANOTHER_KEY.string("yes")); + + tracer.in_span("Sub operation...", |cx| { + let span = cx.span(); + span.set_attribute(LEMONS_KEY.string("five")); + + span.add_event("Sub span event", vec![]); + }); + }); + + // wait for 1 minutes so that we could see metrics being pushed via OTLP every 10 seconds. + tokio::time::sleep(Duration::from_secs(60)).await; + global::shutdown_tracer_provider(); + + Ok(()) +} diff --git a/examples/transform.rs b/examples/transform.rs new file mode 100644 index 0000000000..de8747ff8f --- /dev/null +++ b/examples/transform.rs @@ -0,0 +1,126 @@ +use boa_engine::Context; +use mlua::Lua; + +#[tokio::main] +async fn main() { + let num_recs = 100000; + let log = r#"[2022-10-16T09:36:43Z INFO actix_web::middleware::logger] 10.1.10.35 "POST /api/zinc_next/_bulk HTTP/1.1" 200 80 "-" "Fluent-Bit" 0.002320"#.to_string(); + use std::time::Instant; + + let now = Instant::now(); + lua_test(num_recs, log.clone()).await; + let elapsed = now.elapsed(); + println!(" Lua Elapsed: {:.2?}", elapsed); + + let now2 = Instant::now(); + v8_test(num_recs, log.clone()); + let elapsed2 = now2.elapsed(); + println!("V8 Elapsed: {:.2?}", elapsed2); + + /* let now1 = Instant::now(); + boa_test(num_recs, log.clone()); + let elapsed1 = now1.elapsed(); + println!("Boa Elapsed: {:.2?}", elapsed1); */ +} + +pub fn boa_test(num_recs: i32, log: String) { + let mut context = Context::default(); + let script = r#" + function pow(data) { + let resp = {} + resp["ipaddress"] = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.exec(data)[0]; + //resp["timestamp"] = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/.exec(data)[0]; + //resp["log_level"] = /[A-Z]{4,5}/.exec(data)[0]; + return resp["ipaddress"]; + } + "#; + context.eval(script).unwrap(); + let js_fn_str = format!("{}({:?})", "pow", log); + for _i in 0..num_recs { + let _value = context.eval(&js_fn_str).unwrap(); + } + println!("exiting boa"); +} + +pub async fn lua_test(num_recs: i32, log: String) { + let lua = Lua::new(); + let globals = lua.globals(); + + for _i in 0..num_recs { + globals.set("log", log.to_owned()).unwrap(); + /* lua.scope(|scope| { + Ok({ + lua.globals().set( + "pow", + scope.create_function_mut(|_, data: String| { + //print!("The maximum of the two numbers is {}", data); + rust_val = data:match("(%d+%.%d+%.%d+%.%d+%:-%d+)") + Ok(()) + })?, + )?; + lua.load("pow(log)").exec().unwrap(); + }) + }) + .unwrap(); */ + let _res = lua + .load( + r#" + return log:match("(%d+%.%d+%.%d+%.%d+%:-%d+)") + "#, + ) + .eval::() + .unwrap(); + //println!("Result from lua {}", res); + } + println!("exiting lua"); +} + +pub fn v8_test(num_recs: i32, log: String) { + let _js_fn_str = format!( + r#"var log = '{}';{};"#, + log, r#"/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.exec(log)[0]"# + ); + + let js_func_script = r#"function pow(data) { + console.log(data) + let resp = {} + resp["ipaddress"] = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.exec(data)[0]; + resp["timestamp"] = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/.exec(data)[0]; + resp["log_level"] = /[A-Z]{4,5}/.exec(data)[0]; + return resp["ipaddress"]; + }"#; + + let platform = v8::new_default_platform(0, false).make_shared(); + v8::V8::initialize_platform(platform); + v8::V8::initialize(); + + // Create a new Isolate and make it the current one. + let isolate = &mut v8::Isolate::new(v8::CreateParams::default()); + + // Create a stack-allocated handle scope. + let handle_scope = &mut v8::HandleScope::new(isolate); + + // Create a new context. + let context = v8::Context::new(handle_scope); + + // Enter the context for compiling and running the hello world script. + let scope = &mut v8::ContextScope::new(handle_scope, context); + + for _i in 0..num_recs { + //let source_log = v8::String::new(scope, &log).unwrap(); + //js_func.push_str("pow(source_log)"); + + let js_fn_str = format!( + r#"var log = '{}';{};{};"#, + log, js_func_script, r#"pow(log)"# + ); + let source_reg = v8::String::new(scope, &js_fn_str).unwrap(); + // scope.add_context_data(context, source_log); + let script = v8::Script::compile(scope, source_reg, None).unwrap(); + // Run the script to get the result. + let result = script.run(scope).unwrap(); + let _result = result.to_string(scope).unwrap(); + //println!("Result from JS {}", _result.to_rust_string_lossy(scope)); + } + println!("exiting V8"); +} diff --git a/proto/cluster/common.proto b/proto/cluster/common.proto new file mode 100644 index 0000000000..ce19427f63 --- /dev/null +++ b/proto/cluster/common.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "org.zinc.oxide.cluster"; +option java_outer_classname = "clusterProto"; + +package cluster; + +message FileDescriptor { + FileMeta meta = 1; + StreamType file_type = 2; +} + +message FileMeta { + int64 min_ts = 1; // microseconds + int64 max_ts = 2; // microseconds + uint64 records = 3; + uint64 original_size = 4; + uint64 compressed_size = 5; +} + +enum StreamType { + LOGS = 0; + METRICS = 1; + TRACES = 2; + METADATA = 3; + FILELIST = 4; +} + +message EmptyResponse {} \ No newline at end of file diff --git a/proto/cluster/event.proto b/proto/cluster/event.proto new file mode 100644 index 0000000000..bd749e6f06 --- /dev/null +++ b/proto/cluster/event.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "org.zinc.oxide.cluster"; +option java_outer_classname = "clusterProto"; + +package cluster; + +import "cluster/common.proto"; + +service Event { + rpc SendFileList (FileList) returns (EmptyResponse) {} +} + +message FileList { + repeated FileKey items = 1; +} + +message FileKey { + string key = 1; + FileMeta meta = 2; + bool deleted = 3; + +} + \ No newline at end of file diff --git a/proto/cluster/search.proto b/proto/cluster/search.proto new file mode 100644 index 0000000000..5a8af7c7ba --- /dev/null +++ b/proto/cluster/search.proto @@ -0,0 +1,78 @@ +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "org.zinc.oxide.cluster"; +option java_outer_classname = "clusterProto"; + +package cluster; + + +service Search { + rpc Search (SearchRequest) returns (SearchResponse) {} +} + +// Job information for a request +message Job { + string session_id = 1; + string job = 2; + int32 stage = 3; + int32 partition = 4; +} + +message Partition { + int64 time_min = 1; + int64 time_max = 2; +} + +// Search request type +enum SearchType { + USER = 0; // user input search request + CLUSTER = 1; // cluster dispatch search request + CACHE_ONLY = 2; // ingester node just search local cache +} + +// Search request query +message SearchQuery { + string sql = 1; + string sql_mode = 2; + int32 from = 3; + int32 size = 4; + int64 start_time = 5; + int64 end_time = 6; + bool track_total_hits = 7; +} + +// Search request +message SearchRequest { + Job job = 1; + string org_id = 2; + string stream_type = 3; + SearchType stype = 4; + SearchQuery query = 5; + Partition partition = 6; + repeated string file_list = 7; + repeated SearchAggRequest aggs = 8; +} + +// The response message containing the greetings +message SearchResponse { + Job job = 1; + int32 took = 2; + int64 total = 3; + int32 from = 4; + int32 size = 5; + int32 file_count = 6; + int32 scan_size = 7; // unit: mb + bytes hits = 8; + repeated SearchAggResponse aggs = 9; +} + +message SearchAggRequest { + string name = 1; + string sql = 2; +} + +message SearchAggResponse { + string name = 1; + bytes hits = 2; +} diff --git a/proto/gogoproto/gogo.proto b/proto/gogoproto/gogo.proto new file mode 100644 index 0000000000..8947d90aa5 --- /dev/null +++ b/proto/gogoproto/gogo.proto @@ -0,0 +1,144 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; +package gogoproto; + +import "google/protobuf/descriptor.proto"; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "GoGoProtos"; +option go_package = "github.com/gogo/protobuf/gogoproto"; + +extend google.protobuf.EnumOptions { + optional bool goproto_enum_prefix = 62001; + optional bool goproto_enum_stringer = 62021; + optional bool enum_stringer = 62022; + optional string enum_customname = 62023; + optional bool enumdecl = 62024; +} + +extend google.protobuf.EnumValueOptions { + optional string enumvalue_customname = 66001; +} + +extend google.protobuf.FileOptions { + optional bool goproto_getters_all = 63001; + optional bool goproto_enum_prefix_all = 63002; + optional bool goproto_stringer_all = 63003; + optional bool verbose_equal_all = 63004; + optional bool face_all = 63005; + optional bool gostring_all = 63006; + optional bool populate_all = 63007; + optional bool stringer_all = 63008; + optional bool onlyone_all = 63009; + + optional bool equal_all = 63013; + optional bool description_all = 63014; + optional bool testgen_all = 63015; + optional bool benchgen_all = 63016; + optional bool marshaler_all = 63017; + optional bool unmarshaler_all = 63018; + optional bool stable_marshaler_all = 63019; + + optional bool sizer_all = 63020; + + optional bool goproto_enum_stringer_all = 63021; + optional bool enum_stringer_all = 63022; + + optional bool unsafe_marshaler_all = 63023; + optional bool unsafe_unmarshaler_all = 63024; + + optional bool goproto_extensions_map_all = 63025; + optional bool goproto_unrecognized_all = 63026; + optional bool gogoproto_import = 63027; + optional bool protosizer_all = 63028; + optional bool compare_all = 63029; + optional bool typedecl_all = 63030; + optional bool enumdecl_all = 63031; + + optional bool goproto_registration = 63032; + optional bool messagename_all = 63033; + + optional bool goproto_sizecache_all = 63034; + optional bool goproto_unkeyed_all = 63035; +} + +extend google.protobuf.MessageOptions { + optional bool goproto_getters = 64001; + optional bool goproto_stringer = 64003; + optional bool verbose_equal = 64004; + optional bool face = 64005; + optional bool gostring = 64006; + optional bool populate = 64007; + optional bool stringer = 67008; + optional bool onlyone = 64009; + + optional bool equal = 64013; + optional bool description = 64014; + optional bool testgen = 64015; + optional bool benchgen = 64016; + optional bool marshaler = 64017; + optional bool unmarshaler = 64018; + optional bool stable_marshaler = 64019; + + optional bool sizer = 64020; + + optional bool unsafe_marshaler = 64023; + optional bool unsafe_unmarshaler = 64024; + + optional bool goproto_extensions_map = 64025; + optional bool goproto_unrecognized = 64026; + + optional bool protosizer = 64028; + optional bool compare = 64029; + + optional bool typedecl = 64030; + + optional bool messagename = 64033; + + optional bool goproto_sizecache = 64034; + optional bool goproto_unkeyed = 64035; +} + +extend google.protobuf.FieldOptions { + optional bool nullable = 65001; + optional bool embed = 65002; + optional string customtype = 65003; + optional string customname = 65004; + optional string jsontag = 65005; + optional string moretags = 65006; + optional string casttype = 65007; + optional string castkey = 65008; + optional string castvalue = 65009; + + optional bool stdtime = 65010; + optional bool stdduration = 65011; + optional bool wktpointer = 65012; + +} \ No newline at end of file diff --git a/proto/googleapis/google/api/annotations.proto b/proto/googleapis/google/api/annotations.proto new file mode 100644 index 0000000000..85c361b47f --- /dev/null +++ b/proto/googleapis/google/api/annotations.proto @@ -0,0 +1,31 @@ +// Copyright (c) 2015, Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/api/http.proto"; +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "AnnotationsProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.MethodOptions { + // See `HttpRule`. + HttpRule http = 72295728; +} diff --git a/proto/googleapis/google/api/client.proto b/proto/googleapis/google/api/client.proto new file mode 100644 index 0000000000..2102623d30 --- /dev/null +++ b/proto/googleapis/google/api/client.proto @@ -0,0 +1,99 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "ClientProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.MethodOptions { + // A definition of a client library method signature. + // + // In client libraries, each proto RPC corresponds to one or more methods + // which the end user is able to call, and calls the underlying RPC. + // Normally, this method receives a single argument (a struct or instance + // corresponding to the RPC request object). Defining this field will + // add one or more overloads providing flattened or simpler method signatures + // in some languages. + // + // The fields on the method signature are provided as a comma-separated + // string. + // + // For example, the proto RPC and annotation: + // + // rpc CreateSubscription(CreateSubscriptionRequest) + // returns (Subscription) { + // option (google.api.method_signature) = "name,topic"; + // } + // + // Would add the following Java overload (in addition to the method accepting + // the request object): + // + // public final Subscription createSubscription(String name, String topic) + // + // The following backwards-compatibility guidelines apply: + // + // * Adding this annotation to an unannotated method is backwards + // compatible. + // * Adding this annotation to a method which already has existing + // method signature annotations is backwards compatible if and only if + // the new method signature annotation is last in the sequence. + // * Modifying or removing an existing method signature annotation is + // a breaking change. + // * Re-ordering existing method signature annotations is a breaking + // change. + repeated string method_signature = 1051; +} + +extend google.protobuf.ServiceOptions { + // The hostname for this service. + // This should be specified with no prefix or protocol. + // + // Example: + // + // service Foo { + // option (google.api.default_host) = "foo.googleapi.com"; + // ... + // } + string default_host = 1049; + + // OAuth scopes needed for the client. + // + // Example: + // + // service Foo { + // option (google.api.oauth_scopes) = \ + // "https://www.googleapis.com/auth/cloud-platform"; + // ... + // } + // + // If there is more than one scope, use a comma-separated string: + // + // Example: + // + // service Foo { + // option (google.api.oauth_scopes) = \ + // "https://www.googleapis.com/auth/cloud-platform," + // "https://www.googleapis.com/auth/monitoring"; + // ... + // } + string oauth_scopes = 1050; +} diff --git a/proto/googleapis/google/api/field_behavior.proto b/proto/googleapis/google/api/field_behavior.proto new file mode 100644 index 0000000000..686667954a --- /dev/null +++ b/proto/googleapis/google/api/field_behavior.proto @@ -0,0 +1,84 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; + repeated google.api.FieldBehavior field_behavior = 1052; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; + + // Denotes that a (repeated) field is an unordered list. + // This indicates that the service may provide the elements of the list + // in any arbitrary order, rather than the order the user originally + // provided. Additionally, the list's order may or may not be stable. + UNORDERED_LIST = 6; +} diff --git a/proto/googleapis/google/api/http.proto b/proto/googleapis/google/api/http.proto new file mode 100644 index 0000000000..69460cf791 --- /dev/null +++ b/proto/googleapis/google/api/http.proto @@ -0,0 +1,375 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "HttpProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +// Defines the HTTP configuration for an API service. It contains a list of +// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method +// to one or more HTTP REST API methods. +message Http { + // A list of HTTP configuration rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + repeated HttpRule rules = 1; + + // When set to true, URL path parameters will be fully URI-decoded except in + // cases of single segment matches in reserved expansion, where "%2F" will be + // left encoded. + // + // The default behavior is to not decode RFC 6570 reserved characters in multi + // segment matches. + bool fully_decode_reserved_expansion = 2; +} + +// # gRPC Transcoding +// +// gRPC Transcoding is a feature for mapping between a gRPC method and one or +// more HTTP REST endpoints. It allows developers to build a single API service +// that supports both gRPC APIs and REST APIs. Many systems, including [Google +// APIs](https://github.com/googleapis/googleapis), +// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC +// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), +// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature +// and use it for large scale production services. +// +// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies +// how different portions of the gRPC request message are mapped to the URL +// path, URL query parameters, and HTTP request body. It also controls how the +// gRPC response message is mapped to the HTTP response body. `HttpRule` is +// typically specified as an `google.api.http` annotation on the gRPC method. +// +// Each mapping specifies a URL path template and an HTTP method. The path +// template may refer to one or more fields in the gRPC request message, as long +// as each field is a non-repeated field with a primitive (non-message) type. +// The path template controls how fields of the request message are mapped to +// the URL path. +// +// Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/{name=messages/*}" +// }; +// } +// } +// message GetMessageRequest { +// string name = 1; // Mapped to URL path. +// } +// message Message { +// string text = 1; // The resource content. +// } +// +// This enables an HTTP REST to gRPC mapping as below: +// +// HTTP | gRPC +// -----|----- +// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` +// +// Any fields in the request message which are not bound by the path template +// automatically become HTTP query parameters if there is no HTTP request body. +// For example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get:"/v1/messages/{message_id}" +// }; +// } +// } +// message GetMessageRequest { +// message SubMessage { +// string subfield = 1; +// } +// string message_id = 1; // Mapped to URL path. +// int64 revision = 2; // Mapped to URL query parameter `revision`. +// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. +// } +// +// This enables a HTTP JSON to RPC mapping as below: +// +// HTTP | gRPC +// -----|----- +// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | +// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: +// "foo"))` +// +// Note that fields which are mapped to URL query parameters must have a +// primitive type or a repeated primitive type or a non-repeated message type. +// In the case of a repeated type, the parameter can be repeated in the URL +// as `...?param=A¶m=B`. In the case of a message type, each field of the +// message is mapped to a separate parameter, such as +// `...?foo.a=A&foo.b=B&foo.c=C`. +// +// For HTTP methods that allow a request body, the `body` field +// specifies the mapping. Consider a REST update method on the +// message resource collection: +// +// service Messaging { +// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { +// option (google.api.http) = { +// patch: "/v1/messages/{message_id}" +// body: "message" +// }; +// } +// } +// message UpdateMessageRequest { +// string message_id = 1; // mapped to the URL +// Message message = 2; // mapped to the body +// } +// +// The following HTTP JSON to RPC mapping is enabled, where the +// representation of the JSON in the request body is determined by +// protos JSON encoding: +// +// HTTP | gRPC +// -----|----- +// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: +// "123456" message { text: "Hi!" })` +// +// The special name `*` can be used in the body mapping to define that +// every field not bound by the path template should be mapped to the +// request body. This enables the following alternative definition of +// the update method: +// +// service Messaging { +// rpc UpdateMessage(Message) returns (Message) { +// option (google.api.http) = { +// patch: "/v1/messages/{message_id}" +// body: "*" +// }; +// } +// } +// message Message { +// string message_id = 1; +// string text = 2; +// } +// +// +// The following HTTP JSON to RPC mapping is enabled: +// +// HTTP | gRPC +// -----|----- +// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: +// "123456" text: "Hi!")` +// +// Note that when using `*` in the body mapping, it is not possible to +// have HTTP parameters, as all fields not bound by the path end in +// the body. This makes this option more rarely used in practice when +// defining REST APIs. The common usage of `*` is in custom methods +// which don't use the URL at all for transferring data. +// +// It is possible to define multiple HTTP methods for one RPC by using +// the `additional_bindings` option. Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/messages/{message_id}" +// additional_bindings { +// get: "/v1/users/{user_id}/messages/{message_id}" +// } +// }; +// } +// } +// message GetMessageRequest { +// string message_id = 1; +// string user_id = 2; +// } +// +// This enables the following two alternative HTTP JSON to RPC mappings: +// +// HTTP | gRPC +// -----|----- +// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` +// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: +// "123456")` +// +// ## Rules for HTTP mapping +// +// 1. Leaf request fields (recursive expansion nested messages in the request +// message) are classified into three categories: +// - Fields referred by the path template. They are passed via the URL path. +// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP +// request body. +// - All other fields are passed via the URL query parameters, and the +// parameter name is the field path in the request message. A repeated +// field can be represented as multiple query parameters under the same +// name. +// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields +// are passed via URL path and HTTP request body. +// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all +// fields are passed via URL path and URL query parameters. +// +// ### Path template syntax +// +// Template = "/" Segments [ Verb ] ; +// Segments = Segment { "/" Segment } ; +// Segment = "*" | "**" | LITERAL | Variable ; +// Variable = "{" FieldPath [ "=" Segments ] "}" ; +// FieldPath = IDENT { "." IDENT } ; +// Verb = ":" LITERAL ; +// +// The syntax `*` matches a single URL path segment. The syntax `**` matches +// zero or more URL path segments, which must be the last part of the URL path +// except the `Verb`. +// +// The syntax `Variable` matches part of the URL path as specified by its +// template. A variable template must not contain other variables. If a variable +// matches a single path segment, its template may be omitted, e.g. `{var}` +// is equivalent to `{var=*}`. +// +// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` +// contains any reserved character, such characters should be percent-encoded +// before the matching. +// +// If a variable contains exactly one path segment, such as `"{var}"` or +// `"{var=*}"`, when such a variable is expanded into a URL path on the client +// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The +// server side does the reverse decoding. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{var}`. +// +// If a variable contains multiple path segments, such as `"{var=foo/*}"` +// or `"{var=**}"`, when such a variable is expanded into a URL path on the +// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. +// The server side does the reverse decoding, except "%2F" and "%2f" are left +// unchanged. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{+var}`. +// +// ## Using gRPC API Service Configuration +// +// gRPC API Service Configuration (service config) is a configuration language +// for configuring a gRPC service to become a user-facing product. The +// service config is simply the YAML representation of the `google.api.Service` +// proto message. +// +// As an alternative to annotating your proto file, you can configure gRPC +// transcoding in your service config YAML files. You do this by specifying a +// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same +// effect as the proto annotation. This can be particularly useful if you +// have a proto that is reused in multiple services. Note that any transcoding +// specified in the service config will override any matching transcoding +// configuration in the proto. +// +// Example: +// +// http: +// rules: +// # Selects a gRPC method and applies HttpRule to it. +// - selector: example.v1.Messaging.GetMessage +// get: /v1/messages/{message_id}/{sub.subfield} +// +// ## Special notes +// +// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the +// proto to JSON conversion must follow the [proto3 +// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). +// +// While the single segment variable follows the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String +// Expansion, the multi segment variable **does not** follow RFC 6570 Section +// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion +// does not expand special characters like `?` and `#`, which would lead +// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding +// for multi segment variables. +// +// The path variables **must not** refer to any repeated or mapped field, +// because client libraries are not capable of handling such variable expansion. +// +// The path variables **must not** capture the leading "/" character. The reason +// is that the most common use case "{var}" does not capture the leading "/" +// character. For consistency, all path variables must share the same behavior. +// +// Repeated message fields must not be mapped to URL query parameters, because +// no client library can support such complicated mapping. +// +// If an API needs to use a JSON array for request or response body, it can map +// the request or response body to a repeated field. However, some gRPC +// Transcoding implementations may not support this feature. +message HttpRule { + // Selects a method to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + string selector = 1; + + // Determines the URL pattern is matched by this rules. This pattern can be + // used with any of the {get|put|post|delete|patch} methods. A custom method + // can be defined using the 'custom' field. + oneof pattern { + // Maps to HTTP GET. Used for listing and getting information about + // resources. + string get = 2; + + // Maps to HTTP PUT. Used for replacing a resource. + string put = 3; + + // Maps to HTTP POST. Used for creating a resource or performing an action. + string post = 4; + + // Maps to HTTP DELETE. Used for deleting a resource. + string delete = 5; + + // Maps to HTTP PATCH. Used for updating a resource. + string patch = 6; + + // The custom pattern is used for specifying an HTTP method that is not + // included in the `pattern` field, such as HEAD, or "*" to leave the + // HTTP method unspecified for this rule. The wild-card rule is useful + // for services that provide content to Web (HTML) clients. + CustomHttpPattern custom = 8; + } + + // The name of the request field whose value is mapped to the HTTP request + // body, or `*` for mapping all request fields not captured by the path + // pattern to the HTTP body, or omitted for not having any HTTP request body. + // + // NOTE: the referred field must be present at the top-level of the request + // message type. + string body = 7; + + // Optional. The name of the response field whose value is mapped to the HTTP + // response body. When omitted, the entire response message will be used + // as the HTTP response body. + // + // NOTE: The referred field must be present at the top-level of the response + // message type. + string response_body = 12; + + // Additional HTTP bindings for the selector. Nested bindings must + // not contain an `additional_bindings` field themselves (that is, + // the nesting may only be one level deep). + repeated HttpRule additional_bindings = 11; +} + +// A custom pattern is used for defining custom HTTP verb. +message CustomHttpPattern { + // The name of this custom HTTP verb. + string kind = 1; + + // The path matched by this custom verb. + string path = 2; +} diff --git a/proto/googleapis/google/api/resource.proto b/proto/googleapis/google/api/resource.proto new file mode 100644 index 0000000000..fd9ee66def --- /dev/null +++ b/proto/googleapis/google/api/resource.proto @@ -0,0 +1,299 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "ResourceProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // An annotation that describes a resource reference, see + // [ResourceReference][]. + google.api.ResourceReference resource_reference = 1055; +} + +extend google.protobuf.FileOptions { + // An annotation that describes a resource definition without a corresponding + // message; see [ResourceDescriptor][]. + repeated google.api.ResourceDescriptor resource_definition = 1053; +} + +extend google.protobuf.MessageOptions { + // An annotation that describes a resource definition, see + // [ResourceDescriptor][]. + google.api.ResourceDescriptor resource = 1053; +} + +// A simple descriptor of a resource type. +// +// ResourceDescriptor annotates a resource message (either by means of a +// protobuf annotation or use in the service config), and associates the +// resource's schema, the resource type, and the pattern of the resource name. +// +// Example: +// +// message Topic { +// // Indicates this message defines a resource schema. +// // Declares the resource type in the format of {service}/{kind}. +// // For Kubernetes resources, the format is {api group}/{kind}. +// option (google.api.resource) = { +// type: "pubsub.googleapis.com/Topic" +// name_descriptor: { +// pattern: "projects/{project}/topics/{topic}" +// parent_type: "cloudresourcemanager.googleapis.com/Project" +// parent_name_extractor: "projects/{project}" +// } +// }; +// } +// +// The ResourceDescriptor Yaml config will look like: +// +// resources: +// - type: "pubsub.googleapis.com/Topic" +// name_descriptor: +// - pattern: "projects/{project}/topics/{topic}" +// parent_type: "cloudresourcemanager.googleapis.com/Project" +// parent_name_extractor: "projects/{project}" +// +// Sometimes, resources have multiple patterns, typically because they can +// live under multiple parents. +// +// Example: +// +// message LogEntry { +// option (google.api.resource) = { +// type: "logging.googleapis.com/LogEntry" +// name_descriptor: { +// pattern: "projects/{project}/logs/{log}" +// parent_type: "cloudresourcemanager.googleapis.com/Project" +// parent_name_extractor: "projects/{project}" +// } +// name_descriptor: { +// pattern: "folders/{folder}/logs/{log}" +// parent_type: "cloudresourcemanager.googleapis.com/Folder" +// parent_name_extractor: "folders/{folder}" +// } +// name_descriptor: { +// pattern: "organizations/{organization}/logs/{log}" +// parent_type: "cloudresourcemanager.googleapis.com/Organization" +// parent_name_extractor: "organizations/{organization}" +// } +// name_descriptor: { +// pattern: "billingAccounts/{billing_account}/logs/{log}" +// parent_type: "billing.googleapis.com/BillingAccount" +// parent_name_extractor: "billingAccounts/{billing_account}" +// } +// }; +// } +// +// The ResourceDescriptor Yaml config will look like: +// +// resources: +// - type: 'logging.googleapis.com/LogEntry' +// name_descriptor: +// - pattern: "projects/{project}/logs/{log}" +// parent_type: "cloudresourcemanager.googleapis.com/Project" +// parent_name_extractor: "projects/{project}" +// - pattern: "folders/{folder}/logs/{log}" +// parent_type: "cloudresourcemanager.googleapis.com/Folder" +// parent_name_extractor: "folders/{folder}" +// - pattern: "organizations/{organization}/logs/{log}" +// parent_type: "cloudresourcemanager.googleapis.com/Organization" +// parent_name_extractor: "organizations/{organization}" +// - pattern: "billingAccounts/{billing_account}/logs/{log}" +// parent_type: "billing.googleapis.com/BillingAccount" +// parent_name_extractor: "billingAccounts/{billing_account}" +// +// For flexible resources, the resource name doesn't contain parent names, but +// the resource itself has parents for policy evaluation. +// +// Example: +// +// message Shelf { +// option (google.api.resource) = { +// type: "library.googleapis.com/Shelf" +// name_descriptor: { +// pattern: "shelves/{shelf}" +// parent_type: "cloudresourcemanager.googleapis.com/Project" +// } +// name_descriptor: { +// pattern: "shelves/{shelf}" +// parent_type: "cloudresourcemanager.googleapis.com/Folder" +// } +// }; +// } +// +// The ResourceDescriptor Yaml config will look like: +// +// resources: +// - type: 'library.googleapis.com/Shelf' +// name_descriptor: +// - pattern: "shelves/{shelf}" +// parent_type: "cloudresourcemanager.googleapis.com/Project" +// - pattern: "shelves/{shelf}" +// parent_type: "cloudresourcemanager.googleapis.com/Folder" +message ResourceDescriptor { + // A description of the historical or future-looking state of the + // resource pattern. + enum History { + // The "unset" value. + HISTORY_UNSPECIFIED = 0; + + // The resource originally had one pattern and launched as such, and + // additional patterns were added later. + ORIGINALLY_SINGLE_PATTERN = 1; + + // The resource has one pattern, but the API owner expects to add more + // later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents + // that from being necessary once there are multiple patterns.) + FUTURE_MULTI_PATTERN = 2; + } + + // A flag representing a specific style that a resource claims to conform to. + enum Style { + // The unspecified value. Do not use. + STYLE_UNSPECIFIED = 0; + + // This resource is intended to be "declarative-friendly". + // + // Declarative-friendly resources must be more strictly consistent, and + // setting this to true communicates to tools that this resource should + // adhere to declarative-friendly expectations. + // + // Note: This is used by the API linter (linter.aip.dev) to enable + // additional checks. + DECLARATIVE_FRIENDLY = 1; + } + + // The resource type. It must be in the format of + // {service_name}/{resource_type_kind}. The `resource_type_kind` must be + // singular and must not include version numbers. + // + // Example: `storage.googleapis.com/Bucket` + // + // The value of the resource_type_kind must follow the regular expression + // /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and + // should use PascalCase (UpperCamelCase). The maximum number of + // characters allowed for the `resource_type_kind` is 100. + string type = 1; + + // Optional. The relative resource name pattern associated with this resource + // type. The DNS prefix of the full resource name shouldn't be specified here. + // + // The path pattern must follow the syntax, which aligns with HTTP binding + // syntax: + // + // Template = Segment { "/" Segment } ; + // Segment = LITERAL | Variable ; + // Variable = "{" LITERAL "}" ; + // + // Examples: + // + // - "projects/{project}/topics/{topic}" + // - "projects/{project}/knowledgeBases/{knowledge_base}" + // + // The components in braces correspond to the IDs for each resource in the + // hierarchy. It is expected that, if multiple patterns are provided, + // the same component name (e.g. "project") refers to IDs of the same + // type of resource. + repeated string pattern = 2; + + // Optional. The field on the resource that designates the resource name + // field. If omitted, this is assumed to be "name". + string name_field = 3; + + // Optional. The historical or future-looking state of the resource pattern. + // + // Example: + // + // // The InspectTemplate message originally only supported resource + // // names with organization, and project was added later. + // message InspectTemplate { + // option (google.api.resource) = { + // type: "dlp.googleapis.com/InspectTemplate" + // pattern: + // "organizations/{organization}/inspectTemplates/{inspect_template}" + // pattern: "projects/{project}/inspectTemplates/{inspect_template}" + // history: ORIGINALLY_SINGLE_PATTERN + // }; + // } + History history = 4; + + // The plural name used in the resource name and permission names, such as + // 'projects' for the resource name of 'projects/{project}' and the permission + // name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same + // concept of the `plural` field in k8s CRD spec + // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ + // + // Note: The plural form is required even for singleton resources. See + // https://aip.dev/156 + string plural = 5; + + // The same concept of the `singular` field in k8s CRD spec + // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ + // Such as "project" for the `resourcemanager.googleapis.com/Project` type. + string singular = 6; + + // Style flag(s) for this resource. + // These indicate that a resource is expected to conform to a given + // style. See the specific style flags for additional information. + repeated Style style = 10; +} + +// Defines a proto annotation that describes a string field that refers to +// an API resource. +message ResourceReference { + // The resource type that the annotated field references. + // + // Example: + // + // message Subscription { + // string topic = 2 [(google.api.resource_reference) = { + // type: "pubsub.googleapis.com/Topic" + // }]; + // } + // + // Occasionally, a field may reference an arbitrary resource. In this case, + // APIs use the special value * in their resource reference. + // + // Example: + // + // message GetIamPolicyRequest { + // string resource = 2 [(google.api.resource_reference) = { + // type: "*" + // }]; + // } + string type = 1; + + // The resource type of a child collection that the annotated field + // references. This is useful for annotating the `parent` field that + // doesn't have a fixed resource type. + // + // Example: + // + // message ListLogEntriesRequest { + // string parent = 1 [(google.api.resource_reference) = { + // child_type: "logging.googleapis.com/LogEntry" + // }; + // } + string child_type = 2; +} diff --git a/proto/googleapis/google/pubsub/v1/pubsub.proto b/proto/googleapis/google/pubsub/v1/pubsub.proto new file mode 100644 index 0000000000..9bc678e3ae --- /dev/null +++ b/proto/googleapis/google/pubsub/v1/pubsub.proto @@ -0,0 +1,1316 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.pubsub.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; +import "google/pubsub/v1/schema.proto"; + +option cc_enable_arenas = true; +option csharp_namespace = "Google.Cloud.PubSub.V1"; +option go_package = "google.golang.org/genproto/googleapis/pubsub/v1;pubsub"; +option java_multiple_files = true; +option java_outer_classname = "PubsubProto"; +option java_package = "com.google.pubsub.v1"; +option php_namespace = "Google\\Cloud\\PubSub\\V1"; +option ruby_package = "Google::Cloud::PubSub::V1"; + +// The service that an application uses to manipulate topics, and to send +// messages to a topic. +service Publisher { + option (google.api.default_host) = "pubsub.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform," + "https://www.googleapis.com/auth/pubsub"; + + // Creates the given topic with the given name. See the [resource name rules] + // (https://cloud.google.com/pubsub/docs/admin#resource_names). + rpc CreateTopic(Topic) returns (Topic) { + option (google.api.http) = { + put: "/v1/{name=projects/*/topics/*}" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Updates an existing topic. Note that certain properties of a + // topic are not modifiable. + rpc UpdateTopic(UpdateTopicRequest) returns (Topic) { + option (google.api.http) = { + patch: "/v1/{topic.name=projects/*/topics/*}" + body: "*" + }; + } + + // Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic + // does not exist. + rpc Publish(PublishRequest) returns (PublishResponse) { + option (google.api.http) = { + post: "/v1/{topic=projects/*/topics/*}:publish" + body: "*" + }; + option (google.api.method_signature) = "topic,messages"; + } + + // Gets the configuration of a topic. + rpc GetTopic(GetTopicRequest) returns (Topic) { + option (google.api.http) = { + get: "/v1/{topic=projects/*/topics/*}" + }; + option (google.api.method_signature) = "topic"; + } + + // Lists matching topics. + rpc ListTopics(ListTopicsRequest) returns (ListTopicsResponse) { + option (google.api.http) = { + get: "/v1/{project=projects/*}/topics" + }; + option (google.api.method_signature) = "project"; + } + + // Lists the names of the attached subscriptions on this topic. + rpc ListTopicSubscriptions(ListTopicSubscriptionsRequest) + returns (ListTopicSubscriptionsResponse) { + option (google.api.http) = { + get: "/v1/{topic=projects/*/topics/*}/subscriptions" + }; + option (google.api.method_signature) = "topic"; + } + + // Lists the names of the snapshots on this topic. Snapshots are used in + // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, + // which allow you to manage message acknowledgments in bulk. That is, you can + // set the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + rpc ListTopicSnapshots(ListTopicSnapshotsRequest) + returns (ListTopicSnapshotsResponse) { + option (google.api.http) = { + get: "/v1/{topic=projects/*/topics/*}/snapshots" + }; + option (google.api.method_signature) = "topic"; + } + + // Deletes the topic with the given name. Returns `NOT_FOUND` if the topic + // does not exist. After a topic is deleted, a new topic may be created with + // the same name; this is an entirely new topic with none of the old + // configuration or subscriptions. Existing subscriptions to this topic are + // not deleted, but their `topic` field is set to `_deleted-topic_`. + rpc DeleteTopic(DeleteTopicRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{topic=projects/*/topics/*}" + }; + option (google.api.method_signature) = "topic"; + } + + // Detaches a subscription from this topic. All messages retained in the + // subscription are dropped. Subsequent `Pull` and `StreamingPull` requests + // will return FAILED_PRECONDITION. If the subscription is a push + // subscription, pushes to the endpoint will stop. + rpc DetachSubscription(DetachSubscriptionRequest) + returns (DetachSubscriptionResponse) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:detach" + }; + } +} + +// A policy constraining the storage of messages published to the topic. +message MessageStoragePolicy { + // A list of IDs of GCP regions where messages that are published to the topic + // may be persisted in storage. Messages published by publishers running in + // non-allowed GCP regions (or running outside of GCP altogether) will be + // routed for storage in one of the allowed regions. An empty list means that + // no regions are allowed, and is not a valid configuration. + repeated string allowed_persistence_regions = 1; +} + +// Settings for validating messages published against a schema. +message SchemaSettings { + // Required. The name of the schema that messages published should be + // validated against. Format is `projects/{project}/schemas/{schema}`. The + // value of this field will be `_deleted-schema_` if the schema has been + // deleted. + string schema = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // The encoding of messages validated against `schema`. + Encoding encoding = 2; +} + +// A topic resource. +message Topic { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Topic" + pattern: "projects/{project}/topics/{topic}" + pattern: "_deleted-topic_" + }; + + // Required. The name of the topic. It must have the format + // `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter, + // and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), + // underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent + // signs (`%`). It must be between 3 and 255 characters in length, and it + // must not start with `"goog"`. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // See [Creating and managing labels] + // (https://cloud.google.com/pubsub/docs/labels). + map labels = 2; + + // Policy constraining the set of Google Cloud Platform regions where messages + // published to the topic may be stored. If not present, then no constraints + // are in effect. + MessageStoragePolicy message_storage_policy = 3; + + // The resource name of the Cloud KMS CryptoKey to be used to protect access + // to messages published on this topic. + // + // The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`. + string kms_key_name = 5; + + // Settings for validating messages published against a schema. + // + // EXPERIMENTAL: Schema support is in development and may not work yet. + SchemaSettings schema_settings = 6; + + // Reserved for future use. This field is set only in responses from the + // server; it is ignored if it is set in any requests. + bool satisfies_pzs = 7; +} + +// A message that is published by publishers and consumed by subscribers. The +// message must contain either a non-empty data field or at least one attribute. +// Note that client libraries represent this object differently +// depending on the language. See the corresponding [client library +// documentation](https://cloud.google.com/pubsub/docs/reference/libraries) for +// more information. See [quotas and limits] +// (https://cloud.google.com/pubsub/quotas) for more information about message +// limits. +message PubsubMessage { + // The message data field. If this field is empty, the message must contain + // at least one attribute. + bytes data = 1; + + // Attributes for this message. If this field is empty, the message must + // contain non-empty data. This can be used to filter messages on the + // subscription. + map attributes = 2; + + // ID of this message, assigned by the server when the message is published. + // Guaranteed to be unique within the topic. This value may be read by a + // subscriber that receives a `PubsubMessage` via a `Pull` call or a push + // delivery. It must not be populated by the publisher in a `Publish` call. + string message_id = 3; + + // The time at which the message was published, populated by the server when + // it receives the `Publish` call. It must not be populated by the + // publisher in a `Publish` call. + google.protobuf.Timestamp publish_time = 4; + + // If non-empty, identifies related messages for which publish order should be + // respected. If a `Subscription` has `enable_message_ordering` set to `true`, + // messages published with the same non-empty `ordering_key` value will be + // delivered to subscribers in the order in which they are received by the + // Pub/Sub system. All `PubsubMessage`s published in a given `PublishRequest` + // must specify the same `ordering_key` value. + string ordering_key = 5; +} + +// Request for the GetTopic method. +message GetTopicRequest { + // Required. The name of the topic to get. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; +} + +// Request for the UpdateTopic method. +message UpdateTopicRequest { + // Required. The updated topic object. + Topic topic = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Indicates which fields in the provided topic to update. Must be + // specified and non-empty. Note that if `update_mask` contains + // "message_storage_policy" but the `message_storage_policy` is not set in + // the `topic` provided above, then the updated value is determined by the + // policy configured at the project or organization level. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the Publish method. +message PublishRequest { + // Required. The messages in the request will be published on this topic. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Required. The messages to publish. + repeated PubsubMessage messages = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Response for the `Publish` method. +message PublishResponse { + // The server-assigned ID of each published message, in the same order as + // the messages in the request. IDs are guaranteed to be unique within + // the topic. + repeated string message_ids = 1; +} + +// Request for the `ListTopics` method. +message ListTopicsRequest { + // Required. The name of the project in which to list topics. + // Format is `projects/{project-id}`. + string project = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Maximum number of topics to return. + int32 page_size = 2; + + // The value returned by the last `ListTopicsResponse`; indicates that this is + // a continuation of a prior `ListTopics` call, and that the system should + // return the next page of data. + string page_token = 3; +} + +// Response for the `ListTopics` method. +message ListTopicsResponse { + // The resulting topics. + repeated Topic topics = 1; + + // If not empty, indicates that there may be more topics that match the + // request; this value should be passed in a new `ListTopicsRequest`. + string next_page_token = 2; +} + +// Request for the `ListTopicSubscriptions` method. +message ListTopicSubscriptionsRequest { + // Required. The name of the topic that subscriptions are attached to. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Maximum number of subscription names to return. + int32 page_size = 2; + + // The value returned by the last `ListTopicSubscriptionsResponse`; indicates + // that this is a continuation of a prior `ListTopicSubscriptions` call, and + // that the system should return the next page of data. + string page_token = 3; +} + +// Response for the `ListTopicSubscriptions` method. +message ListTopicSubscriptionsResponse { + // The names of subscriptions attached to the topic specified in the request. + repeated string subscriptions = 1 [(google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + }]; + + // If not empty, indicates that there may be more subscriptions that match + // the request; this value should be passed in a new + // `ListTopicSubscriptionsRequest` to get more subscriptions. + string next_page_token = 2; +} + +// Request for the `ListTopicSnapshots` method. +message ListTopicSnapshotsRequest { + // Required. The name of the topic that snapshots are attached to. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Maximum number of snapshot names to return. + int32 page_size = 2; + + // The value returned by the last `ListTopicSnapshotsResponse`; indicates + // that this is a continuation of a prior `ListTopicSnapshots` call, and + // that the system should return the next page of data. + string page_token = 3; +} + +// Response for the `ListTopicSnapshots` method. +message ListTopicSnapshotsResponse { + // The names of the snapshots that match the request. + repeated string snapshots = 1; + + // If not empty, indicates that there may be more snapshots that match + // the request; this value should be passed in a new + // `ListTopicSnapshotsRequest` to get more snapshots. + string next_page_token = 2; +} + +// Request for the `DeleteTopic` method. +message DeleteTopicRequest { + // Required. Name of the topic to delete. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; +} + +// Request for the DetachSubscription method. +message DetachSubscriptionRequest { + // Required. The subscription to detach. + // Format is `projects/{project}/subscriptions/{subscription}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; +} + +// Response for the DetachSubscription method. +// Reserved for future use. +message DetachSubscriptionResponse {} + +// The service that an application uses to manipulate subscriptions and to +// consume messages from a subscription via the `Pull` method or by +// establishing a bi-directional stream using the `StreamingPull` method. +service Subscriber { + option (google.api.default_host) = "pubsub.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform," + "https://www.googleapis.com/auth/pubsub"; + + // Creates a subscription to a given topic. See the [resource name rules] + // (https://cloud.google.com/pubsub/docs/admin#resource_names). + // If the subscription already exists, returns `ALREADY_EXISTS`. + // If the corresponding topic doesn't exist, returns `NOT_FOUND`. + // + // If the name is not provided in the request, the server will assign a random + // name for this subscription on the same project as the topic, conforming + // to the [resource name format] + // (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated + // name is populated in the returned Subscription object. Note that for REST + // API requests, you must specify a name in the request. + rpc CreateSubscription(Subscription) returns (Subscription) { + option (google.api.http) = { + put: "/v1/{name=projects/*/subscriptions/*}" + body: "*" + }; + option (google.api.method_signature) = + "name,topic,push_config,ack_deadline_seconds"; + } + + // Gets the configuration details of a subscription. + rpc GetSubscription(GetSubscriptionRequest) returns (Subscription) { + option (google.api.http) = { + get: "/v1/{subscription=projects/*/subscriptions/*}" + }; + option (google.api.method_signature) = "subscription"; + } + + // Updates an existing subscription. Note that certain properties of a + // subscription, such as its topic, are not modifiable. + rpc UpdateSubscription(UpdateSubscriptionRequest) returns (Subscription) { + option (google.api.http) = { + patch: "/v1/{subscription.name=projects/*/subscriptions/*}" + body: "*" + }; + } + + // Lists matching subscriptions. + rpc ListSubscriptions(ListSubscriptionsRequest) + returns (ListSubscriptionsResponse) { + option (google.api.http) = { + get: "/v1/{project=projects/*}/subscriptions" + }; + option (google.api.method_signature) = "project"; + } + + // Deletes an existing subscription. All messages retained in the subscription + // are immediately dropped. Calls to `Pull` after deletion will return + // `NOT_FOUND`. After a subscription is deleted, a new one may be created with + // the same name, but the new one has no association with the old + // subscription or its topic unless the same topic is specified. + rpc DeleteSubscription(DeleteSubscriptionRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{subscription=projects/*/subscriptions/*}" + }; + option (google.api.method_signature) = "subscription"; + } + + // Modifies the ack deadline for a specific message. This method is useful + // to indicate that more time is needed to process a message by the + // subscriber, or to make the message available for redelivery if the + // processing was interrupted. Note that this does not modify the + // subscription-level `ackDeadlineSeconds` used for subsequent messages. + rpc ModifyAckDeadline(ModifyAckDeadlineRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:modifyAckDeadline" + body: "*" + }; + option (google.api.method_signature) = + "subscription,ack_ids,ack_deadline_seconds"; + } + + // Acknowledges the messages associated with the `ack_ids` in the + // `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages + // from the subscription. + // + // Acknowledging a message whose ack deadline has expired may succeed, + // but such a message may be redelivered later. Acknowledging a message more + // than once will not result in an error. + rpc Acknowledge(AcknowledgeRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:acknowledge" + body: "*" + }; + option (google.api.method_signature) = "subscription,ack_ids"; + } + + // Pulls messages from the server. The server may return `UNAVAILABLE` if + // there are too many concurrent pull requests pending for the given + // subscription. + rpc Pull(PullRequest) returns (PullResponse) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:pull" + body: "*" + }; + option (google.api.method_signature) = + "subscription,return_immediately,max_messages"; + } + + // Establishes a stream with the server, which sends messages down to the + // client. The client streams acknowledgements and ack deadline modifications + // back to the server. The server will close the stream and return the status + // on any error. The server may close the stream with status `UNAVAILABLE` to + // reassign server-side resources, in which case, the client should + // re-establish the stream. Flow control can be achieved by configuring the + // underlying RPC channel. + rpc StreamingPull(stream StreamingPullRequest) + returns (stream StreamingPullResponse) {} + + // Modifies the `PushConfig` for a specified subscription. + // + // This may be used to change a push subscription to a pull one (signified by + // an empty `PushConfig`) or vice versa, or change the endpoint URL and other + // attributes of a push subscription. Messages will accumulate for delivery + // continuously through the call regardless of changes to the `PushConfig`. + rpc ModifyPushConfig(ModifyPushConfigRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:modifyPushConfig" + body: "*" + }; + option (google.api.method_signature) = "subscription,push_config"; + } + + // Gets the configuration details of a snapshot. Snapshots are used in + // Seek + // operations, which allow you to manage message acknowledgments in bulk. That + // is, you can set the acknowledgment state of messages in an existing + // subscription to the state captured by a snapshot. + rpc GetSnapshot(GetSnapshotRequest) returns (Snapshot) { + option (google.api.http) = { + get: "/v1/{snapshot=projects/*/snapshots/*}" + }; + option (google.api.method_signature) = "snapshot"; + } + + // Lists the existing snapshots. Snapshots are used in [Seek]( + // https://cloud.google.com/pubsub/docs/replay-overview) operations, which + // allow you to manage message acknowledgments in bulk. That is, you can set + // the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + rpc ListSnapshots(ListSnapshotsRequest) returns (ListSnapshotsResponse) { + option (google.api.http) = { + get: "/v1/{project=projects/*}/snapshots" + }; + option (google.api.method_signature) = "project"; + } + + // Creates a snapshot from the requested subscription. Snapshots are used in + // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, + // which allow you to manage message acknowledgments in bulk. That is, you can + // set the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + // If the snapshot already exists, returns `ALREADY_EXISTS`. + // If the requested subscription doesn't exist, returns `NOT_FOUND`. + // If the backlog in the subscription is too old -- and the resulting snapshot + // would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. + // See also the `Snapshot.expire_time` field. If the name is not provided in + // the request, the server will assign a random + // name for this snapshot on the same project as the subscription, conforming + // to the [resource name format] + // (https://cloud.google.com/pubsub/docs/admin#resource_names). The + // generated name is populated in the returned Snapshot object. Note that for + // REST API requests, you must specify a name in the request. + rpc CreateSnapshot(CreateSnapshotRequest) returns (Snapshot) { + option (google.api.http) = { + put: "/v1/{name=projects/*/snapshots/*}" + body: "*" + }; + option (google.api.method_signature) = "name,subscription"; + } + + // Updates an existing snapshot. Snapshots are used in + // Seek + // operations, which allow + // you to manage message acknowledgments in bulk. That is, you can set the + // acknowledgment state of messages in an existing subscription to the state + // captured by a snapshot. + rpc UpdateSnapshot(UpdateSnapshotRequest) returns (Snapshot) { + option (google.api.http) = { + patch: "/v1/{snapshot.name=projects/*/snapshots/*}" + body: "*" + }; + } + + // Removes an existing snapshot. Snapshots are used in [Seek] + // (https://cloud.google.com/pubsub/docs/replay-overview) operations, which + // allow you to manage message acknowledgments in bulk. That is, you can set + // the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + // When the snapshot is deleted, all messages retained in the snapshot + // are immediately dropped. After a snapshot is deleted, a new one may be + // created with the same name, but the new one has no association with the old + // snapshot or its subscription, unless the same subscription is specified. + rpc DeleteSnapshot(DeleteSnapshotRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{snapshot=projects/*/snapshots/*}" + }; + option (google.api.method_signature) = "snapshot"; + } + + // Seeks an existing subscription to a point in time or to a given snapshot, + // whichever is provided in the request. Snapshots are used in [Seek] + // (https://cloud.google.com/pubsub/docs/replay-overview) operations, which + // allow you to manage message acknowledgments in bulk. That is, you can set + // the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. Note that both the subscription and the + // snapshot must be on the same topic. + rpc Seek(SeekRequest) returns (SeekResponse) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:seek" + body: "*" + }; + } +} + +// A subscription resource. +message Subscription { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Subscription" + pattern: "projects/{project}/subscriptions/{subscription}" + }; + + // Required. The name of the subscription. It must have the format + // `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must + // start with a letter, and contain only letters (`[A-Za-z]`), numbers + // (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`), + // plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters + // in length, and it must not start with `"goog"`. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The name of the topic from which this subscription is receiving + // messages. Format is `projects/{project}/topics/{topic}`. The value of this + // field will be `_deleted-topic_` if the topic has been deleted. + string topic = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // If push delivery is used with this subscription, this field is + // used to configure it. An empty `pushConfig` signifies that the subscriber + // will pull and ack messages using API methods. + PushConfig push_config = 4; + + // The approximate amount of time (on a best-effort basis) Pub/Sub waits for + // the subscriber to acknowledge receipt before resending the message. In the + // interval after the message is delivered and before it is acknowledged, it + // is considered to be outstanding. During that time period, the + // message will not be redelivered (on a best-effort basis). + // + // For pull subscriptions, this value is used as the initial value for the ack + // deadline. To override this value for a given message, call + // `ModifyAckDeadline` with the corresponding `ack_id` if using + // non-streaming pull or send the `ack_id` in a + // `StreamingModifyAckDeadlineRequest` if using streaming pull. + // The minimum custom deadline you can specify is 10 seconds. + // The maximum custom deadline you can specify is 600 seconds (10 minutes). + // If this parameter is 0, a default value of 10 seconds is used. + // + // For push delivery, this value is also used to set the request timeout for + // the call to the push endpoint. + // + // If the subscriber never acknowledges the message, the Pub/Sub + // system will eventually redeliver the message. + int32 ack_deadline_seconds = 5; + + // Indicates whether to retain acknowledged messages. If true, then + // messages are not expunged from the subscription's backlog, even if they are + // acknowledged, until they fall out of the `message_retention_duration` + // window. This must be true if you would like to [Seek to a timestamp] + // (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time). + bool retain_acked_messages = 7; + + // How long to retain unacknowledged messages in the subscription's backlog, + // from the moment a message is published. + // If `retain_acked_messages` is true, then this also configures the retention + // of acknowledged messages, and thus configures how far back in time a `Seek` + // can be done. Defaults to 7 days. Cannot be more than 7 days or less than 10 + // minutes. + google.protobuf.Duration message_retention_duration = 8; + + // See Creating and + // managing labels. + map labels = 9; + + // If true, messages published with the same `ordering_key` in `PubsubMessage` + // will be delivered to the subscribers in the order in which they + // are received by the Pub/Sub system. Otherwise, they may be delivered in + // any order. + bool enable_message_ordering = 10; + + // A policy that specifies the conditions for this subscription's expiration. + // A subscription is considered active as long as any connected subscriber is + // successfully consuming messages from the subscription or is issuing + // operations on the subscription. If `expiration_policy` is not set, a + // *default policy* with `ttl` of 31 days will be used. The minimum allowed + // value for `expiration_policy.ttl` is 1 day. + ExpirationPolicy expiration_policy = 11; + + // An expression written in the Pub/Sub [filter + // language](https://cloud.google.com/pubsub/docs/filtering). If non-empty, + // then only `PubsubMessage`s whose `attributes` field matches the filter are + // delivered on this subscription. If empty, then no messages are filtered + // out. + string filter = 12; + + // A policy that specifies the conditions for dead lettering messages in + // this subscription. If dead_letter_policy is not set, dead lettering + // is disabled. + // + // The Cloud Pub/Sub service account associated with this subscriptions's + // parent project (i.e., + // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have + // permission to Acknowledge() messages on this subscription. + DeadLetterPolicy dead_letter_policy = 13; + + // A policy that specifies how Pub/Sub retries message delivery for this + // subscription. + // + // If not set, the default retry policy is applied. This generally implies + // that messages will be retried as soon as possible for healthy subscribers. + // RetryPolicy will be triggered on NACKs or acknowledgement deadline + // exceeded events for a given message. + RetryPolicy retry_policy = 14; + + // Indicates whether the subscription is detached from its topic. Detached + // subscriptions don't receive messages from their topic and don't retain any + // backlog. `Pull` and `StreamingPull` requests will return + // FAILED_PRECONDITION. If the subscription is a push subscription, pushes to + // the endpoint will not be made. + bool detached = 15; +} + +// A policy that specifies how Cloud Pub/Sub retries message delivery. +// +// Retry delay will be exponential based on provided minimum and maximum +// backoffs. https://en.wikipedia.org/wiki/Exponential_backoff. +// +// RetryPolicy will be triggered on NACKs or acknowledgement deadline exceeded +// events for a given message. +// +// Retry Policy is implemented on a best effort basis. At times, the delay +// between consecutive deliveries may not match the configuration. That is, +// delay can be more or less than configured backoff. +message RetryPolicy { + // The minimum delay between consecutive deliveries of a given message. + // Value should be between 0 and 600 seconds. Defaults to 10 seconds. + google.protobuf.Duration minimum_backoff = 1; + + // The maximum delay between consecutive deliveries of a given message. + // Value should be between 0 and 600 seconds. Defaults to 600 seconds. + google.protobuf.Duration maximum_backoff = 2; +} + +// Dead lettering is done on a best effort basis. The same message might be +// dead lettered multiple times. +// +// If validation on any of the fields fails at subscription creation/updation, +// the create/update subscription request will fail. +message DeadLetterPolicy { + // The name of the topic to which dead letter messages should be published. + // Format is `projects/{project}/topics/{topic}`.The Cloud Pub/Sub service + // account associated with the enclosing subscription's parent project (i.e., + // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have + // permission to Publish() to this topic. + // + // The operation will fail if the topic does not exist. + // Users should ensure that there is a subscription attached to this topic + // since messages published to a topic with no subscriptions are lost. + string dead_letter_topic = 1; + + // The maximum number of delivery attempts for any message. The value must be + // between 5 and 100. + // + // The number of delivery attempts is defined as 1 + (the sum of number of + // NACKs and number of times the acknowledgement deadline has been exceeded + // for the message). + // + // A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that + // client libraries may automatically extend ack_deadlines. + // + // This field will be honored on a best effort basis. + // + // If this parameter is 0, a default value of 5 is used. + int32 max_delivery_attempts = 2; +} + +// A policy that specifies the conditions for resource expiration (i.e., +// automatic resource deletion). +message ExpirationPolicy { + // Specifies the "time-to-live" duration for an associated resource. The + // resource expires if it is not active for a period of `ttl`. The definition + // of "activity" depends on the type of the associated resource. The minimum + // and maximum allowed values for `ttl` depend on the type of the associated + // resource, as well. If `ttl` is not set, the associated resource never + // expires. + google.protobuf.Duration ttl = 1; +} + +// Configuration for a push delivery endpoint. +message PushConfig { + // Contains information needed for generating an + // [OpenID Connect + // token](https://developers.google.com/identity/protocols/OpenIDConnect). + message OidcToken { + // [Service account + // email](https://cloud.google.com/iam/docs/service-accounts) + // to be used for generating the OIDC token. The caller (for + // CreateSubscription, UpdateSubscription, and ModifyPushConfig RPCs) must + // have the iam.serviceAccounts.actAs permission for the service account. + string service_account_email = 1; + + // Audience to be used when generating OIDC token. The audience claim + // identifies the recipients that the JWT is intended for. The audience + // value is a single case-sensitive string. Having multiple values (array) + // for the audience field is not supported. More info about the OIDC JWT + // token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3 + // Note: if not specified, the Push endpoint URL will be used. + string audience = 2; + } + + // A URL locating the endpoint to which messages should be pushed. + // For example, a Webhook endpoint might use `https://example.com/push`. + string push_endpoint = 1; + + // Endpoint configuration attributes that can be used to control different + // aspects of the message delivery. + // + // The only currently supported attribute is `x-goog-version`, which you can + // use to change the format of the pushed message. This attribute + // indicates the version of the data expected by the endpoint. This + // controls the shape of the pushed message (i.e., its fields and metadata). + // + // If not present during the `CreateSubscription` call, it will default to + // the version of the Pub/Sub API used to make such call. If not present in a + // `ModifyPushConfig` call, its value will not be changed. `GetSubscription` + // calls will always return a valid version, even if the subscription was + // created without this attribute. + // + // The only supported values for the `x-goog-version` attribute are: + // + // * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. + // * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API. + // + // For example: + //
attributes { "x-goog-version": "v1" } 
+ map attributes = 2; + + // An authentication method used by push endpoints to verify the source of + // push requests. This can be used with push endpoints that are private by + // default to allow requests only from the Cloud Pub/Sub system, for example. + // This field is optional and should be set only by users interested in + // authenticated push. + oneof authentication_method { + // If specified, Pub/Sub will generate and attach an OIDC JWT token as an + // `Authorization` header in the HTTP request for every pushed message. + OidcToken oidc_token = 3; + } +} + +// A message and its corresponding acknowledgment ID. +message ReceivedMessage { + // This ID can be used to acknowledge the received message. + string ack_id = 1; + + // The message. + PubsubMessage message = 2; + + // The approximate number of times that Cloud Pub/Sub has attempted to deliver + // the associated message to a subscriber. + // + // More precisely, this is 1 + (number of NACKs) + + // (number of ack_deadline exceeds) for this message. + // + // A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline + // exceeds event is whenever a message is not acknowledged within + // ack_deadline. Note that ack_deadline is initially + // Subscription.ackDeadlineSeconds, but may get extended automatically by + // the client library. + // + // Upon the first delivery of a given message, `delivery_attempt` will have a + // value of 1. The value is calculated at best effort and is approximate. + // + // If a DeadLetterPolicy is not set on the subscription, this will be 0. + int32 delivery_attempt = 3; +} + +// Request for the GetSubscription method. +message GetSubscriptionRequest { + // Required. The name of the subscription to get. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; +} + +// Request for the UpdateSubscription method. +message UpdateSubscriptionRequest { + // Required. The updated subscription object. + Subscription subscription = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Indicates which fields in the provided subscription to update. + // Must be specified and non-empty. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `ListSubscriptions` method. +message ListSubscriptionsRequest { + // Required. The name of the project in which to list subscriptions. + // Format is `projects/{project-id}`. + string project = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Maximum number of subscriptions to return. + int32 page_size = 2; + + // The value returned by the last `ListSubscriptionsResponse`; indicates that + // this is a continuation of a prior `ListSubscriptions` call, and that the + // system should return the next page of data. + string page_token = 3; +} + +// Response for the `ListSubscriptions` method. +message ListSubscriptionsResponse { + // The subscriptions that match the request. + repeated Subscription subscriptions = 1; + + // If not empty, indicates that there may be more subscriptions that match + // the request; this value should be passed in a new + // `ListSubscriptionsRequest` to get more subscriptions. + string next_page_token = 2; +} + +// Request for the DeleteSubscription method. +message DeleteSubscriptionRequest { + // Required. The subscription to delete. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; +} + +// Request for the ModifyPushConfig method. +message ModifyPushConfigRequest { + // Required. The name of the subscription. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Required. The push configuration for future deliveries. + // + // An empty `pushConfig` indicates that the Pub/Sub system should + // stop pushing messages from the given subscription and allow + // messages to be pulled and acknowledged - effectively pausing + // the subscription if `Pull` or `StreamingPull` is not called. + PushConfig push_config = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `Pull` method. +message PullRequest { + // Required. The subscription from which messages should be pulled. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Optional. If this field set to true, the system will respond immediately + // even if it there are no messages available to return in the `Pull` + // response. Otherwise, the system may wait (for a bounded amount of time) + // until at least one message is available, rather than returning no messages. + // Warning: setting this field to `true` is discouraged because it adversely + // impacts the performance of `Pull` operations. We recommend that users do + // not set this field. + bool return_immediately = 2 + [deprecated = true, (google.api.field_behavior) = OPTIONAL]; + + // Required. The maximum number of messages to return for this request. Must + // be a positive integer. The Pub/Sub system may return fewer than the number + // specified. + int32 max_messages = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Response for the `Pull` method. +message PullResponse { + // Received Pub/Sub messages. The list will be empty if there are no more + // messages available in the backlog. For JSON, the response can be entirely + // empty. The Pub/Sub system may return fewer than the `maxMessages` requested + // even if there are more messages available in the backlog. + repeated ReceivedMessage received_messages = 1; +} + +// Request for the ModifyAckDeadline method. +message ModifyAckDeadlineRequest { + // Required. The name of the subscription. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Required. List of acknowledgment IDs. + repeated string ack_ids = 4 [(google.api.field_behavior) = REQUIRED]; + + // Required. The new ack deadline with respect to the time this request was + // sent to the Pub/Sub system. For example, if the value is 10, the new ack + // deadline will expire 10 seconds after the `ModifyAckDeadline` call was + // made. Specifying zero might immediately make the message available for + // delivery to another subscriber client. This typically results in an + // increase in the rate of message redeliveries (that is, duplicates). + // The minimum deadline you can specify is 0 seconds. + // The maximum deadline you can specify is 600 seconds (10 minutes). + int32 ack_deadline_seconds = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the Acknowledge method. +message AcknowledgeRequest { + // Required. The subscription whose message is being acknowledged. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Required. The acknowledgment ID for the messages being acknowledged that + // was returned by the Pub/Sub system in the `Pull` response. Must not be + // empty. + repeated string ack_ids = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `StreamingPull` streaming RPC method. This request is used to +// establish the initial stream as well as to stream acknowledgements and ack +// deadline modifications from the client to the server. +message StreamingPullRequest { + // Required. The subscription for which to initialize the new stream. This + // must be provided in the first request on the stream, and must not be set in + // subsequent requests from client to server. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // List of acknowledgement IDs for acknowledging previously received messages + // (received on this stream or a different stream). If an ack ID has expired, + // the corresponding message may be redelivered later. Acknowledging a message + // more than once will not result in an error. If the acknowledgement ID is + // malformed, the stream will be aborted with status `INVALID_ARGUMENT`. + repeated string ack_ids = 2; + + // The list of new ack deadlines for the IDs listed in + // `modify_deadline_ack_ids`. The size of this list must be the same as the + // size of `modify_deadline_ack_ids`. If it differs the stream will be aborted + // with `INVALID_ARGUMENT`. Each element in this list is applied to the + // element in the same position in `modify_deadline_ack_ids`. The new ack + // deadline is with respect to the time this request was sent to the Pub/Sub + // system. Must be >= 0. For example, if the value is 10, the new ack deadline + // will expire 10 seconds after this request is received. If the value is 0, + // the message is immediately made available for another streaming or + // non-streaming pull request. If the value is < 0 (an error), the stream will + // be aborted with status `INVALID_ARGUMENT`. + repeated int32 modify_deadline_seconds = 3; + + // List of acknowledgement IDs whose deadline will be modified based on the + // corresponding element in `modify_deadline_seconds`. This field can be used + // to indicate that more time is needed to process a message by the + // subscriber, or to make the message available for redelivery if the + // processing was interrupted. + repeated string modify_deadline_ack_ids = 4; + + // Required. The ack deadline to use for the stream. This must be provided in + // the first request on the stream, but it can also be updated on subsequent + // requests from client to server. The minimum deadline you can specify is 10 + // seconds. The maximum deadline you can specify is 600 seconds (10 minutes). + int32 stream_ack_deadline_seconds = 5 + [(google.api.field_behavior) = REQUIRED]; + + // A unique identifier that is used to distinguish client instances from each + // other. Only needs to be provided on the initial request. When a stream + // disconnects and reconnects for the same stream, the client_id should be set + // to the same value so that state associated with the old stream can be + // transferred to the new stream. The same client_id should not be used for + // different client instances. + string client_id = 6; + + // Flow control settings for the maximum number of outstanding messages. When + // there are `max_outstanding_messages` or more currently sent to the + // streaming pull client that have not yet been acked or nacked, the server + // stops sending more messages. The sending of messages resumes once the + // number of outstanding messages is less than this value. If the value is + // <= 0, there is no limit to the number of outstanding messages. This + // property can only be set on the initial StreamingPullRequest. If it is set + // on a subsequent request, the stream will be aborted with status + // `INVALID_ARGUMENT`. + int64 max_outstanding_messages = 7; + + // Flow control settings for the maximum number of outstanding bytes. When + // there are `max_outstanding_bytes` or more worth of messages currently sent + // to the streaming pull client that have not yet been acked or nacked, the + // server will stop sending more messages. The sending of messages resumes + // once the number of outstanding bytes is less than this value. If the value + // is <= 0, there is no limit to the number of outstanding bytes. This + // property can only be set on the initial StreamingPullRequest. If it is set + // on a subsequent request, the stream will be aborted with status + // `INVALID_ARGUMENT`. + int64 max_outstanding_bytes = 8; +} + +// Response for the `StreamingPull` method. This response is used to stream +// messages from the server to the client. +message StreamingPullResponse { + // Received Pub/Sub messages. This will not be empty. + repeated ReceivedMessage received_messages = 1; +} + +// Request for the `CreateSnapshot` method. +message CreateSnapshotRequest { + // Required. User-provided name for this snapshot. If the name is not provided + // in the request, the server will assign a random name for this snapshot on + // the same project as the subscription. Note that for REST API requests, you + // must specify a name. See the resource + // name rules. Format is `projects/{project}/snapshots/{snap}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" } + ]; + + // Required. The subscription whose backlog the snapshot retains. + // Specifically, the created snapshot is guaranteed to retain: + // (a) The existing backlog on the subscription. More precisely, this is + // defined as the messages in the subscription's backlog that are + // unacknowledged upon the successful completion of the + // `CreateSnapshot` request; as well as: + // (b) Any messages published to the subscription's topic following the + // successful completion of the CreateSnapshot request. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // See Creating and + // managing labels. + map labels = 3; +} + +// Request for the UpdateSnapshot method. +message UpdateSnapshotRequest { + // Required. The updated snapshot object. + Snapshot snapshot = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Indicates which fields in the provided snapshot to update. + // Must be specified and non-empty. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// A snapshot resource. Snapshots are used in +// [Seek](https://cloud.google.com/pubsub/docs/replay-overview) +// operations, which allow you to manage message acknowledgments in bulk. That +// is, you can set the acknowledgment state of messages in an existing +// subscription to the state captured by a snapshot. +message Snapshot { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Snapshot" + pattern: "projects/{project}/snapshots/{snapshot}" + }; + + // The name of the snapshot. + string name = 1; + + // The name of the topic from which this snapshot is retaining messages. + string topic = 2 [ + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // The snapshot is guaranteed to exist up until this time. + // A newly-created snapshot expires no later than 7 days from the time of its + // creation. Its exact lifetime is determined at creation by the existing + // backlog in the source subscription. Specifically, the lifetime of the + // snapshot is `7 days - (age of oldest unacked message in the subscription)`. + // For example, consider a subscription whose oldest unacked message is 3 days + // old. If a snapshot is created from this subscription, the snapshot -- which + // will always capture this 3-day-old backlog as long as the snapshot + // exists -- will expire in 4 days. The service will refuse to create a + // snapshot that would expire in less than 1 hour after creation. + google.protobuf.Timestamp expire_time = 3; + + // See [Creating and managing labels] + // (https://cloud.google.com/pubsub/docs/labels). + map labels = 4; +} + +// Request for the GetSnapshot method. +message GetSnapshotRequest { + // Required. The name of the snapshot to get. + // Format is `projects/{project}/snapshots/{snap}`. + string snapshot = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" } + ]; +} + +// Request for the `ListSnapshots` method. +message ListSnapshotsRequest { + // Required. The name of the project in which to list snapshots. + // Format is `projects/{project-id}`. + string project = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Maximum number of snapshots to return. + int32 page_size = 2; + + // The value returned by the last `ListSnapshotsResponse`; indicates that this + // is a continuation of a prior `ListSnapshots` call, and that the system + // should return the next page of data. + string page_token = 3; +} + +// Response for the `ListSnapshots` method. +message ListSnapshotsResponse { + // The resulting snapshots. + repeated Snapshot snapshots = 1; + + // If not empty, indicates that there may be more snapshot that match the + // request; this value should be passed in a new `ListSnapshotsRequest`. + string next_page_token = 2; +} + +// Request for the `DeleteSnapshot` method. +message DeleteSnapshotRequest { + // Required. The name of the snapshot to delete. + // Format is `projects/{project}/snapshots/{snap}`. + string snapshot = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" } + ]; +} + +// Request for the `Seek` method. +message SeekRequest { + // Required. The subscription to affect. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + oneof target { + // The time to seek to. + // Messages retained in the subscription that were published before this + // time are marked as acknowledged, and messages retained in the + // subscription that were published after this time are marked as + // unacknowledged. Note that this operation affects only those messages + // retained in the subscription (configured by the combination of + // `message_retention_duration` and `retain_acked_messages`). For example, + // if `time` corresponds to a point before the message retention + // window (or to a point before the system's notion of the subscription + // creation time), only retained messages will be marked as unacknowledged, + // and already-expunged messages will not be restored. + google.protobuf.Timestamp time = 2; + + // The snapshot to seek to. The snapshot's topic must be the same as that of + // the provided subscription. + // Format is `projects/{project}/snapshots/{snap}`. + string snapshot = 3 [(google.api.resource_reference) = { + type: "pubsub.googleapis.com/Snapshot" + }]; + } +} + +// Response for the `Seek` method (this response is empty). +message SeekResponse {} diff --git a/proto/googleapis/google/pubsub/v1/schema.proto b/proto/googleapis/google/pubsub/v1/schema.proto new file mode 100644 index 0000000000..ae402ac4de --- /dev/null +++ b/proto/googleapis/google/pubsub/v1/schema.proto @@ -0,0 +1,289 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.pubsub.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/empty.proto"; + +option cc_enable_arenas = true; +option csharp_namespace = "Google.Cloud.PubSub.V1"; +option go_package = "google.golang.org/genproto/googleapis/pubsub/v1;pubsub"; +option java_multiple_files = true; +option java_outer_classname = "SchemaProto"; +option java_package = "com.google.pubsub.v1"; +option php_namespace = "Google\\Cloud\\PubSub\\V1"; +option ruby_package = "Google::Cloud::PubSub::V1"; + +// Service for doing schema-related operations. +// +// EXPERIMENTAL: The Schema service is in development and may not work yet. + +service SchemaService { + option (google.api.default_host) = "pubsub.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform," + "https://www.googleapis.com/auth/pubsub"; + + // Creates a schema. + rpc CreateSchema(CreateSchemaRequest) returns (Schema) { + option (google.api.http) = { + post: "/v1/{parent=projects/*}/schemas" + body: "schema" + }; + option (google.api.method_signature) = "parent,schema,schema_id"; + } + + // Gets a schema. + rpc GetSchema(GetSchemaRequest) returns (Schema) { + option (google.api.http) = { + get: "/v1/{name=projects/*/schemas/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists schemas in a project. + rpc ListSchemas(ListSchemasRequest) returns (ListSchemasResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*}/schemas" + }; + option (google.api.method_signature) = "parent"; + } + + // Deletes a schema. + rpc DeleteSchema(DeleteSchemaRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/schemas/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Validates a schema. + rpc ValidateSchema(ValidateSchemaRequest) returns (ValidateSchemaResponse) { + option (google.api.http) = { + post: "/v1/{parent=projects/*}/schemas:validate" + body: "*" + }; + option (google.api.method_signature) = "parent,schema"; + } + + // Validates a message against a schema. + rpc ValidateMessage(ValidateMessageRequest) + returns (ValidateMessageResponse) { + option (google.api.http) = { + post: "/v1/{parent=projects/*}/schemas:validateMessage" + body: "*" + }; + } +} + +// A schema resource. +message Schema { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Schema" + pattern: "projects/{project}/schemas/{schema}" + }; + + // Possible schema definition types. + enum Type { + // Default value. This value is unused. + TYPE_UNSPECIFIED = 0; + + // A Protocol Buffer schema definition. + PROTOCOL_BUFFER = 1; + + // An Avro schema definition. + AVRO = 2; + } + + // Required. Name of the schema. + // Format is `projects/{project}/schemas/{schema}`. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // The type of the schema definition. + Type type = 2; + + // The definition of the schema. This should contain a string representing + // the full definition of the schema that is a valid schema definition of + // the type specified in `type`. + string definition = 3; +} + +// Request for the CreateSchema method. +message CreateSchemaRequest { + // Required. The name of the project in which to create the schema. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "pubsub.googleapis.com/Schema" + } + ]; + + // Required. The schema object to create. + // + // This schema's `name` parameter is ignored. The schema object returned + // by CreateSchema will have a `name` made using the given `parent` and + // `schema_id`. + Schema schema = 2 [(google.api.field_behavior) = REQUIRED]; + + // The ID to use for the schema, which will become the final component of + // the schema's resource name. + // + // See https://cloud.google.com/pubsub/docs/admin#resource_names for resource + // name constraints. + string schema_id = 3; +} + +// View of Schema object fields to be returned by GetSchema and ListSchemas. +enum SchemaView { + // The default / unset value. + // The API will default to the BASIC view. + SCHEMA_VIEW_UNSPECIFIED = 0; + + // Include the name and type of the schema, but not the definition. + BASIC = 1; + + // Include all Schema object fields. + FULL = 2; +} + +// Request for the GetSchema method. +message GetSchemaRequest { + // Required. The name of the schema to get. + // Format is `projects/{project}/schemas/{schema}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // The set of fields to return in the response. If not set, returns a Schema + // with `name` and `type`, but not `definition`. Set to `FULL` to retrieve all + // fields. + SchemaView view = 2; +} + +// Request for the `ListSchemas` method. +message ListSchemasRequest { + // Required. The name of the project in which to list schemas. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // The set of Schema fields to return in the response. If not set, returns + // Schemas with `name` and `type`, but not `definition`. Set to `FULL` to + // retrieve all fields. + SchemaView view = 2; + + // Maximum number of schemas to return. + int32 page_size = 3; + + // The value returned by the last `ListSchemasResponse`; indicates that + // this is a continuation of a prior `ListSchemas` call, and that the + // system should return the next page of data. + string page_token = 4; +} + +// Response for the `ListSchemas` method. +message ListSchemasResponse { + // The resulting schemas. + repeated Schema schemas = 1; + + // If not empty, indicates that there may be more schemas that match the + // request; this value should be passed in a new `ListSchemasRequest`. + string next_page_token = 2; +} + +// Request for the `DeleteSchema` method. +message DeleteSchemaRequest { + // Required. Name of the schema to delete. + // Format is `projects/{project}/schemas/{schema}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; +} + +// Request for the `ValidateSchema` method. +message ValidateSchemaRequest { + // Required. The name of the project in which to validate schemas. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Required. The schema object to validate. + Schema schema = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Response for the `ValidateSchema` method. +message ValidateSchemaResponse {} + +// Request for the `ValidateMessage` method. +message ValidateMessageRequest { + // Required. The name of the project in which to validate schemas. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + oneof schema_spec { + // Name of the schema against which to validate. + // + // Format is `projects/{project}/schemas/{schema}`. + string name = 2 [ + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // Ad-hoc schema against which to validate + Schema schema = 3; + } + + // Message to validate against the provided `schema_spec`. + bytes message = 4; + + // The encoding expected for messages + Encoding encoding = 5; +} + +// Response for the `ValidateMessage` method. +message ValidateMessageResponse {} + +// Possible encoding types for messages. +enum Encoding { + // Unspecified + ENCODING_UNSPECIFIED = 0; + + // JSON encoding + JSON = 1; + + // Binary encoding, as defined by the schema type. For some schema types, + // binary encoding may not be available. + BINARY = 2; +} diff --git a/proto/prometheus/proto_model.proto b/proto/prometheus/proto_model.proto new file mode 100644 index 0000000000..0b84af9200 --- /dev/null +++ b/proto/prometheus/proto_model.proto @@ -0,0 +1,81 @@ +// Copyright 2013 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package io.prometheus.client; +option java_package = "io.prometheus.client"; + +message LabelPair { + optional string name = 1; + optional string value = 2; +} + +enum MetricType { + COUNTER = 0; + GAUGE = 1; + SUMMARY = 2; + UNTYPED = 3; + HISTOGRAM = 4; +} + +message Gauge { + optional double value = 1; +} + +message Counter { + optional double value = 1; +} + +message Quantile { + optional double quantile = 1; + optional double value = 2; +} + +message Summary { + optional uint64 sample_count = 1; + optional double sample_sum = 2; + repeated Quantile quantile = 3; +} + +message Untyped { + optional double value = 1; +} + +message Histogram { + optional uint64 sample_count = 1; + optional double sample_sum = 2; + repeated Bucket bucket = 3; // Ordered in increasing order of upper_bound, +Inf bucket is optional. +} + +message Bucket { + optional uint64 cumulative_count = 1; // Cumulative in increasing order. + optional double upper_bound = 2; // Inclusive. +} + +message Metric { + repeated LabelPair label = 1; + optional Gauge gauge = 2; + optional Counter counter = 3; + optional Summary summary = 4; + optional Untyped untyped = 5; + optional Histogram histogram = 7; + optional int64 timestamp_ms = 6; +} + +message MetricFamily { + optional string name = 1; + optional string help = 2; + optional MetricType type = 3; + repeated Metric metric = 4; +} diff --git a/proto/prometheus/remote.proto b/proto/prometheus/remote.proto new file mode 100644 index 0000000000..f1b3e6a765 --- /dev/null +++ b/proto/prometheus/remote.proto @@ -0,0 +1,88 @@ +// Copyright 2016 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; +package prometheus; + +option go_package = "prompb"; + +import "prometheus/types.proto"; +import "gogoproto/gogo.proto"; + +message WriteRequest { + repeated prometheus.TimeSeries timeseries = 1 [(gogoproto.nullable) = false]; + // Cortex uses this field to determine the source of the write request. + // We reserve it to avoid any compatibility issues. + reserved 2; + repeated prometheus.MetricMetadata metadata = 3 [(gogoproto.nullable) = false]; +} + +// ReadRequest represents a remote read request. +message ReadRequest { + repeated Query queries = 1; + + enum ResponseType { + // Server will return a single ReadResponse message with matched series that includes list of raw samples. + // It's recommended to use streamed response types instead. + // + // Response headers: + // Content-Type: "application/x-protobuf" + // Content-Encoding: "snappy" + SAMPLES = 0; + // Server will stream a delimited ChunkedReadResponse message that + // contains XOR or HISTOGRAM(!) encoded chunks for a single series. + // Each message is following varint size and fixed size bigendian + // uint32 for CRC32 Castagnoli checksum. + // + // Response headers: + // Content-Type: "application/x-streamed-protobuf; proto=prometheus.ChunkedReadResponse" + // Content-Encoding: "" + STREAMED_XOR_CHUNKS = 1; + } + + // accepted_response_types allows negotiating the content type of the response. + // + // Response types are taken from the list in the FIFO order. If no response type in `accepted_response_types` is + // implemented by server, error is returned. + // For request that do not contain `accepted_response_types` field the SAMPLES response type will be used. + repeated ResponseType accepted_response_types = 2; +} + +// ReadResponse is a response when response_type equals SAMPLES. +message ReadResponse { + // In same order as the request's queries. + repeated QueryResult results = 1; +} + +message Query { + int64 start_timestamp_ms = 1; + int64 end_timestamp_ms = 2; + repeated prometheus.LabelMatcher matchers = 3; + prometheus.ReadHints hints = 4; +} + +message QueryResult { + // Samples within a time series must be ordered by time. + repeated prometheus.TimeSeries timeseries = 1; +} + +// ChunkedReadResponse is a response when response_type equals STREAMED_XOR_CHUNKS. +// We strictly stream full series after series, optionally split by time. This means that a single frame can contain +// partition of the single series, but once a new series is started to be streamed it means that no more chunks will +// be sent for previous one. Series are returned sorted in the same way TSDB block are internally. +message ChunkedReadResponse { + repeated prometheus.ChunkedSeries chunked_series = 1; + + // query_index represents an index of the query from ReadRequest.queries these chunks relates to. + int64 query_index = 2; +} \ No newline at end of file diff --git a/proto/prometheus/types.proto b/proto/prometheus/types.proto new file mode 100644 index 0000000000..4e30058640 --- /dev/null +++ b/proto/prometheus/types.proto @@ -0,0 +1,186 @@ +// Copyright 2017 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; +package prometheus; + +option go_package = "prompb"; + +import "gogoproto/gogo.proto"; + +message MetricMetadata { + enum MetricType { + UNKNOWN = 0; + COUNTER = 1; + GAUGE = 2; + HISTOGRAM = 3; + GAUGEHISTOGRAM = 4; + SUMMARY = 5; + INFO = 6; + STATESET = 7; + } + + // Represents the metric type, these match the set from Prometheus. + // Refer to model/textparse/interface.go for details. + MetricType type = 1; + string metric_family_name = 2; + string help = 4; + string unit = 5; +} + +message Sample { + double value = 1; + // timestamp is in ms format, see model/timestamp/timestamp.go for + // conversion from time.Time to Prometheus timestamp. + int64 timestamp = 2; +} + +message Exemplar { + // Optional, can be empty. + repeated Label labels = 1 [(gogoproto.nullable) = false]; + double value = 2; + // timestamp is in ms format, see model/timestamp/timestamp.go for + // conversion from time.Time to Prometheus timestamp. + int64 timestamp = 3; +} + +// A native histogram, also known as a sparse histogram. +// Original design doc: +// https://docs.google.com/document/d/1cLNv3aufPZb3fNfaJgdaRBZsInZKKIHo9E6HinJVbpM/edit +// The appendix of this design doc also explains the concept of float +// histograms. This Histogram message can represent both, the usual +// integer histogram as well as a float histogram. +message Histogram { + enum ResetHint { + UNKNOWN = 0; // Need to test for a counter reset explicitly. + YES = 1; // This is the 1st histogram after a counter reset. + NO = 2; // There was no counter reset between this and the previous Histogram. + GAUGE = 3; // This is a gauge histogram where counter resets don't happen. + } + + oneof count { // Count of observations in the histogram. + uint64 count_int = 1; + double count_float = 2; + } + double sum = 3; // Sum of observations in the histogram. + // The schema defines the bucket schema. Currently, valid numbers + // are -4 <= n <= 8. They are all for base-2 bucket schemas, where 1 + // is a bucket boundary in each case, and then each power of two is + // divided into 2^n logarithmic buckets. Or in other words, each + // bucket boundary is the previous boundary times 2^(2^-n). In the + // future, more bucket schemas may be added using numbers < -4 or > + // 8. + sint32 schema = 4; + double zero_threshold = 5; // Breadth of the zero bucket. + oneof zero_count { // Count in zero bucket. + uint64 zero_count_int = 6; + double zero_count_float = 7; + } + + // Negative Buckets. + repeated BucketSpan negative_spans = 8; + // Use either "negative_deltas" or "negative_counts", the former for + // regular histograms with integer counts, the latter for float + // histograms. + repeated sint64 negative_deltas = 9; // Count delta of each bucket compared to previous one (or to zero for 1st bucket). + repeated double negative_counts = 10; // Absolute count of each bucket. + + // Positive Buckets. + repeated BucketSpan positive_spans = 11; + // Use either "positive_deltas" or "positive_counts", the former for + // regular histograms with integer counts, the latter for float + // histograms. + repeated sint64 positive_deltas = 12; // Count delta of each bucket compared to previous one (or to zero for 1st bucket). + repeated double positive_counts = 13; // Absolute count of each bucket. + + ResetHint reset_hint = 14; + // timestamp is in ms format, see model/timestamp/timestamp.go for + // conversion from time.Time to Prometheus timestamp. + int64 timestamp = 15; +} + +// A BucketSpan defines a number of consecutive buckets with their +// offset. Logically, it would be more straightforward to include the +// bucket counts in the Span. However, the protobuf representation is +// more compact in the way the data is structured here (with all the +// buckets in a single array separate from the Spans). +message BucketSpan { + sint32 offset = 1; // Gap to previous span, or starting point for 1st span (which can be negative). + uint32 length = 2; // Length of consecutive buckets. +} + +// TimeSeries represents samples and labels for a single time series. +message TimeSeries { + // For a timeseries to be valid, and for the samples and exemplars + // to be ingested by the remote system properly, the labels field is required. + repeated Label labels = 1 [(gogoproto.nullable) = false]; + repeated Sample samples = 2 [(gogoproto.nullable) = false]; + repeated Exemplar exemplars = 3 [(gogoproto.nullable) = false]; + repeated Histogram histograms = 4 [(gogoproto.nullable) = false]; +} + +message Label { + string name = 1; + string value = 2; +} + +message Labels { + repeated Label labels = 1 [(gogoproto.nullable) = false]; +} + +// Matcher specifies a rule, which can match or set of labels or not. +message LabelMatcher { + enum Type { + EQ = 0; + NEQ = 1; + RE = 2; + NRE = 3; + } + Type type = 1; + string name = 2; + string value = 3; +} + +message ReadHints { + int64 step_ms = 1; // Query step size in milliseconds. + string func = 2; // String representation of surrounding function or aggregation. + int64 start_ms = 3; // Start time in milliseconds. + int64 end_ms = 4; // End time in milliseconds. + repeated string grouping = 5; // List of label names used in aggregation. + bool by = 6; // Indicate whether it is without or by. + int64 range_ms = 7; // Range vector selector range in milliseconds. +} + +// Chunk represents a TSDB chunk. +// Time range [min, max] is inclusive. +message Chunk { + int64 min_time_ms = 1; + int64 max_time_ms = 2; + + // We require this to match chunkenc.Encoding. + enum Encoding { + UNKNOWN = 0; + XOR = 1; + HISTOGRAM = 2; + } + Encoding type = 3; + bytes data = 4; +} + +// ChunkedSeries represents single, encoded time series. +message ChunkedSeries { + // Labels should be sorted. + repeated Label labels = 1 [(gogoproto.nullable) = false]; + // Chunks will be in start time order and may overlap. + repeated Chunk chunks = 2 [(gogoproto.nullable) = false]; +} \ No newline at end of file diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f7a6a323ce072c5640ab7bda4075c52da5494587 GIT binary patch literal 6148 zcmeH~JqiLr422WjV!>uh%V|7-Hy9Q@ffrCvZ2SRH>p8kFnIO1Yi^vNkZ<3j?>{sk; zL`3`Bb}rJ1NDDWWnT3HV@S!XgpbMih*fu7fncDnq3%3fCL5v#x?Kk{$IjB&HsZIrX)ZD ze?~x?#cI*xrQ&XVdp)bKqiX8{hx&1Zm!AM6b`?+IZrD$@facIr6%`nN1RMhc34E2n E1HUyAx&QzG literal 0 HcmV?d00001 diff --git a/src/common/auth.rs b/src/common/auth.rs new file mode 100644 index 0000000000..ee2bd5d199 --- /dev/null +++ b/src/common/auth.rs @@ -0,0 +1,26 @@ +use argon2::{password_hash::SaltString, Algorithm, Argon2, Params, PasswordHasher, Version}; + +use crate::infra::config::PASSWORD_HASH; + +pub fn get_hash(pass: &str, salt: &str) -> String { + let key = format!("{}{}", pass, salt); + let hash = PASSWORD_HASH.get(&key); + match hash { + Some(ret_hash) => ret_hash.value().to_string(), + None => { + let t_cost = 4; + let m_cost = 2048; + let p_cost = 2; + let params = Params::new(m_cost, t_cost, p_cost, None).unwrap(); + let ctx = Argon2::new(Algorithm::Argon2d, Version::V0x10, params); + let password = pass.as_bytes(); + let salt_string = SaltString::b64_encode(salt.as_bytes()).unwrap(); + let password_hash = ctx + .hash_password(password, &salt_string) + .unwrap() + .to_string(); + PASSWORD_HASH.insert(key, password_hash.clone()); + password_hash + } + } +} diff --git a/src/common/file.rs b/src/common/file.rs new file mode 100644 index 0000000000..d91e64f839 --- /dev/null +++ b/src/common/file.rs @@ -0,0 +1,35 @@ +use std::{ + fs::{File, Metadata}, + io::{Read, Write}, +}; + +pub fn get_file_meta(file: &str) -> Result { + let file = File::open(file)?; + file.metadata() +} + +pub fn get_file_contents(file: &str) -> Result, std::io::Error> { + let mut file = File::open(file)?; + let mut contents: Vec = Vec::new(); + file.read_to_end(&mut contents)?; + Ok(contents) +} + +pub fn put_file_contents(file: &str, contents: &[u8]) -> Result<(), std::io::Error> { + let mut file = File::create(file)?; + file.write_all(contents)?; + Ok(()) +} + +pub fn delete_file(file: &str) -> Result<(), std::io::Error> { + std::fs::remove_file(file)?; + Ok(()) +} + +pub fn scan_files(pattern: &str) -> Vec { + let files: Vec = glob::glob(pattern) + .unwrap() + .map(|m| m.unwrap().to_str().unwrap().to_string()) + .collect(); + files +} diff --git a/src/common/http.rs b/src/common/http.rs new file mode 100644 index 0000000000..a8bedbc63b --- /dev/null +++ b/src/common/http.rs @@ -0,0 +1,25 @@ +use crate::meta::StreamType; +use actix_web::web::Query; +use ahash::AHashMap; +use std::io::{Error, ErrorKind}; + +pub fn get_stream_type_from_request( + query: &Query>, +) -> Result, Error> { + let stream_type = match query.get("type") { + Some(s) => match s.to_lowercase().as_str() { + "logs" => Some(StreamType::Logs), + "metrics" => Some(StreamType::Metrics), + "traces" => Some(StreamType::Traces), + _ => { + return Err(Error::new( + ErrorKind::Other, + "'type' query param with value 'logs' ,'metrics' or 'traces' allowed", + )); + } + }, + None => None, + }; + + Ok(stream_type) +} diff --git a/src/common/json.rs b/src/common/json.rs new file mode 100644 index 0000000000..9589352f70 --- /dev/null +++ b/src/common/json.rs @@ -0,0 +1,151 @@ +use flatten_json_object::{ArrayFormatting, Flattener}; + +pub type Value = serde_json::Value; + +#[inline(always)] +#[cfg(target_arch = "x86_64")] +pub fn to_string(value: &T) -> Result +where + T: ?Sized + serde::Serialize, +{ + simd_json::to_string(value) +} + +#[inline(always)] +#[cfg(target_arch = "x86_64")] +pub fn to_vec(value: &T) -> Result, simd_json::Error> +where + T: ?Sized + serde::Serialize, +{ + simd_json::to_vec(value) +} + +#[inline(always)] +#[cfg(target_arch = "x86_64")] +pub fn from_str<'a, T>(s: &'a str) -> Result +where + T: serde::Deserialize<'a>, +{ + from_slice(s.as_bytes()) +} + +#[inline(always)] +#[cfg(target_arch = "x86_64")] +pub fn from_slice<'a, T>(v: &'a [u8]) -> Result +where + T: serde::Deserialize<'a>, +{ + serde_json::from_slice(v) +} + +#[inline(always)] +#[cfg(not(target_arch = "x86_64"))] +pub fn to_string(value: &T) -> Result +where + T: ?Sized + serde::Serialize, +{ + serde_json::to_string(value) +} + +#[inline(always)] +#[cfg(not(target_arch = "x86_64"))] +pub fn to_vec(value: &T) -> Result, serde_json::Error> +where + T: ?Sized + serde::Serialize, +{ + serde_json::to_vec(value) +} + +#[inline(always)] +#[cfg(not(target_arch = "x86_64"))] +pub fn from_str<'a, T>(s: &'a str) -> Result +where + T: serde::Deserialize<'a>, +{ + from_slice(s.as_bytes()) +} + +#[inline(always)] +#[cfg(not(target_arch = "x86_64"))] +pub fn from_slice<'a, T>(v: &'a [u8]) -> Result +where + T: serde::Deserialize<'a>, +{ + serde_json::from_slice(v) +} + +#[inline(always)] +pub fn flatten_json(obj: &Value) -> Value { + Flattener::new() + .set_key_separator(".") + .set_array_formatting(ArrayFormatting::Surrounded { + start: "[".to_string(), + end: "]".to_string(), + }) + .set_preserve_empty_arrays(false) + .set_preserve_empty_objects(false) + .flatten(obj) + .unwrap() +} + +pub fn unflatten_json(obj: &Value) -> Value { + if !obj.is_object() { + return obj.to_owned(); + } + + let mut unflattened = serde_json::Map::new(); + for (key, value) in obj.as_object().unwrap() { + let mut current = &mut unflattened; + let mut parts = key.split('.'); + let last = parts.next_back().unwrap(); + for part in parts { + let old = current.get(part); + if let Some(old) = old { + if !old.is_object() { + let old = old.to_owned(); + current.insert(part.to_string(), Value::Object(serde_json::Map::new())); + current = current.get_mut(part).unwrap().as_object_mut().unwrap(); + current.insert("".to_string(), old); + } else { + current = current.get_mut(part).unwrap().as_object_mut().unwrap(); + } + } else { + current.insert(part.to_string(), Value::Object(serde_json::Map::new())); + current = current.get_mut(part).unwrap().as_object_mut().unwrap(); + } + } + current.insert(last.to_string(), value.clone()); + } + Value::Object(unflattened) +} + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + #[test] + fn test_flatten_json() { + let obj = json!({"key": "value", "nested_key": {"key": "value", "foo": "bar"}}); + assert_eq!( + flatten_json(&obj), + json!({"key": "value", "nested_key.key": "value", "nested_key.foo": "bar"}), + ); + } + #[test] + fn test_unflatten_json1() { + let obj = json!({"key1": "value1", "nested_key.key2": "value2", "nested_key.foo": "bar"}); + assert_eq!( + unflatten_json(&obj), + json!({"key1": "value1", "nested_key": {"key2": "value2", "foo": "bar"}}), + ); + } + #[test] + fn test_unflatten_json2() { + let obj = + json!({"key1": "value1", "nested_key.key2": "value2", "nested_key.key2.foo": "bar"}); + assert_eq!( + unflatten_json(&obj), + json!({"key1": "value1", "nested_key": {"key2": {"":"value2", "foo": "bar"}}}), + ); + } +} diff --git a/src/common/mod.rs b/src/common/mod.rs new file mode 100644 index 0000000000..89f514dc2b --- /dev/null +++ b/src/common/mod.rs @@ -0,0 +1,9 @@ +pub mod auth; +pub mod file; +pub mod http; +pub mod json; +pub mod notification; +pub mod str; +pub mod stream; +pub mod time; +pub mod utils; diff --git a/src/common/notification.rs b/src/common/notification.rs new file mode 100644 index 0000000000..5398bb9879 --- /dev/null +++ b/src/common/notification.rs @@ -0,0 +1,15 @@ +use std::error::Error as StdError; +pub async fn send_notification( + url: &str, + payload: serde_json::Value, +) -> Result<(), Box> { + let client = reqwest::Client::new(); + let loc_url = url::Url::parse(url).unwrap(); + let req = client + .post(loc_url) + .header("Content-type", "application/json") + .json(&payload); + + let _ = req.send().await.unwrap(); + Ok(()) +} diff --git a/src/common/str.rs b/src/common/str.rs new file mode 100644 index 0000000000..7ea20a312e --- /dev/null +++ b/src/common/str.rs @@ -0,0 +1,23 @@ +#[inline(always)] +#[cfg(target_arch = "x86_64")] +pub fn find(haystack: &str, needle: &str) -> bool { + memchr::memmem::find(haystack.as_bytes(), needle.as_bytes()).is_some() +} + +#[inline(always)] +#[cfg(not(target_arch = "x86_64"))] +pub fn find(haystack: &str, needle: &str) -> bool { + haystack.contains(needle) +} + +#[cfg(test)] +mod test_utils { + use super::*; + #[test] + fn test_find() { + let haystack = "This is Zinc-oxide"; + let needle = "oxide"; + let result = find(haystack, needle); + assert_eq!(result, true) + } +} diff --git a/src/common/stream.rs b/src/common/stream.rs new file mode 100644 index 0000000000..49d30bf0b2 --- /dev/null +++ b/src/common/stream.rs @@ -0,0 +1,14 @@ +use actix_web::HttpResponse; +use std::io::{Error, ErrorKind}; + +pub fn stream_type_query_param_error() -> Result { + /* return Ok(HttpResponse::BadRequest().json(MetaHttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some("only 'type' query param with value 'logs' or 'metrics' allowed".to_string()), + ))); */ + + Err(Error::new( + ErrorKind::Other, + "only 'type' query param with value 'logs' or 'metrics' allowed", + )) +} diff --git a/src/common/time.rs b/src/common/time.rs new file mode 100644 index 0000000000..4c8f04db90 --- /dev/null +++ b/src/common/time.rs @@ -0,0 +1,74 @@ +use chrono::{DateTime, FixedOffset, TimeZone, Utc}; + +pub fn parse_str_to_time(s: &str) -> Result, anyhow::Error> { + if s.contains('T') { + if s.len() == 19 { + let fmt = "%Y-%m-%dT%H:%M:%S"; + let ret = Utc.datetime_from_str(s, fmt)?; + Ok(ret.into()) + } else { + Ok(chrono::DateTime::parse_from_rfc3339(s)?) + } + } else if s.contains(',') { + Ok(chrono::DateTime::parse_from_rfc2822(s)?) + } else { + let fmt = "%Y-%m-%d %H:%M:%S"; + let ret = Utc.datetime_from_str(s, fmt)?; + Ok(ret.into()) + } +} + +pub fn parse_str_to_timestamp_micros(v: &str) -> Result { + let n: i64 = match v.parse() { + Ok(i) => i, + Err(_) => match parse_str_to_time(v) { + Ok(v) => { + return Ok(v.timestamp_micros()); + } + Err(_) => { + return Err(anyhow::anyhow!("invalid time format [string]")); + } + }, + }; + parse_i64_to_timestamp_micros(n) +} + +pub fn parse_i64_to_timestamp_micros(v: i64) -> Result { + if v == 0 { + return Ok(0); + } + if v > (1e18 as i64) { + // nanoseconds + Ok(v / 1000) + } else if v > (1e15 as i64) { + // microseconds + Ok(v) + } else if v > (1e12 as i64) { + // milliseconds + Ok(v * 1000) + } else if v > (1e9 as i64) { + // seconds + Ok(v * 1000 * 1000) + } else { + Err(anyhow::anyhow!("Invalid time format [timestamp:value]")) + } +} + +pub fn parse_timestamp_micro_from_value(v: &serde_json::Value) -> Result { + let n = match v { + serde_json::Value::String(s) => parse_str_to_timestamp_micros(s)?, + serde_json::Value::Number(n) => { + if n.is_i64() { + n.as_i64().unwrap() + } else if n.is_u64() { + n.as_u64().unwrap() as i64 + } else if n.is_f64() { + n.as_f64().unwrap() as i64 + } else { + return Err(anyhow::anyhow!("Invalid time format [timestamp]")); + } + } + _ => return Err(anyhow::anyhow!("Invalid time format [type]")), + }; + parse_i64_to_timestamp_micros(n) +} diff --git a/src/common/utils.rs b/src/common/utils.rs new file mode 100644 index 0000000000..6925395991 --- /dev/null +++ b/src/common/utils.rs @@ -0,0 +1,149 @@ +use datafusion::{ + arrow::{datatypes::Schema, json, record_batch::RecordBatch}, + datasource::MemTable, + prelude::SessionContext, +}; +use serde_json::Value; +use std::sync::Arc; + +use crate::infra::config::CONFIG; +use crate::meta::common::FileMeta; +use crate::meta::StreamType; + +pub fn increment_stream_file_num_v1(file_name: &str) -> u32 { + let last_file_suffix_stream = &file_name.rfind('_').unwrap() + 1; + let last_file_suffix = + &file_name[last_file_suffix_stream..file_name.len() - CONFIG.common.file_ext_json.len()]; + last_file_suffix.parse::().unwrap() + 1 +} + +pub fn get_stream_file_num_v1(file_name: &str) -> u32 { + let last_file_suffix_stream = &file_name.rfind('_').unwrap() + 1; + let last_file_suffix = + &file_name[last_file_suffix_stream..file_name.len() - CONFIG.common.file_ext_json.len()]; + last_file_suffix.parse::().unwrap() +} + +pub fn get_file_name_v1(org_id: &str, stream_name: &str, suffix: u32) -> String { + // creates file name like "./data/olympics/olympics#2022#09#13#13_1.json" + format!( + "{}{}/{}/{}/{}_{}{}", + &CONFIG.common.data_wal_dir, + org_id, + StreamType::Logs, + stream_name, + stream_name, + suffix, + &CONFIG.common.file_ext_json + ) +} + +pub async fn populate_file_meta( + schema: Arc, + batch: Vec>, + file_meta: &mut FileMeta, +) { + let ctx = SessionContext::new(); + let provider = MemTable::try_new(schema.clone(), batch).unwrap(); + ctx.register_table("temp", Arc::new(provider)).unwrap(); + + let sql = format!( + "SELECT min({0}) as min, max({0}) as max ,count({0}) as num_records FROM temp ;", + CONFIG.common.time_stamp_col + ); + let df = ctx.sql(sql.as_str()).await.unwrap(); + let batches = df.collect().await.unwrap(); + let json_rows = json::writer::record_batches_to_json_rows(&batches[..]).unwrap(); + let mut result: Vec = json_rows + .into_iter() + .map(serde_json::Value::Object) + .collect(); + + let record = result.pop().unwrap(); + file_meta.min_ts = record.get("min").unwrap().as_i64().unwrap(); + file_meta.max_ts = record.get("max").unwrap().as_i64().unwrap(); + file_meta.records = record.get("num_records").unwrap().as_u64().unwrap(); +} + +#[inline] +pub fn is_local_disk_storage() -> bool { + CONFIG.common.local_mode && CONFIG.common.local_mode_storage.eq("disk") +} + +#[cfg(test)] +mod test_utils { + use super::*; + use datafusion::{ + arrow::{ + array::{Int64Array, StringArray}, + datatypes::{DataType, Field}, + }, + from_slice::FromSlice, + }; + + #[test] + fn test_increment_stream_file_num_v1() { + let suffix_nums = vec![1, 9, 11, 78, 100, 234, 546]; + + for i in 0..suffix_nums.len() { + let suffix = increment_stream_file_num_v1(&format!( + "./data/WAL/nexus/logs/olympics/1663064862606912_{}.json", + suffix_nums[i] + )); + assert_eq!(suffix, suffix_nums[i] + 1); + } + } + + #[test] + fn test_get_file_name_v1() { + let file_key = get_file_name_v1(&"nexus".to_owned(), &"Olympics".to_owned(), 2); + assert_eq!( + file_key.as_str(), + "./data/wal/nexus/logs/Olympics/Olympics_2.json" + ); + } + + #[test] + fn test_get_stream_file_num_v1() { + let file_key = get_stream_file_num_v1("./data/WAL/logs/nexus/Olympics/Olympics_2.json"); + assert_eq!(file_key, 2); + } + + #[actix_web::test] + async fn test_populate_file_meta() { + // define a schema. + let val: i64 = 1666093521151350; + let schema = Arc::new(Schema::new(vec![ + Field::new("log", DataType::Utf8, false), + Field::new("pod_id", DataType::Int64, false), + Field::new("_timestamp", DataType::Int64, false), + ])); + + // define data. + let batch = RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(StringArray::from_slice(&["a", "b", "c", "d"])), + Arc::new(Int64Array::from_slice(&[1, 2, 1, 2])), + Arc::new(Int64Array::from_slice(&[ + val - 100, + val - 10, + val - 90, + val, + ])), + ], + ) + .unwrap(); + //let file_name = path.file_name(); + let mut file_meta = FileMeta { + min_ts: 0, + max_ts: 0, + records: 0, + original_size: 1000, + compressed_size: 700, + }; + populate_file_meta(schema, vec![vec![batch]], &mut file_meta).await; + assert_eq!(file_meta.records, 4); + assert_eq!(file_meta.min_ts, val - 100); + } +} diff --git a/src/handler/grpc/auth/mod.rs b/src/handler/grpc/auth/mod.rs new file mode 100644 index 0000000000..0619f7d93d --- /dev/null +++ b/src/handler/grpc/auth/mod.rs @@ -0,0 +1,37 @@ +use crate::{ + common::auth::get_hash, + infra::config::{CONFIG, USERS}, +}; +use http_auth_basic::Credentials; +use tonic::{Request, Status}; + +pub fn check_auth(req: Request<()>) -> Result, Status> { + if !req.metadata().contains_key(&CONFIG.grpc.org_header_key) + && !req.metadata().contains_key("authorization") + { + return Err(Status::unauthenticated("No valid auth token")); + } + + let token = req + .metadata() + .get("authorization") + .unwrap() + .to_str() + .unwrap() + .to_string(); + let credentials = match Credentials::from_header(token) { + Ok(c) => c, + Err(_) => return Err(Status::unauthenticated("No valid auth token")), + }; + + let user = USERS.get(&CONFIG.auth.username).unwrap(); + let in_pass = get_hash(&credentials.password, &user.salt); + + if credentials.user_id.eq(&CONFIG.auth.username) + && (user.password.eq(&credentials.password) || user.password.eq(&in_pass)) + { + Ok(req) + } else { + Err(Status::unauthenticated("No valid auth token")) + } +} diff --git a/src/handler/grpc/mod.rs b/src/handler/grpc/mod.rs new file mode 100644 index 0000000000..598c1968f9 --- /dev/null +++ b/src/handler/grpc/mod.rs @@ -0,0 +1,81 @@ +use uuid::Uuid; + +use crate::meta; + +pub mod auth; +pub mod request; + +pub mod cluster_rpc { + tonic::include_proto!("cluster"); +} + +impl From for cluster_rpc::SearchRequest { + fn from(req: meta::search::Request) -> Self { + let req_query = cluster_rpc::SearchQuery { + sql: req.query.sql.clone(), + sql_mode: req.query.sql_mode.clone(), + from: req.query.from as i32, + size: req.query.size as i32, + start_time: req.query.start_time, + end_time: req.query.end_time, + track_total_hits: req.query.track_total_hits, + }; + + let job = cluster_rpc::Job { + session_id: Uuid::new_v4().to_string(), + job: "".to_string(), + stage: 0, + partition: 0, + }; + + let mut aggs = Vec::new(); + for (name, sql) in req.aggs { + aggs.push(cluster_rpc::SearchAggRequest { name, sql }); + } + + cluster_rpc::SearchRequest { + job: Some(job), + org_id: "".to_string(), + stype: cluster_rpc::SearchType::User.into(), + query: Some(req_query), + aggs, + partition: None, + file_list: vec![], + stream_type: "".to_string(), + } + } +} + +impl From<&meta::common::FileMeta> for cluster_rpc::FileMeta { + fn from(req: &meta::common::FileMeta) -> Self { + cluster_rpc::FileMeta { + min_ts: req.min_ts, + max_ts: req.max_ts, + records: req.records, + original_size: req.original_size, + compressed_size: req.compressed_size, + } + } +} + +impl From<&cluster_rpc::FileMeta> for meta::common::FileMeta { + fn from(req: &cluster_rpc::FileMeta) -> Self { + meta::common::FileMeta { + min_ts: req.min_ts, + max_ts: req.max_ts, + records: req.records, + original_size: req.original_size, + compressed_size: req.compressed_size, + } + } +} + +impl From<&meta::common::FileKey> for cluster_rpc::FileKey { + fn from(req: &meta::common::FileKey) -> Self { + cluster_rpc::FileKey { + key: req.key.clone(), + meta: Some(cluster_rpc::FileMeta::from(&req.meta)), + deleted: req.deleted, + } + } +} diff --git a/src/handler/grpc/request/event.rs b/src/handler/grpc/request/event.rs new file mode 100644 index 0000000000..c32f475c76 --- /dev/null +++ b/src/handler/grpc/request/event.rs @@ -0,0 +1,44 @@ +use opentelemetry::global; +use tonic::{Request, Response, Status}; +use tracing_opentelemetry::OpenTelemetrySpanExt; + +use crate::handler::grpc::cluster_rpc::event_server::Event; +use crate::handler::grpc::cluster_rpc::EmptyResponse; +use crate::handler::grpc::cluster_rpc::FileList; +use crate::meta::common::FileMeta; +use crate::service::db::file_list; + +#[derive(Default)] +pub struct Eventer {} + +#[tonic::async_trait] +impl Event for Eventer { + #[tracing::instrument(name = "grpc:event:SendFileList:enter", skip(self, req))] + async fn send_file_list( + &self, + req: Request, + ) -> Result, Status> { + let parent_cx = global::get_text_map_propagator(|prop| { + prop.extract(&super::MetadataMap(req.metadata())) + }); + tracing::Span::current().set_parent(parent_cx); + + let req = req.get_ref(); + for file in req.items.iter() { + log::info!("received event:file, {:?}", file); + if let Err(e) = file_list::progress( + &file.key, + FileMeta::from(file.meta.as_ref().unwrap()), + file.deleted, + ) + .await + { + return Err(Status::internal(e.to_string())); + } + } + + let result = EmptyResponse {}; + + Ok(Response::new(result)) + } +} diff --git a/src/handler/grpc/request/mod.rs b/src/handler/grpc/request/mod.rs new file mode 100644 index 0000000000..5c72881556 --- /dev/null +++ b/src/handler/grpc/request/mod.rs @@ -0,0 +1,25 @@ +use opentelemetry::propagation::Extractor; + +pub mod event; +pub mod search; +pub mod traces; + +pub struct MetadataMap<'a>(&'a tonic::metadata::MetadataMap); + +impl<'a> Extractor for MetadataMap<'a> { + /// Get a value for a key from the MetadataMap. If the value can't be converted to &str, returns None + fn get(&self, key: &str) -> Option<&str> { + self.0.get(key).and_then(|metadata| metadata.to_str().ok()) + } + + /// Collect all the keys from the MetadataMap. + fn keys(&self) -> Vec<&str> { + self.0 + .keys() + .map(|key| match key { + tonic::metadata::KeyRef::Ascii(v) => v.as_str(), + tonic::metadata::KeyRef::Binary(v) => v.as_str(), + }) + .collect::>() + } +} diff --git a/src/handler/grpc/request/search.rs b/src/handler/grpc/request/search.rs new file mode 100644 index 0000000000..cc33fbafdc --- /dev/null +++ b/src/handler/grpc/request/search.rs @@ -0,0 +1,34 @@ +use opentelemetry::global; +use tonic::{Request, Response, Status}; +use tracing_opentelemetry::OpenTelemetrySpanExt; + +use crate::handler::grpc::cluster_rpc::search_server::Search; +use crate::handler::grpc::cluster_rpc::SearchRequest; +use crate::handler::grpc::cluster_rpc::SearchResponse; +use crate::service::search as SearchService; + +#[derive(Default)] +pub struct Searcher {} + +#[tonic::async_trait] +impl Search for Searcher { + #[tracing::instrument(name = "grpc:search:enter", skip(self, req))] + async fn search( + &self, + req: Request, + ) -> Result, Status> { + let parent_cx = global::get_text_map_propagator(|prop| { + prop.extract(&super::MetadataMap(req.metadata())) + }); + tracing::Span::current().set_parent(parent_cx); + + let req = req.get_ref(); + let result = match SearchService::exec::search(req).await { + Ok(res) => res, + Err(err) => { + return Err(Status::internal(err.to_string())); + } + }; + Ok(Response::new(result)) + } +} diff --git a/src/handler/grpc/request/traces.rs b/src/handler/grpc/request/traces.rs new file mode 100644 index 0000000000..c269bce7fc --- /dev/null +++ b/src/handler/grpc/request/traces.rs @@ -0,0 +1,41 @@ +use opentelemetry_proto::tonic::collector::trace::v1::{ + trace_service_server::TraceService, ExportTraceServiceRequest, ExportTraceServiceResponse, +}; +use tonic::Status; +use tonic::{codegen::*, Response}; + +use crate::infra::config::CONFIG; +use crate::service::traces::handle_trace_request; + +#[derive(Default)] +pub struct TraceServer {} +#[async_trait] +impl TraceService for TraceServer { + async fn export( + &self, + request: tonic::Request, + ) -> Result, tonic::Status> { + let metadata = request.metadata().clone(); + let msg = format!( + "Please specify orgnization id with header key '{}' ", + &CONFIG.grpc.org_header_key + ); + if !metadata.contains_key(&CONFIG.grpc.org_header_key) { + return Err(Status::invalid_argument(msg)); + } + + let in_req = request.into_inner(); + let org_id = metadata.get(&CONFIG.grpc.org_header_key); + if org_id.is_none() { + return Err(Status::invalid_argument(msg)); + } + + let thread_id = Arc::new(0); + let resp = handle_trace_request(org_id.unwrap().to_str().unwrap(), thread_id, in_req).await; + if resp.is_ok() { + return Ok(Response::new(ExportTraceServiceResponse {})); + } else { + Err(Status::internal(resp.err().unwrap().to_string())) + } + } +} diff --git a/src/handler/http/auth/mod.rs b/src/handler/http/auth/mod.rs new file mode 100644 index 0000000000..100047192c --- /dev/null +++ b/src/handler/http/auth/mod.rs @@ -0,0 +1,85 @@ +use actix_web::{ + dev::ServiceRequest, + error::{ErrorForbidden, ErrorUnauthorized}, + Error, +}; +use actix_web_httpauth::extractors::basic::BasicAuth; + +use crate::common::auth::get_hash; +use crate::infra::config::CONFIG; +use crate::meta::user::Role; +use crate::service::users; + +pub async fn validator( + req: ServiceRequest, + credentials: BasicAuth, +) -> Result { + let path = req.request().path().strip_prefix("/api/").unwrap(); + match validate_credentials( + credentials.user_id(), + credentials.password().unwrap().trim(), + path, + ) + .await + { + Ok(res) => { + if res { + Ok(req) + } else { + Err((ErrorUnauthorized("Unauthorized Access"), req)) + } + } + Err(err) => Err((err, req)), + } +} + +pub async fn validate_credentials( + user_id: &str, + user_password: &str, + path: &str, +) -> Result { + let mut user = match path.find('/') { + Some(index) => { + let org_id = &path[0..index]; + users::get_user(Some(org_id), user_id).await + } + None => users::get_user(None, user_id).await, + }; + + //this is only applicable for super admin user + if user.is_none() && is_admin_user(user_id).await { + user = users::get_user(None, user_id).await; + if user.is_none() { + return Ok(false); + } + } else { + return Ok(false); + } + + let user = user.unwrap(); + let in_pass = get_hash(user_password, &user.salt); + if !user.password.eq(&in_pass) { + return Ok(false); + } + if !path.contains("/user") + || (path.contains("/user") && (user.role.eq(&Role::Admin) || user.role.eq(&Role::Root))) + { + Ok(true) + } else { + Err(ErrorForbidden("Not allowed")) + } +} + +pub async fn is_admin_user(user_id: &str) -> bool { + user_id.eq(&CONFIG.auth.username) +} + +#[cfg(test)] +mod test_utils { + use super::*; + #[actix_web::test] + async fn test_validate_credentials() { + let res = validate_credentials(&CONFIG.auth.username, &CONFIG.auth.password, "index").await; + assert_eq!(res.is_ok(), true) + } +} diff --git a/src/handler/http/mod.rs b/src/handler/http/mod.rs new file mode 100644 index 0000000000..7f076883c7 --- /dev/null +++ b/src/handler/http/mod.rs @@ -0,0 +1,4 @@ +#![cfg_attr(coverage_nightly, feature(no_coverage))] +pub mod auth; +pub mod request; +pub mod router; diff --git a/src/handler/http/request/alerts/mod.rs b/src/handler/http/request/alerts/mod.rs new file mode 100644 index 0000000000..9c57ea2150 --- /dev/null +++ b/src/handler/http/request/alerts/mod.rs @@ -0,0 +1,36 @@ +use crate::{meta::alert::Alert, service::alerts}; +use actix_web::{delete, get, post, web, HttpResponse, Responder}; +use std::io::Error; + +#[post("/{org_id}/{stream_name}/alerts/{alert_name}")] +pub async fn save_alert( + path: web::Path<(String, String, String)>, + alert: web::Json, +) -> Result { + let (org_id, stream_name, name) = path.into_inner(); + alerts::save_alert(org_id, stream_name, name, alert.into_inner()).await +} + +#[get("/{org_id}/{stream_name}/alerts")] +async fn list_stream_alerts(path: web::Path<(String, String)>) -> impl Responder { + let (org_id, stream_name) = path.into_inner(); + alerts::list_alert(org_id, Some(stream_name.as_str())).await +} + +#[get("/{org_id}/alerts")] +async fn list_alerts(path: web::Path) -> impl Responder { + let org_id = path.into_inner(); + alerts::list_alert(org_id, None).await +} + +#[get("/{org_id}/{stream_name}/alerts/{alert_name}")] +async fn get_alert(path: web::Path<(String, String, String)>) -> impl Responder { + let (org_id, stream_name, name) = path.into_inner(); + alerts::get_alert(org_id, stream_name, name).await +} + +#[delete("/{org_id}/{stream_name}/alerts/{alert_name}")] +async fn delete_alert(path: web::Path<(String, String, String)>) -> impl Responder { + let (org_id, stream_name, name) = path.into_inner(); + alerts::delete_alert(org_id, stream_name, name).await +} diff --git a/src/handler/http/request/dashboards/mod.rs b/src/handler/http/request/dashboards/mod.rs new file mode 100644 index 0000000000..55956f5121 --- /dev/null +++ b/src/handler/http/request/dashboards/mod.rs @@ -0,0 +1,30 @@ +use actix_web::{delete, get, post, web, HttpResponse, Responder}; +use std::io::Error; + +use crate::service::dashboards; + +#[post("/{org_id}/dashboards/{name}")] +pub async fn save_dashboard( + path: web::Path<(String, String)>, + details: web::Json, +) -> Result { + let (org_id, name) = path.into_inner(); + dashboards::save_dashboard(&org_id, &name, &details).await +} + +#[get("/{org_id}/dashboards")] +async fn list_dashboards(org_id: web::Path) -> impl Responder { + dashboards::list_dashboards(&org_id.into_inner()).await +} + +#[get("/{org_id}/dashboards/{name}")] +async fn get_dashboard(path: web::Path<(String, String)>) -> impl Responder { + let (org_id, name) = path.into_inner(); + dashboards::get_dashboard(&org_id, &name).await +} + +#[delete("/{org_id}/dashboards/{name}")] +async fn delete_dashboard(path: web::Path<(String, String)>) -> impl Responder { + let (org_id, name) = path.into_inner(); + dashboards::delete_dashboard(&org_id, &name).await +} diff --git a/src/handler/http/request/document/data_ingest.rs b/src/handler/http/request/document/data_ingest.rs new file mode 100644 index 0000000000..16ee61a490 --- /dev/null +++ b/src/handler/http/request/document/data_ingest.rs @@ -0,0 +1,48 @@ +use crate::service::logs; +use actix_web::{post, web, HttpResponse}; +use prometheus::GaugeVec; +use std::io::Error; +#[utoipa::path( + context_path = "/api", + responses( + (status = 200, description = "multi ingest api", body = IngestionResponse , example = json!({"code": 200,"status": [{"name": "olympics","successful": 3,"failed": 0}]})) + ) + )] +#[post("/{org_id}/_bulk")] +pub async fn bulk_ingest( + org_id: web::Path, + body: actix_web::web::Bytes, + thread_id: web::Data, + ingest_stats: web::Data, +) -> Result { + let org_id = org_id.into_inner(); + logs::bulk::ingest(&org_id, body, thread_id, ingest_stats).await +} + +#[utoipa::path( + context_path = "/api", + responses( + (status = 200, description = "multi ingest api", body = IngestionResponse , example = json!({"code": 200,"status": [{"name": "olympics","successful": 3,"failed": 0}]})) + ) + )] +#[post("/{org_id}/{stream_name}/_multi")] +pub async fn multi_ingest( + path: web::Path<(String, String)>, + body: actix_web::web::Bytes, + thread_id: web::Data, + ingest_stats: web::Data, +) -> Result { + let (org_id, stream_name) = path.into_inner(); + logs::multi::ingest(&org_id, &stream_name, body, thread_id, ingest_stats).await +} + +#[post("/{org_id}/{stream_name}/_json")] +pub async fn json_ingest( + path: web::Path<(String, String)>, + body: actix_web::web::Bytes, + thread_id: web::Data, + ingest_stats: web::Data, +) -> Result { + let (org_id, stream_name) = path.into_inner(); + logs::json::ingest(&org_id, &stream_name, body, thread_id, ingest_stats).await +} diff --git a/src/handler/http/request/document/mod.rs b/src/handler/http/request/document/mod.rs new file mode 100644 index 0000000000..3ed11cc15f --- /dev/null +++ b/src/handler/http/request/document/mod.rs @@ -0,0 +1 @@ +pub mod data_ingest; diff --git a/src/handler/http/request/functions/mod.rs b/src/handler/http/request/functions/mod.rs new file mode 100644 index 0000000000..464eb9ac09 --- /dev/null +++ b/src/handler/http/request/functions/mod.rs @@ -0,0 +1 @@ +pub mod udf; diff --git a/src/handler/http/request/functions/udf.rs b/src/handler/http/request/functions/udf.rs new file mode 100644 index 0000000000..f5832dad2e --- /dev/null +++ b/src/handler/http/request/functions/udf.rs @@ -0,0 +1,47 @@ +use actix_web::{delete, get, post, web, HttpResponse, Responder}; +use std::io::Error; + +use crate::{meta::transform::Transform, service::transform}; + +#[post("/{org_id}/functions/{name}")] +pub async fn save_function( + path: web::Path<(String, String)>, + js_func: web::Json, +) -> Result { + let (org_id, name) = path.into_inner(); + let transform = js_func.into_inner(); + transform::register_transform(org_id, None, name, transform).await +} + +#[get("/{org_id}/functions")] +async fn list_functions(org_id: web::Path) -> impl Responder { + transform::list_transform(org_id.into_inner(), None).await +} + +#[delete("/{org_id}/functions/{name}")] +async fn delete_function(path: web::Path<(String, String)>) -> impl Responder { + let (org_id, name) = path.into_inner(); + transform::delete_transform(org_id, None, name).await +} + +#[post("/{org_id}/{stream_name}/functions/{name}")] +pub async fn save_stream_function( + path: web::Path<(String, String, String)>, + js_func: web::Json, +) -> Result { + let (org_id, stream_name, name) = path.into_inner(); + let transform = js_func.into_inner(); + transform::register_transform(org_id, Some(stream_name), name, transform).await +} + +#[get("/{org_id}/{stream_name}/functions")] +async fn list_stream_function(path: web::Path<(String, String)>) -> impl Responder { + let (org_id, stream_name) = path.into_inner(); + transform::list_transform(org_id, Some(stream_name)).await +} + +#[delete("/{org_id}/{stream_name}/functions/{name}")] +async fn delete_stream_function(path: web::Path<(String, String, String)>) -> impl Responder { + let (org_id, stream_name, name) = path.into_inner(); + transform::delete_transform(org_id, Some(stream_name), name).await +} diff --git a/src/handler/http/request/health/mod.rs b/src/handler/http/request/health/mod.rs new file mode 100644 index 0000000000..817e9c7251 --- /dev/null +++ b/src/handler/http/request/health/mod.rs @@ -0,0 +1,51 @@ +use actix_web::{get, HttpResponse}; +use ahash::AHashMap; +use serde::Serialize; +use serde_json::{json, Value}; +use std::io::Error; + +use crate::infra::{cache, cluster, config}; + +#[derive(Clone, Debug, Serialize)] +struct HealthzResponse { + status: String, +} + +#[get("/healthz")] +pub async fn healthz() -> Result { + Ok(HttpResponse::Ok().json(HealthzResponse { + status: "ok".to_string(), + })) +} + +#[get("/cache/status")] +pub async fn cache_status() -> Result { + let mut stats: AHashMap<&str, Value> = AHashMap::new(); + stats.insert("LOCAL_NODE_UUID", json!(cluster::LOCAL_NODE_UUID.clone())); + stats.insert( + "LOCAL_NODE_NAME", + json!(&config::CONFIG.common.instance_name), + ); + stats.insert("LOCAL_NODE_ROLE", json!(&config::CONFIG.common.node_role)); + stats.insert("NODES", json!(cluster::NODES.clone())); + stats.insert( + "STREAM_TRANSFORMS", + json!(config::STREAM_TRANSFORMS.clone()), + ); + stats.insert("QUERY_TRANSFORMS", json!(config::QUERY_TRANSFORMS.clone())); + stats.insert("STREAM_STATS", json!({"stream_num": cache::stats::get_stream_stats_len(), "mem_size": cache::stats::get_stream_stats_in_memory_size()})); + + let (max_size, cur_size) = cache::file_data::stats(); + stats.insert( + "FILE_DATA", + json!({"memory_limit":max_size,"mem_size": cur_size}), + ); + + let (file_list_num, files_num, mem_size) = cache::file_list::get_file_num().unwrap(); + stats.insert( + "FILE_LIST", + json!({"file_list_num":file_list_num, "files_num":files_num, "mem_size":mem_size}), + ); + + Ok(HttpResponse::Ok().json(stats)) +} diff --git a/src/handler/http/request/mod.rs b/src/handler/http/request/mod.rs new file mode 100644 index 0000000000..182cad41ad --- /dev/null +++ b/src/handler/http/request/mod.rs @@ -0,0 +1,11 @@ +pub mod alerts; +pub mod dashboards; +pub mod document; +pub mod functions; +pub mod health; +pub mod organization; +pub mod prom; +pub mod search; +pub mod stream; +pub mod traces; +pub mod users; diff --git a/src/handler/http/request/organization/mod.rs b/src/handler/http/request/organization/mod.rs new file mode 100644 index 0000000000..17dc529957 --- /dev/null +++ b/src/handler/http/request/organization/mod.rs @@ -0,0 +1,85 @@ +use actix_web::{get, web, HttpResponse, Result}; +use serde::Serialize; +use std::io::Error; + +use crate::{handler::http::auth::is_admin_user, infra::config::USERS}; + +#[derive(Serialize)] +struct Organization { + identifier: String, + label: String, +} + +#[derive(Serialize)] +struct User { + first_name: String, + last_name: String, + email: String, +} + +#[derive(Serialize)] +struct OrganizationDetails { + id: i64, + identifier: String, + name: String, + user_email: String, + ingest_threshold: i64, + search_threshold: i64, + org_type: String, + user_obj: User, +} + +#[derive(Serialize)] +struct OrganizationResponse { + data: [OrganizationDetails; 1], +} + +#[get("/organizarions_by_username/{user_name}")] +pub async fn organizarions_by_username( + user_name: web::Path, +) -> Result { + let mut orgs = Vec::new(); + let user_name = user_name.to_string(); + if is_admin_user(&user_name).await { + let obj = Organization { + identifier: "default".to_string(), + label: "Default".to_string(), + }; + orgs.push(obj); + } else { + for user in USERS.iter() { + if user.key().contains(format!("/{}", user_name).as_str()) { + orgs.push(Organization { + identifier: user.key().split('/').collect::>()[0].to_string(), + label: user.key().split('/').collect::>()[0].to_string(), + }); + } + } + } + + Ok(HttpResponse::Ok().json(orgs)) +} + +#[get("/{org_id}/organizations")] +pub async fn organizations() -> Result { + println!("Inside organizations"); + let user_detail = User { + first_name: "admin".to_string(), + last_name: "admin".to_string(), + email: "admin".to_string(), + }; + let obj = OrganizationDetails { + id: 1, + identifier: "default".to_string(), + name: "Default".to_string(), + user_email: "admin".to_string(), + ingest_threshold: 9383939382, + search_threshold: 9383939382, + org_type: "default".to_string(), + user_obj: user_detail, + }; + + let org_response = OrganizationResponse { data: [obj] }; + + Ok(HttpResponse::Ok().json(org_response)) +} diff --git a/src/handler/http/request/prom/mod.rs b/src/handler/http/request/prom/mod.rs new file mode 100644 index 0000000000..ac86233006 --- /dev/null +++ b/src/handler/http/request/prom/mod.rs @@ -0,0 +1,32 @@ +use crate::{meta, service::metrics}; +use actix_web::{http, post, web, HttpRequest, HttpResponse}; +use std::io::Error; + +#[post("/{org_id}/prometheus/write")] +pub async fn prometheus_write( + org_id: web::Path, + thread_id: web::Data, + req: HttpRequest, + body: actix_web::web::Bytes, +) -> Result { + let org_id = org_id.into_inner(); + /* for header in _req.headers() { + println!("{:?}", header) + } */ + let content_type = req.headers().get("Content-Type").unwrap().to_str().unwrap(); + if content_type.eq("application/x-protobuf") { + metrics::prometheus_write_proto(&org_id, thread_id, body).await + } else { + Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some("Bad Request".to_string()), + )), + ) + } + /* else if { + prom::prometheus_write(&org_id, body).await + } else if content_type.eq("text/plain") || content_type.eq("application/openmetrics-text") { + prom::prometheus_write_text(&org_id, body).await + } */ +} diff --git a/src/handler/http/request/search/mod.rs b/src/handler/http/request/search/mod.rs new file mode 100644 index 0000000000..866ccdba68 --- /dev/null +++ b/src/handler/http/request/search/mod.rs @@ -0,0 +1,173 @@ +use actix_web::http::{self, StatusCode}; +use actix_web::{get, post, web, HttpRequest, HttpResponse}; +use ahash::AHashMap as HashMap; +use chrono::Duration; +use std::io::Error; +use std::sync::Mutex; + +use crate::common::http::get_stream_type_from_request; +use crate::infra::config::{CONFIG, LOCKER}; +use crate::meta; +use crate::meta::http::HttpResponse as MetaHttpResponse; +use crate::meta::StreamType; +use crate::service::search as SearchService; + +#[utoipa::path( + context_path = "/api", + responses( + (status = 200, description = "search api", body = Response , example = json!({"code": 200,"status": [{"name": "olympics","successful": 3,"failed": 0}]})) + ) + )] +#[post("/{org_id}/_search")] +pub async fn search( + org_id: web::Path, + in_req: HttpRequest, + body: actix_web::web::Bytes, +) -> Result { + let org_id = org_id.into_inner(); + let query = web::Query::>::from_query(in_req.query_string()).unwrap(); + let stream_type = match get_stream_type_from_request(&query) { + Ok(v) => v.unwrap_or(StreamType::Logs), + Err(e) => { + return Ok(HttpResponse::BadRequest().json(MetaHttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some(e.to_string()), + ))) + } + }; + let req: meta::search::Request = serde_json::from_slice(&body)?; + + // get a local search queue lock + let locker = LOCKER + .entry("search/local_queue".to_string()) + .or_insert(Mutex::new(true)); + let _locker = locker.lock(); + + // do search + match SearchService::search(&org_id, stream_type, &req).await { + Ok(res) => Ok(HttpResponse::Ok().json(res)), + Err(err) => { + log::error!("search error: {:?}", err); + Ok( + HttpResponse::InternalServerError().json(meta::http::HttpResponse::error( + StatusCode::INTERNAL_SERVER_ERROR.into(), + Some(err.to_string()), + )), + ) + } + } +} + +#[utoipa::path( + context_path = "/api", + responses( + (status = 200, description = "search around api", body = Response , example = json!({"code": 200,"status": [{"name": "olympics","successful": 3,"failed": 0}]})) + ) + )] +#[get("/{org_id}/{stream_name}/_around")] +pub async fn around( + path: web::Path<(String, String)>, + in_req: HttpRequest, +) -> Result { + let (org_id, stream_name) = path.into_inner(); + let query = web::Query::>::from_query(in_req.query_string()).unwrap(); + let stream_type = match get_stream_type_from_request(&query) { + Ok(v) => v.unwrap_or(StreamType::Logs), + Err(e) => { + return Ok(HttpResponse::BadRequest().json(MetaHttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some(e.to_string()), + ))) + } + }; + + let around_key = match query.get("key") { + Some(v) => v.parse::().unwrap_or(0), + None => 0, + }; + let around_size = match query.get("size") { + Some(v) => v.parse::().unwrap_or(0), + None => 0, + }; + + // get a local search queue lock + let locker = LOCKER + .entry("search/local_queue".to_string()) + .or_insert(Mutex::new(true)); + let _locker = locker.lock(); + + // search forward + let req = meta::search::Request { + query: meta::search::Query { + sql: format!( + "SELECT * FROM {} ORDER BY {} DESC", + stream_name, CONFIG.common.time_stamp_col + ), + from: 0, + size: around_size / 2, + start_time: around_key - Duration::seconds(300).num_microseconds().unwrap(), + end_time: around_key, + sql_mode: "context".to_string(), + track_total_hits: false, + }, + aggs: ahash::AHashMap::new(), + }; + let resp_forward = match SearchService::search(&org_id, stream_type, &req).await { + Ok(res) => res, + Err(err) => { + log::error!("search error: {:?}", err); + return Ok( + HttpResponse::InternalServerError().json(meta::http::HttpResponse::error( + StatusCode::INTERNAL_SERVER_ERROR.into(), + Some(err.to_string()), + )), + ); + } + }; + + // search backward + let req = meta::search::Request { + query: meta::search::Query { + sql: format!( + "SELECT * FROM {} ORDER BY {} ASC", + stream_name, CONFIG.common.time_stamp_col + ), + from: 0, + size: around_size / 2, + start_time: around_key, + end_time: around_key + Duration::seconds(300).num_microseconds().unwrap(), + sql_mode: "context".to_string(), + track_total_hits: false, + }, + aggs: ahash::AHashMap::new(), + }; + let resp_backward = match SearchService::search(&org_id, stream_type, &req).await { + Ok(res) => res, + Err(err) => { + log::error!("search error: {:?}", err); + return Ok( + HttpResponse::InternalServerError().json(meta::http::HttpResponse::error( + StatusCode::INTERNAL_SERVER_ERROR.into(), + Some(err.to_string()), + )), + ); + } + }; + + // merge + let mut resp = meta::search::Response::default(); + let hits_num = resp_backward.hits.len(); + for i in 0..hits_num { + resp.hits + .push(resp_backward.hits[hits_num - 1 - i].to_owned()); + } + let hits_num = resp_forward.hits.len(); + for i in 0..hits_num { + resp.hits.push(resp_forward.hits[i].to_owned()); + } + resp.total = resp.hits.len(); + resp.took = resp_forward.took + resp_backward.took; + resp.scan_size = resp_forward.scan_size + resp_backward.scan_size; + + Ok(HttpResponse::Ok().json(resp)) +} diff --git a/src/handler/http/request/stream/mod.rs b/src/handler/http/request/stream/mod.rs new file mode 100644 index 0000000000..7a4f655690 --- /dev/null +++ b/src/handler/http/request/stream/mod.rs @@ -0,0 +1,164 @@ +use crate::common::http::get_stream_type_from_request; +use crate::meta::{self, stream::StreamSettings, StreamType}; +use crate::service::stream; + +use actix_web::{ + get, + http::{self, header::ContentType}, + post, web, HttpRequest, HttpResponse, Responder, +}; +use ahash::AHashMap; +use std::io::Error; +use std::io::ErrorKind; + +#[get("/{org_id}/{stream_name}/schema")] +async fn stream_schema( + path: web::Path<(String, String)>, + req: HttpRequest, +) -> Result { + let (org_id, stream_name) = path.into_inner(); + let query = web::Query::>::from_query(req.query_string()).unwrap(); + let stream_type = match get_stream_type_from_request(&query) { + Ok(v) => v, + Err(e) => { + return Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some(e.to_string()), + )), + ) + } + }; + match stream_type { + Some(stream_type_loc) => { + stream::get_stream(org_id.as_str(), stream_name.as_str(), stream_type_loc).await + } + /* Some(StreamType::Logs) => { + stream::get_stream(org_id.as_str(), stream_name.as_str(), StreamType::Logs).await + } + Some(StreamType::Metrics) => { + stream::get_stream(org_id.as_str(), stream_name.as_str(), StreamType::Metrics).await + } + Some(StreamType::Traces) => { + stream::get_stream(org_id.as_str(), stream_name.as_str(), StreamType::Traces).await + } */ + None => stream::get_stream(org_id.as_str(), stream_name.as_str(), StreamType::Logs).await, + } +} + +#[post("/{org_id}/{stream_name}/settings")] +async fn stream_settings( + path: web::Path<(String, String)>, + settings: web::Json, + req: HttpRequest, +) -> Result { + let (org_id, stream_name) = path.into_inner(); + let query = web::Query::>::from_query(req.query_string()).unwrap(); + let stream_type = match get_stream_type_from_request(&query) { + Ok(v) => v, + Err(e) => { + return Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some(e.to_string()), + )), + ) + } + }; + + match stream_type { + Some(steam_type_loc) => { + stream::save_stream_settings( + org_id.as_str(), + stream_name.as_str(), + steam_type_loc, + settings.into_inner(), + ) + .await + } + None => { + stream::save_stream_settings( + org_id.as_str(), + stream_name.as_str(), + StreamType::Logs, + settings.into_inner(), + ) + .await + } + } +} + +#[utoipa::path( + context_path = "/api", + responses( + (status = 200, description = "List streams", body = ListStream) + ) +)] +#[get("/{org_id}/streams")] +async fn list_streams(org_id: web::Path, req: HttpRequest) -> impl Responder { + let query = web::Query::>::from_query(req.query_string()).unwrap(); + let stream_type = match get_stream_type_from_request(&query) { + Ok(v) => v, + Err(e) => { + return Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some(e.to_string()), + )), + ) + } + }; + + let fetch_schema = match query.get("fetchSchema") { + Some(s) => match s.to_lowercase().as_str() { + "true" => true, + "false" => false, + _ => { + return Err(Error::new( + ErrorKind::Other, + " 'fetchSchema' query param with value 'true' or 'false' allowed", + )); + } + }, + None => false, + }; + + match stream_type { + /* Some(StreamType::Logs) => { + stream::list_streams(org_id.as_str(), Some(StreamType::Logs), fetch_schema).await + } + Some(StreamType::Metrics) => { + stream::list_streams(org_id.as_str(), Some(StreamType::Metrics), fetch_schema).await + } + Some(StreamType::Traces) => { + stream::list_streams(org_id.as_str(), Some(StreamType::Traces), fetch_schema).await + } */ + Some(stream_type_loc) => { + stream::list_streams(org_id.as_str(), Some(stream_type_loc), fetch_schema).await + } + None => stream::list_streams(org_id.as_str(), None, fetch_schema).await, + } +} + +#[get("/{org_id}/")] +async fn org_index(_org_id: web::Path, req: HttpRequest) -> impl Responder { + // eg.1: User-Agent:[elastic-transport-ruby/8.0.1 (RUBY_VERSION: 3.1.2; linux x86_64; Faraday v1.10.0)] + let mut version = "0.0.0"; + let user_agent = match req.headers().get("User-Agent") { + Some(user_agent) => user_agent.to_str().unwrap(), + None => "", + }; + if user_agent.contains("elastic") { + let re = regex::Regex::new(r"(\d+\.\d+\.\d+)").unwrap(); + version = match re.captures(user_agent) { + Some(caps) => caps.get(1).unwrap().as_str(), + None => "8.1.0", + }; + } + let es_info = r##"{"name":"Elasticsearch","cluster_name":"N/A","cluster_uuid":"N/A","version":{"number":"0.0.0","build_flavor":"default","build_hash":"0","build_date":"0","build_snapshot":false,"lucene_version":"N/A","minimum_wire_version":"N/A","minimum_index_compatibility":"N/A"},"tagline":"You Know, for Search"}"##; + let es_info = es_info.replace("0.0.0", version); + HttpResponse::Ok() + .content_type(ContentType::json()) + .insert_header(("X-Elastic-Product", "Elasticsearch")) + .body(es_info) +} diff --git a/src/handler/http/request/traces/mod.rs b/src/handler/http/request/traces/mod.rs new file mode 100644 index 0000000000..9da6202cfa --- /dev/null +++ b/src/handler/http/request/traces/mod.rs @@ -0,0 +1,30 @@ +use crate::{meta, service::traces::otlp_http}; +use actix_web::{http, post, web, HttpRequest, HttpResponse}; + +use std::io::Error; + +pub const CONTENT_TYPE_JSON: &str = "application/json"; +pub const CONTENT_TYPE_PROTO: &str = "application/x-protobuf"; + +#[post("/{org_id}/traces")] +pub async fn traces_write( + org_id: web::Path, + thread_id: web::Data, + req: HttpRequest, + body: actix_web::web::Bytes, +) -> Result { + let org_id = org_id.into_inner(); + let content_type = req.headers().get("Content-Type").unwrap().to_str().unwrap(); + if content_type.eq(CONTENT_TYPE_PROTO) { + otlp_http::traces_proto(&org_id, thread_id.into_inner(), body).await + } else if content_type.eq(CONTENT_TYPE_JSON) { + otlp_http::traces_json(&org_id, thread_id.into_inner(), body).await + } else { + Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some("Bad Request".to_string()), + )), + ) + } +} diff --git a/src/handler/http/request/users/mod.rs b/src/handler/http/request/users/mod.rs new file mode 100644 index 0000000000..70793dbc31 --- /dev/null +++ b/src/handler/http/request/users/mod.rs @@ -0,0 +1,68 @@ +use crate::handler::http::auth::validate_credentials; +use crate::infra::config::CONFIG; +use crate::meta::user::Role; +use crate::meta::user::SignInUser; +use crate::{meta::user::User, service::users}; +use actix_web::{delete, get, post, web, HttpResponse}; +use ahash::AHashMap; +use serde_json::Value; +use std::io::Error; + +#[post("/{org_id}/users")] +pub async fn post_user( + org_id: web::Path, + user: web::Json, +) -> Result { + let org_id = org_id.into_inner(); + let user = user.into_inner(); + users::post_user(&org_id, user).await +} + +#[get("/{org_id}/users")] +pub async fn list_users(org_id: web::Path) -> Result { + let org_id = org_id.into_inner(); + users::list_user(&org_id).await +} + +#[delete("/{org_id}/users/{user_name}")] +pub async fn delete_user(path: web::Path<(String, String)>) -> Result { + let (org_id, name) = path.into_inner(); + users::delete_user(&org_id, &name).await +} + +#[post("/{org_id}/authentication")] +pub async fn authentication( + org_id: web::Path, + user: web::Json, +) -> Result { + let org_id = org_id.into_inner(); + let mut ret: AHashMap<&str, Value> = AHashMap::new(); + match validate_credentials( + &user.name, + &user.password, + &format!("{}/authentication", &org_id), + ) + .await + { + Ok(v) => { + if v { + if user.name == CONFIG.auth.username { + ret.insert("role", Value::String(format!("{:?}", &Role::Admin))); + } else if let Some(user) = users::get_user(Some(&org_id), &user.name).await { + // println!("{:?}", format!("{:?}", user.role)); + ret.insert("role", Value::String(format!("{:?}", user.role))); + } + ret.insert("status", Value::Bool(true)); + } else { + ret.insert("status", Value::Bool(false)); + ret.insert("message", Value::String("Invalid credentials".to_string())); + } + } + Err(_e) => { + ret.insert("status", Value::Bool(false)); + ret.insert("message", Value::String("Invalid credentials".to_string())); + } + }; + + Ok(HttpResponse::Ok().json(ret)) +} diff --git a/src/handler/http/router/mod.rs b/src/handler/http/router/mod.rs new file mode 100644 index 0000000000..07d395ae4f --- /dev/null +++ b/src/handler/http/router/mod.rs @@ -0,0 +1,113 @@ +use actix_cors::Cors; +use actix_web::{http::header, web}; +use actix_web_httpauth::middleware::HttpAuthentication; +use std::sync::Arc; +use utoipa::OpenApi; +use utoipa_swagger_ui::{SwaggerUi, Url}; + +use super::auth::validator; +use super::request::alerts::*; +use super::request::dashboards::*; +use super::request::document::data_ingest::*; +use super::request::functions::udf::*; +use super::request::health::{cache_status, healthz}; +use super::request::organization::*; +use super::request::prom::*; +use super::request::search; +use super::request::stream::*; +use super::request::traces::*; +use super::request::users::*; +use crate::infra::config::CONFIG; +use crate::meta::ingestion::{IngestionResponse, StreamStatus}; +use crate::meta::stream; +use crate::meta::StreamType; + +pub mod ui; + +pub fn get_routes(cfg: &mut web::ServiceConfig) { + #[derive(OpenApi)] + #[openapi( + paths(list_streams, bulk_ingest, multi_ingest), + components(schemas( + stream::ListStream, + stream::Stream, + StreamType, + stream::Stats, + stream::StreamProperty, + IngestionResponse, + StreamStatus, + //SearchResponse + )), + tags( + (name = "Ingestion", description = "Todo management endpoints.") + ) + )] + struct ApiDoc; + + let auth = HttpAuthentication::basic(validator); + cfg.service(healthz); + + let cors = Cors::default() + .send_wildcard() + .allowed_methods(vec!["HEAD", "GET", "POST", "PUT", "OPTIONS", "DELETE"]) + .allowed_headers(vec![ + header::AUTHORIZATION, + header::ACCEPT, + header::CONTENT_TYPE, + ]) + .allow_any_origin() + .max_age(3600); + let cors = Arc::new(cors); + + cfg.service( + web::scope("/auth") + .wrap(cors.clone()) + .service(organizarions_by_username) + .service(authentication), + ); + cfg.service( + web::scope("/api") + .wrap(auth) + .wrap(cors) + .service(cache_status) + .service(bulk_ingest) + .service(multi_ingest) + .service(json_ingest) + .service(search::search) + .service(search::around) + .service(stream_schema) + .service(stream_settings) + .service(list_streams) + .service(org_index) + .service(save_function) + .service(list_functions) + .service(delete_function) + .service(save_stream_function) + .service(list_stream_function) + .service(delete_stream_function) + .service(list_users) + .service(delete_user) + .service(post_user) + .service(prometheus_write) + .service(save_dashboard) + .service(get_dashboard) + .service(list_dashboards) + .service(delete_dashboard) + .service(traces_write) + .service(organizations) + .service(save_alert) + .service(get_alert) + .service(list_alerts) + .service(list_stream_alerts) + .service(delete_alert), + ); + + cfg.service(SwaggerUi::new("/swagger-ui/{_:.*}").urls(vec![( + Url::new("api", "/api-doc/openapi1.json"), + ApiDoc::openapi(), + )])); + + if CONFIG.common.ui_enabled { + cfg.service(ui::serve); + } +} diff --git a/src/handler/http/router/ui.rs b/src/handler/http/router/ui.rs new file mode 100644 index 0000000000..508b158006 --- /dev/null +++ b/src/handler/http/router/ui.rs @@ -0,0 +1,38 @@ +use actix_web::{route, web}; +use actix_web_rust_embed_responder::{ + Compress, EmbedResponse, EmbedableFileResponse, IntoResponse, +}; +use rust_embed_for_web::RustEmbed; + +#[derive(RustEmbed)] +#[folder = "web/dist/"] +struct WebAssets; + +pub const UI_PAGES: [&str; 9] = [ + "login", + "about", + "users", + "logs", + "logstream", + "ingestion", + "ingestion/fluentbit", + "ingestion/fluentd", + "ingestion/vector", +]; + +#[route("/{path:.*}", method = "GET", method = "HEAD")] +pub async fn serve(path: web::Path) -> EmbedResponse { + let mut path = if path.is_empty() { + "index.html" + } else { + path.as_str() + }; + + if UI_PAGES.contains(&path) { + path = "index.html"; + } + + WebAssets::get(path) + .into_response() + .use_compression(Compress::Never) +} diff --git a/src/handler/mod.rs b/src/handler/mod.rs new file mode 100644 index 0000000000..8eb7894859 --- /dev/null +++ b/src/handler/mod.rs @@ -0,0 +1,2 @@ +pub mod grpc; +pub mod http; diff --git a/src/infra/cache/file_data.rs b/src/infra/cache/file_data.rs new file mode 100644 index 0000000000..f5a10df565 --- /dev/null +++ b/src/infra/cache/file_data.rs @@ -0,0 +1,124 @@ +use bytes::Bytes; +use lru::LruCache; +use std::cmp::max; +use std::sync::RwLock; + +use crate::infra::config::CONFIG; +use crate::infra::storage; + +lazy_static! { + pub static ref FILES: RwLock = RwLock::new(FileData::new()); +} + +pub struct FileData { + max_size: usize, + cur_size: usize, + data: LruCache, +} + +impl Default for FileData { + fn default() -> Self { + Self::new() + } +} + +impl FileData { + pub fn new() -> FileData { + FileData { + max_size: CONFIG.memory_cache.max_size, + cur_size: 0, + data: LruCache::unbounded(), + } + } + + pub fn get(&mut self, file: &str) -> Result { + let data = self.data.get(file); + if data.is_none() { + return Err(anyhow::anyhow!("file not in cache")); + } + Ok(data.unwrap().to_owned()) + } + + pub fn set(&mut self, file: &str, data: Bytes) -> Result<(), anyhow::Error> { + let data_size = data.len(); + if self.cur_size + data_size >= self.max_size { + log::info!( + "[TRACE] File cache is full {}/{}, can't cache {} bytes", + self.cur_size, + self.max_size, + data_size + ); + // cache is full, need release some space + let need_release_size = max(CONFIG.memory_cache.release_size, data_size * 100); + let mut release_size = 0; + loop { + let item = self.data.pop_lru(); + if item.is_none() { + break; + } + let (_, v) = item.unwrap(); + release_size += v.len(); + if release_size >= need_release_size { + break; + } + } + self.cur_size -= release_size; + } + + self.cur_size += data_size; + self.data.put(file.to_string(), data); + Ok(()) + } + + pub fn size(&self) -> (usize, usize) { + (self.max_size, self.cur_size) + } +} + +#[inline] +pub fn get(file: &str) -> Result { + if !CONFIG.memory_cache.enabled { + return Err(anyhow::anyhow!("memory cache is disabled")); + } + let mut files = FILES.write().unwrap(); + files.get(file) +} + +#[inline] +pub fn exist(file: &str) -> Result { + let mut files = FILES.write().unwrap(); + match files.get(file) { + Ok(_) => Ok(true), + Err(_) => Ok(false), + } +} + +#[inline] +pub fn set(file: &str, data: Bytes) -> Result<(), anyhow::Error> { + if !CONFIG.memory_cache.enabled { + return Ok(()); + } + let mut files = FILES.write().unwrap(); + files.set(file, data) +} + +#[inline] +pub fn stats() -> (usize, usize) { + let files = FILES.read().unwrap(); + files.size() +} + +#[inline] +#[tracing::instrument(name = "infra:cache:file_data:download")] +pub async fn download(file: &str) -> Result { + let store = &storage::DEFAULT; + let data = store.get(file).await?; + if let Err(e) = set(file, data.clone()) { + return Err(anyhow::anyhow!( + "set file {} to memory cache failed: {}", + file, + e + )); + }; + Ok(data) +} diff --git a/src/infra/cache/file_list.rs b/src/infra/cache/file_list.rs new file mode 100644 index 0000000000..d590735136 --- /dev/null +++ b/src/infra/cache/file_list.rs @@ -0,0 +1,524 @@ +use chrono::{Datelike, TimeZone, Timelike, Utc}; +use dashmap::DashMap; + +use crate::meta::{common::FileMeta, StreamType}; + +lazy_static! { + pub static ref FILES: DashMap> = DashMap::new(); +} + +const FILE_LIST_MEM_SIZE: usize = std::mem::size_of::>(); +const FILE_META_MEM_SIZE: usize = std::mem::size_of::>(); + +#[derive(Debug)] +pub struct FileList { + sub: Option>>, + files: Option>, + size: usize, +} + +pub fn set_file_to_cache( + key: &str, + val: Option, + delete: bool, +) -> Result<(), anyhow::Error> { + // eg: files/default/logs/olympics/2022/10/03/10/6982652937134804993_1.parquet + let columns = key.split('/').collect::>(); + if columns.len() < 8 { + return Err(anyhow::anyhow!( + "[TRACE] [set_file_to_cache] Invalid file path: {}", + key + )); + } + let _ = columns[0].to_string(); + let org_id = columns[1].to_string(); + let data_type = columns[2].to_string(); + let stream_name = columns[3].to_string(); + let year = columns[4].to_string(); + let month = columns[5].to_string(); + let day = columns[6].to_string(); + let hour = columns[7].to_string(); + let file_name = columns[8..].join("/"); + + let mut org_cache = FILES.entry(org_id).or_insert(Box::new(FileList { + sub: Some(DashMap::new()), + files: None, + size: 0, + })); + let cache = org_cache.sub.as_mut().unwrap(); + let mut type_cache = cache.entry(data_type).or_insert(Box::new(FileList { + sub: Some(DashMap::new()), + files: None, + size: 0, + })); + let cache = type_cache.sub.as_mut().unwrap(); + let mut stream_cache = cache.entry(stream_name).or_insert(Box::new(FileList { + sub: Some(DashMap::new()), + files: None, + size: 0, + })); + let cache = stream_cache.sub.as_mut().unwrap(); + let mut year_cache = cache.entry(year).or_insert(Box::new(FileList { + sub: Some(DashMap::new()), + files: None, + size: 0, + })); + let cache = year_cache.sub.as_mut().unwrap(); + let mut month_cache = cache.entry(month).or_insert(Box::new(FileList { + sub: Some(DashMap::new()), + files: None, + size: 0, + })); + let cache = month_cache.sub.as_mut().unwrap(); + let mut day_cache = cache.entry(day).or_insert(Box::new(FileList { + sub: Some(DashMap::new()), + files: None, + size: 0, + })); + let cache = day_cache.sub.as_mut().unwrap(); + let mut hour_cache = cache.entry(hour).or_insert(Box::new(FileList { + sub: Some(DashMap::new()), + files: Some(DashMap::with_capacity(8)), + size: 0, + })); + let cache = hour_cache.files.as_mut().unwrap(); + if delete { + cache.remove(&file_name); + hour_cache.size -= key.len() + FILE_META_MEM_SIZE; + } else { + cache.insert(file_name, val.unwrap()); + hour_cache.size += key.len() + FILE_META_MEM_SIZE; + } + + Ok(()) +} + +pub fn get_file_from_cache(key: &str) -> Result { + // eg: files/default/logs/olympics/2022/10/03/10/6982652937134804993_1.parquet + let columns = key.split('/').collect::>(); + let _ = columns[0].to_string(); + let org_id = columns[1].to_string(); + let data_type = columns[2].to_string(); + let stream_name = columns[3].to_string(); + let year = columns[4].to_string(); + if year.len() != 4 { + return Err(anyhow::anyhow!( + "file_list: year format error, value: {}", + year + )); + } + let month = columns[5].to_string(); + let day = columns[6].to_string(); + let hour = columns[7].to_string(); + let file_name = columns[8..].join("/"); + + let org_cache = match FILES.get(&org_id) { + Some(v) => v, + None => return Err(anyhow::anyhow!("file_list: org_id not found, key: {}", key)), + }; + let cache = org_cache.sub.as_ref().unwrap(); + let type_cache = match cache.get(&data_type) { + Some(v) => v, + None => { + return Err(anyhow::anyhow!( + "file_list: data_type not found, key: {}", + key + )) + } + }; + let cache = type_cache.sub.as_ref().unwrap(); + let stream_cache = match cache.get(&stream_name) { + Some(v) => v, + None => { + return Err(anyhow::anyhow!( + "file_list: stream_name not found, key: {}", + key + )) + } + }; + let cache = stream_cache.sub.as_ref().unwrap(); + let year_cache = match cache.get(&year) { + Some(v) => v, + None => return Err(anyhow::anyhow!("file_list: year not found, key: {}", key)), + }; + let cache = year_cache.sub.as_ref().unwrap(); + let month_cache = match cache.get(&month) { + Some(v) => v, + None => return Err(anyhow::anyhow!("file_list: month not found, key: {}", key)), + }; + let cache = month_cache.sub.as_ref().unwrap(); + let day_cache = match cache.get(&day) { + Some(v) => v, + None => return Err(anyhow::anyhow!("file_list: day not found, key: {}", key)), + }; + let cache = day_cache.sub.as_ref().unwrap(); + let hour_cache = match cache.get(&hour) { + Some(v) => v, + None => return Err(anyhow::anyhow!("file_list: hour not found, key: {}", key)), + }; + let cache = hour_cache.files.as_ref().unwrap(); + let resp = match cache.get(&file_name) { + Some(v) => v, + None => { + return Err(anyhow::anyhow!( + "file_list: file_name not found, key: {}", + key + )) + } + }; + + // println!("get_file_meta_from_cache: {}", key); + + Ok(*resp) +} + +async fn scan_prefix( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + prefix: &str, +) -> Result, anyhow::Error> { + let prefix = if prefix.starts_with("files/") { + prefix.trim_start_matches("files/").trim_end_matches('/') + } else { + prefix.trim_end_matches('/') + }; + let stream_type = stream_type.to_string(); + let columns = prefix.split('/').collect::>(); + let column_num = columns.len(); + let mut year = ""; + let mut month = ""; + let mut day = ""; + let mut hour = ""; + if column_num >= 1 { + year = columns[0]; + } + if column_num >= 2 { + month = columns[1]; + } + if column_num >= 3 { + day = columns[2]; + } + if column_num >= 4 { + hour = columns[3]; + } + + let mut resp = Vec::new(); + let org_cache = match FILES.get(org_id) { + Some(v) => v, + None => return Ok(resp), + }; + let cache = org_cache.sub.as_ref().unwrap(); + let type_cache = match cache.get(&stream_type) { + Some(v) => v, + None => return Ok(resp), + }; + let cache = type_cache.sub.as_ref().unwrap(); + let stream_cache = match cache.get(stream_name) { + Some(v) => v, + None => return Ok(resp), + }; + + if year.is_empty() { + for cache in stream_cache.sub.as_ref().unwrap().iter() { + let year = cache.key(); + for cache in cache.sub.as_ref().unwrap().iter() { + let month = cache.key(); + for cache in cache.sub.as_ref().unwrap().iter() { + let day = cache.key(); + for cache in cache.sub.as_ref().unwrap().iter() { + let hour = cache.key(); + for item in cache.files.as_ref().unwrap().iter() { + resp.push(format!( + "files/{}/{}/{}/{}/{}/{}/{}/{}", + org_id, + stream_type, + stream_name, + year, + month, + day, + hour, + item.key() + )); + } + } + } + } + } + return Ok(resp); + } + + let cache = stream_cache.sub.as_ref().unwrap(); + let year_cache = match cache.get(year) { + Some(v) => v, + None => return Ok(resp), + }; + if month.is_empty() { + for cache in year_cache.sub.as_ref().unwrap().iter() { + let month = cache.key(); + for cache in cache.sub.as_ref().unwrap().iter() { + let day = cache.key(); + for cache in cache.sub.as_ref().unwrap().iter() { + let hour = cache.key(); + for item in cache.files.as_ref().unwrap().iter() { + resp.push(format!( + "files/{}/{}/{}/{}/{}/{}/{}/{}", + org_id, + stream_type, + stream_name, + year, + month, + day, + hour, + item.key() + )); + } + } + } + } + return Ok(resp); + } + + let cache = year_cache.sub.as_ref().unwrap(); + let month_cache = match cache.get(month) { + Some(v) => v, + None => return Ok(resp), + }; + if day.is_empty() { + for cache in month_cache.sub.as_ref().unwrap().iter() { + let day = cache.key(); + for cache in cache.sub.as_ref().unwrap().iter() { + let hour = cache.key(); + for item in cache.files.as_ref().unwrap().iter() { + resp.push(format!( + "files/{}/{}/{}/{}/{}/{}/{}/{}", + org_id, + stream_type, + stream_name, + year, + month, + day, + hour, + item.key() + )); + } + } + } + return Ok(resp); + } + + let cache = month_cache.sub.as_ref().unwrap(); + let day_cache = match cache.get(day) { + Some(v) => v, + None => return Ok(resp), + }; + if hour.is_empty() { + for cache in day_cache.sub.as_ref().unwrap().iter() { + let hour = cache.key(); + for item in cache.files.as_ref().unwrap().iter() { + resp.push(format!( + "files/{}/{}/{}/{}/{}/{}/{}/{}", + org_id, + stream_type, + stream_name, + year, + month, + day, + hour, + item.key() + )); + } + } + return Ok(resp); + } + + let cache = day_cache.sub.as_ref().unwrap(); + let hour_cache = match cache.get(hour) { + Some(v) => v, + None => return Ok(resp), + }; + for item in hour_cache.files.as_ref().unwrap().iter() { + resp.push(format!( + "files/{}/{}/{}/{}/{}/{}/{}/{}", + org_id, + stream_type, + stream_name, + year, + month, + day, + hour, + item.key() + )); + } + Ok(resp) +} + +#[tracing::instrument(name = "cache:file_list:get_file_list")] +pub async fn get_file_list( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + time_min: i64, + time_max: i64, +) -> Result, anyhow::Error> { + let mut files = Vec::new(); + let mut keys = Vec::new(); + let mut key = "".to_string(); + if time_min > 0 && time_max > 0 { + let time_min = Utc.timestamp_nanos(time_min * 1000); + let time_max = Utc.timestamp_nanos(time_max * 1000); + if time_min.year() == time_max.year() { + key.push_str(&time_min.format("%Y").to_string()); + key.push('/'); + if time_min.month() == time_max.month() { + key.push_str(&time_min.format("%m").to_string()); + key.push('/'); + if time_min.day() == time_max.day() { + key.push_str(&time_min.format("%d").to_string()); + key.push('/'); + if time_min.hour() == time_max.hour() { + key.push_str(&time_min.format("%H").to_string()); + key.push('/'); + keys.push(key); + } else { + for i in time_min.hour()..(time_max.hour() + 1) { + let mut k = key.clone(); + if i < 10 { + k.push_str(&format!("0{}", i)) + } else { + k.push_str(&format!("{}", i)) + } + k.push('/'); + keys.push(k); + } + } + } else { + for i in time_min.day()..(time_max.day() + 1) { + let mut k = key.clone(); + if i < 10 { + k.push_str(&format!("0{}", i)) + } else { + k.push_str(&format!("{}", i)) + } + k.push('/'); + keys.push(k); + } + } + } else { + for i in time_min.month()..(time_max.month() + 1) { + let mut k = key.clone(); + if i < 10 { + k.push_str(&format!("0{}", i)) + } else { + k.push_str(&format!("{}", i)) + } + k.push('/'); + keys.push(k); + } + } + } else { + for i in time_min.year()..(time_max.year() + 1) { + let mut k = key.clone(); + if i < 10 { + k.push_str(&format!("0{}", i)) + } else { + k.push_str(&format!("{}", i)) + } + k.push('/'); + keys.push(k); + } + } + } else { + keys.push(key); + } + + for key in keys { + let resp = scan_prefix(org_id, stream_name, stream_type, &key) + .await + .unwrap(); + files.extend(resp); + } + + Ok(files) +} + +/// Get file list num and total keys length +pub fn get_file_num() -> Result<(usize, usize, usize), anyhow::Error> { + let mut files_num = 0; + let mut mem_size = 0; + let mut file_list_num = 0; + for cache in FILES.iter() { + let org_cache = cache.sub.as_ref().unwrap(); + for cache in org_cache.iter() { + let type_cache = cache.sub.as_ref().unwrap(); + for cache in type_cache.iter() { + let stream_cache = cache.sub.as_ref().unwrap(); + for cache in stream_cache.iter() { + let year_cache = cache.sub.as_ref().unwrap(); + for cache in year_cache.iter() { + let month_cache = cache.sub.as_ref().unwrap(); + for cache in month_cache.iter() { + let day_cache = cache.sub.as_ref().unwrap(); + for cache in day_cache.iter() { + files_num += cache.files.as_ref().unwrap().len(); + mem_size += cache.size; + file_list_num += 1; + } + } + } + } + } + } + } + mem_size += file_list_num * FILE_LIST_MEM_SIZE; + Ok((file_list_num, files_num, mem_size)) +} + +pub fn get_all_organization() -> Result, anyhow::Error> { + let mut orgs = Vec::new(); + for cache in FILES.iter() { + orgs.push(cache.key().to_string()); + } + Ok(orgs) +} + +pub fn get_all_stream(org_id: &str, stream_type: StreamType) -> Result, anyhow::Error> { + let mut streams = Vec::new(); + let org_cache = FILES.get(org_id).unwrap(); + let org_cache = org_cache.sub.as_ref().unwrap(); + let type_cache = match org_cache.get(&stream_type.to_string()) { + Some(cache) => cache, + None => return Ok(streams), + }; + let type_cache = type_cache.sub.as_ref().unwrap(); + for cache in type_cache.iter() { + streams.push(cache.key().to_string()); + } + Ok(streams) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn test_get_file_from_cache() { + let meta = FileMeta { + min_ts: 100, + max_ts: 200, + records: 10000, + original_size: 1024, + compressed_size: 1, + }; + let _ret = set_file_to_cache( + "files/default/logs/olympics/2022/10/03/10/6982652937134804993_1.parquet", + Some(meta), + false, + ) + .unwrap(); + + let res = get_file_from_cache( + "files/default/logs/olympics/2022/10/03/10/6982652937134804993_1.parquet", + ); + assert_eq!(res.unwrap().records, meta.records); + } +} diff --git a/src/infra/cache/mod.rs b/src/infra/cache/mod.rs new file mode 100644 index 0000000000..2745569696 --- /dev/null +++ b/src/infra/cache/mod.rs @@ -0,0 +1,4 @@ +pub mod file_data; +pub mod file_list; +pub mod stats; +pub mod tmpfs; diff --git a/src/infra/cache/stats.rs b/src/infra/cache/stats.rs new file mode 100644 index 0000000000..cba25de74d --- /dev/null +++ b/src/infra/cache/stats.rs @@ -0,0 +1,90 @@ +use dashmap::DashMap; + +use crate::meta::common::FileMeta; +use crate::meta::stream::Stats; + +lazy_static! { + static ref STATS: DashMap = DashMap::with_capacity(2); +} + +const STREAM_STATS_MEM_SIZE: usize = std::mem::size_of::(); + +pub fn get_stats() -> DashMap { + STATS.clone() +} + +pub fn get_stream_stats(org_id: &str, stream_name: &str, stream_type: &str) -> Option { + let key = format!("{}/{}/{}", org_id, stream_type, stream_name); + STATS.get(&key).map(|v| *v.value()) +} + +pub fn set_stream_stats(org_id: &str, stream_name: &str, stream_type: &str, val: Stats) { + let key = format!("{}/{}/{}", org_id, stream_type, stream_name); + STATS.insert(key, val); +} + +pub fn incr_stream_stats(key: &str, val: FileMeta) -> Result<(), anyhow::Error> { + // eg: files/default/olympics/2022/10/03/10/6982652937134804993_1.parquet + let columns = key.split('/').collect::>(); + if columns.len() < 8 { + return Err(anyhow::anyhow!( + "[TRACE] [incr_stream_stats] Invalid file path: {}", + key + )); + } + let _ = columns[0].to_string(); + let org_id = columns[1].to_string(); + let stream_type = columns[2].to_string(); + let stream_name = columns[3].to_string(); + let key = format!("{}/{}/{}", org_id, stream_type, stream_name); + let mut stats = STATS.entry(key).or_default(); + if val.records == 0 { + return Ok(()); + } + if stats.doc_time_min > val.min_ts || stats.doc_time_min == 0 { + stats.doc_time_min = val.min_ts; + } + if stats.doc_time_max < val.max_ts { + stats.doc_time_max = val.max_ts; + } + stats.doc_num += val.records; + stats.file_num += 1; + stats.storage_size += val.original_size as f64; + stats.compressed_size += val.compressed_size as f64; + + Ok(()) +} + +pub fn decr_stream_stats(key: &str, val: FileMeta) -> Result<(), anyhow::Error> { + // eg: files/default/olympics/2022/10/03/10/6982652937134804993_1.parquet + let columns = key.split('/').collect::>(); + if columns.len() < 8 { + return Err(anyhow::anyhow!( + "[TRACE] [decr_stream_stats] Invalid file path: {}", + key + )); + } + let _ = columns[0].to_string(); + let org_id = columns[1].to_string(); + let stream_type = columns[2].to_string(); + let stream_name = columns[3].to_string(); + let key = format!("{}/{}/{}", org_id, stream_type, stream_name); + let mut stats = STATS.entry(key).or_default(); + stats.doc_num -= val.records; + stats.file_num -= 1; + stats.storage_size -= val.original_size as f64; + stats.compressed_size -= val.compressed_size as f64; + + Ok(()) +} + +pub fn get_stream_stats_len() -> usize { + STATS.len() +} + +pub fn get_stream_stats_in_memory_size() -> usize { + STATS + .iter() + .map(|v| v.key().len() + STREAM_STATS_MEM_SIZE) + .sum() +} diff --git a/src/infra/cache/tmpfs.rs b/src/infra/cache/tmpfs.rs new file mode 100644 index 0000000000..ed2f885899 --- /dev/null +++ b/src/infra/cache/tmpfs.rs @@ -0,0 +1,76 @@ +use parking_lot::RwLock; +use rsfs::mem; +use rsfs::*; +use std::io::Error; +use std::io::Read; +use std::path::Path; + +lazy_static! { + pub static ref FS: RwLock = RwLock::new(mem::FS::new()); +} + +pub fn open_file>(path: P) -> Result { + FS.write().open_file(path) +} + +pub fn create_file>(path: P) -> Result { + FS.write().create_file(path) +} + +pub fn read_file>(path: P) -> Result, Error> { + let mut file = open_file(path)?; + let mut buf = vec![]; + file.read_to_end(&mut buf)?; + Ok(buf) +} + +pub fn create_dir>(path: P) -> Result<(), Error> { + FS.write().create_dir(path) +} + +pub fn create_dir_all>(path: P) -> Result<(), Error> { + FS.write().create_dir_all(path) +} + +pub fn read_dir>(path: P) -> Result { + FS.read().read_dir(path) +} + +pub fn remove_dir>(path: P) -> Result<(), Error> { + FS.write().remove_dir(path) +} + +pub fn remove_dir_all>(path: P) -> Result<(), Error> { + FS.write().remove_dir_all(path) +} + +pub fn remove_file>(path: P) -> Result<(), Error> { + FS.write().remove_file(path) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Read; + use std::io::Write; + + #[test] + fn create_read_file() { + let path = "/test.txt"; + let mut file = create_file(path).unwrap(); + file.write_all(b"hello world").unwrap(); + let mut file = open_file(path).unwrap(); + let mut buf = vec![]; + file.read_to_end(&mut buf).unwrap(); + assert_eq!(buf, b"hello world"); + remove_file(path).unwrap(); + } + + #[test] + fn create_read_directory() { + let path = "/test_dir/abc/"; + assert_eq!(true, create_dir_all(path).is_ok()); + assert_eq!(false, remove_dir("/test_dir/").is_ok()); + assert_eq!(true, remove_dir_all("/test_dir/").is_ok()); + } +} diff --git a/src/infra/cluster.rs b/src/infra/cluster.rs new file mode 100644 index 0000000000..071c82b746 --- /dev/null +++ b/src/infra/cluster.rs @@ -0,0 +1,525 @@ +use dashmap::DashMap; +use etcd_client::PutOptions; +use serde::{Deserialize, Serialize}; +use std::str::FromStr; +use std::sync::Arc; +use uuid::Uuid; + +use super::config::CONFIG; +use super::db::ETCD_CLIENT; +use super::errors::{Error, Result}; +use crate::common::json; +use crate::infra::db::{etcd, Event}; +use crate::service::db; + +pub static mut LOCAL_NODE_ID: i32 = 0; +pub static mut LOCAL_NODE_KEY_LEASE_ID: i64 = 0; +pub static LOCAL_NODE_KEY_TTL: i64 = 10; // node ttl, seconds +pub static mut LOCAL_NODE_STATUS: NodeStatus = NodeStatus::Prepare; + +lazy_static! { + pub static ref LOCAL_NODE_UUID: String = load_local_node_uuid(); + pub static ref LOCAL_NODE_ROLE: Vec = load_local_node_role(); + pub static ref NODES: DashMap = DashMap::new(); +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Node { + pub id: i32, + pub uuid: String, + pub name: String, + pub http_addr: String, + pub grpc_addr: String, + pub role: Vec, + pub cpu_num: u64, + pub status: NodeStatus, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub enum NodeStatus { + Prepare, + Online, + Offline, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +pub enum Role { + All, + Ingester, + Querier, + Compactor, + Router, + AlertManager, +} + +impl FromStr for Role { + type Err = String; + fn from_str(s: &str) -> std::result::Result { + let s = s.to_lowercase(); + match s.as_str() { + "all" => Ok(Role::All), + "ingester" => Ok(Role::Ingester), + "querier" => Ok(Role::Querier), + "compactor" => Ok(Role::Compactor), + "router" => Ok(Role::Router), + "alertmanager" => Ok(Role::AlertManager), + _ => Err(format!("Invalid cluster role: {}", s)), + } + } +} + +/// Register and keepalive the node to cluster +pub async fn register_and_keepalive() -> Result<()> { + if CONFIG.common.local_mode { + let nodes = load_local_node_role(); + if !is_single_node(nodes) { + panic!("For local mode only single node deployment is allowed !"); + } + return Ok(()); + } + if let Err(e) = register().await { + log::error!("[TRACE] Register to cluster failed: {}", e); + return Err(e); + } + + // keep alive + tokio::task::spawn(async move { + loop { + if is_offline() { + break; + } + let lease_id = unsafe { LOCAL_NODE_KEY_LEASE_ID }; + let ret = etcd::keepalive_lease_id(lease_id, LOCAL_NODE_KEY_TTL, is_offline).await; + if ret.is_ok() { + break; + } + let e = ret.unwrap_err(); + let estr = e.to_string(); + if is_offline() + || estr + != Error::from(etcd_client::Error::LeaseKeepAliveError( + "lease expired or revoked".to_string(), + )) + .to_string() + { + break; + } + log::error!("keepalive lease id expired or revoked, set node online again."); + // get new lease id + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let resp = match client.lease_grant(LOCAL_NODE_KEY_TTL, None).await { + Ok(resp) => resp, + Err(e) => { + log::error!("lease grant failed: {}", e); + continue; + } + }; + let id = resp.id(); + // update local node key lease id + unsafe { + LOCAL_NODE_KEY_LEASE_ID = id; + } + if let Err(e) = set_online().await { + log::error!("set node online failed: {}", e); + continue; + } + } + }); + + Ok(()) +} + +/// Register to cluster +pub async fn register() -> Result<()> { + // 1. create a cluster lock for node register + let mut locker = etcd::Locker::new("nodes/register"); + locker.lock(0).await?; + + // 2. get node list + let node_list = list_nodes().await?; + + // 3. calculate node_id + let mut node_id = 1; + let mut node_ids = Vec::new(); + for node in node_list { + node_ids.push(node.id); + NODES.insert(node.uuid.clone(), node); + } + node_ids.sort(); + for id in &node_ids { + if *id == node_id { + node_id += 1; + } else { + break; + } + } + // update local id + unsafe { + LOCAL_NODE_ID = node_id; + } + + // 4. join the cluster + let key = format!("{}nodes/{}", &CONFIG.etcd.prefix, *LOCAL_NODE_UUID); + let val = Node { + id: node_id, + uuid: LOCAL_NODE_UUID.clone(), + name: CONFIG.common.instance_name.clone(), + http_addr: format!("http://{}:{}", get_node_ip(), CONFIG.http.port), + grpc_addr: format!("http://{}:{}", get_node_ip(), CONFIG.grpc.port), + role: LOCAL_NODE_ROLE.clone(), + cpu_num: sys_info::cpu_num().unwrap() as u64, + status: NodeStatus::Prepare, + }; + // cache local node + NODES.insert(LOCAL_NODE_UUID.clone(), val.clone()); + let val = json::to_string(&val).unwrap(); + // register node to cluster + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let resp = client.lease_grant(LOCAL_NODE_KEY_TTL, None).await?; + let id = resp.id(); + // update local node key lease id + unsafe { + LOCAL_NODE_KEY_LEASE_ID = id; + } + let opt = PutOptions::new().with_lease(id); + let _resp = client.put(key, val, Some(opt)).await?; + + // 5. watch node list + tokio::task::spawn(async move { watch_node_list().await }); + + // 7. register ok, release lock + locker.unlock().await?; + + log::info!("[TRACE] Register to cluster ok"); + Ok(()) +} + +/// set online to cluster +pub async fn set_online() -> Result<()> { + if CONFIG.common.local_mode { + return Ok(()); + } + + // set node status to online + let val = match NODES.get(LOCAL_NODE_UUID.as_str()) { + Some(node) => { + let mut val = node.value().clone(); + val.status = NodeStatus::Online; + val + } + None => Node { + id: unsafe { LOCAL_NODE_ID }, + uuid: LOCAL_NODE_UUID.clone(), + name: CONFIG.common.instance_name.clone(), + http_addr: format!("http://{}:{}", get_node_ip(), CONFIG.http.port), + grpc_addr: format!("http://{}:{}", get_node_ip(), CONFIG.grpc.port), + role: LOCAL_NODE_ROLE.clone(), + cpu_num: sys_info::cpu_num().unwrap() as u64, + status: NodeStatus::Online, + }, + }; + + unsafe { + LOCAL_NODE_STATUS = NodeStatus::Online; + } + + // cache local node + NODES.insert(LOCAL_NODE_UUID.clone(), val.clone()); + let val = json::to_string(&val).unwrap(); + + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let key = format!("{}nodes/{}", &CONFIG.etcd.prefix, *LOCAL_NODE_UUID); + let opt = PutOptions::new().with_lease(unsafe { LOCAL_NODE_KEY_LEASE_ID }); + let _resp = client.put(key, val, Some(opt)).await?; + + Ok(()) +} + +/// Leave cluster +pub async fn leave() -> Result<()> { + if CONFIG.common.local_mode { + return Ok(()); + } + + unsafe { + LOCAL_NODE_STATUS = NodeStatus::Offline; + } + + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let key = format!("{}nodes/{}", &CONFIG.etcd.prefix, *LOCAL_NODE_UUID); + let _resp = client.delete(key, None).await?; + + Ok(()) +} + +#[inline(always)] +pub fn get_cached_online_nodes() -> Option> { + if NODES.len() == 0 { + return None; + } + let mut node_list = Vec::new(); + for node in NODES.iter() { + if node.status.eq(&NodeStatus::Online) { + node_list.push(node.value().clone()); + } + } + Some(node_list) +} + +#[inline(always)] +pub fn get_cached_online_query_nodes() -> Option> { + if NODES.len() == 0 { + return None; + } + let mut node_list = Vec::new(); + for node in NODES.iter() { + if node.status.eq(&NodeStatus::Online) + && (is_querier(&node.value().role) || is_ingester(&node.value().role)) + { + node_list.push(node.value().clone()); + } + } + Some(node_list) +} + +#[inline] +pub fn get_cached_online_ingester_nodes() -> Option> { + if NODES.len() == 0 { + return None; + } + let mut node_list = Vec::new(); + for node in NODES.iter() { + if node.status.eq(&NodeStatus::Online) && is_ingester(&node.value().role) { + node_list.push(node.value().clone()); + } + } + Some(node_list) +} + +#[inline] +pub fn get_cached_online_querier_nodes() -> Option> { + if NODES.len() == 0 { + return None; + } + let mut node_list = Vec::new(); + for node in NODES.iter() { + if node.status.eq(&NodeStatus::Online) && is_querier(&node.value().role) { + node_list.push(node.value().clone()); + } + } + Some(node_list) +} + +/// List nodes from cluster or local cache +async fn list_nodes() -> Result> { + let mut nodes = Vec::new(); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let key = format!("{}nodes/", &CONFIG.etcd.prefix); + let opt = etcd_client::GetOptions::new().with_prefix(); + let ret = client.get(key.clone(), Some(opt)).await.map_err(|e| { + log::error!("Error getting node list from etcd {}: {}", key.clone(), e); + e + })?; + + for item in ret.kvs() { + // let item_key = item.key_str().unwrap().to_string(); + // let short_key = item_key.strip_prefix(&format!("{}nodes/", &CONFIG.etcd.prefix)).unwrap(); + // println!("key: {:?}", item_key); + // println!("key: {:?}", short_key); + // println!("val: {:?}", item.value_str()); + let node: Node = json::from_slice(item.value())?; + nodes.push(node.to_owned()); + } + + Ok(nodes) +} + +async fn watch_node_list() -> Result<()> { + let db = &super::db::DEFAULT; + let key = "/nodes/"; + let mut events = db.watch(key).await?; + let events = Arc::get_mut(&mut events).unwrap(); + log::info!("[TRACE] Start watching node_list"); + loop { + let ev = match events.recv().await { + Some(ev) => ev, + None => { + log::error!("watch_node_list: event channel closed"); + break; + } + }; + match ev { + Event::Put(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let item_value: Node = json::from_slice(&ev.value.unwrap()).unwrap(); + log::info!("[TRACE] cluster->node: join {:?}", item_value.clone()); + NODES.insert(item_key.to_string(), item_value.clone()); + // need broadcast local file list + if item_value.status.eq(&NodeStatus::Online) + && !LOCAL_NODE_UUID.eq(item_key) + && is_ingester(&LOCAL_NODE_ROLE) + { + db::file_list::local::broadcast_cache().await.unwrap(); + } + } + Event::Delete(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let item_value = NODES.get(item_key).unwrap().clone(); + log::info!("[TRACE] cluster->node: leave {:?}", item_value.clone()); + NODES.remove(item_key); + } + } + } + + Ok(()) +} + +#[inline(always)] +fn load_local_node_uuid() -> String { + Uuid::new_v4().to_string() +} + +#[inline(always)] +pub fn load_local_node_role() -> Vec { + CONFIG + .common + .node_role + .clone() + .split(',') + .map(|s| s.parse().unwrap()) + .collect::>() +} + +#[inline(always)] +pub fn is_ingester(role: &[Role]) -> bool { + if role.contains(&Role::All) { + return true; + } + if role.contains(&Role::Ingester) { + return true; + } + false +} + +#[inline(always)] +pub fn is_querier(role: &[Role]) -> bool { + if role.contains(&Role::All) { + return true; + } + if role.contains(&Role::Querier) { + return true; + } + false +} + +#[inline(always)] +pub fn is_compactor(role: &[Role]) -> bool { + if role.contains(&Role::All) { + return true; + } + if role.contains(&Role::Compactor) { + return true; + } + false +} + +#[inline(always)] +pub fn is_router(role: &[Role]) -> bool { + if role.contains(&Role::Router) { + return true; + } + false +} + +#[inline(always)] +pub fn is_alert_manager(role: &[Role]) -> bool { + if role.contains(&Role::All) { + return true; + } + if role.contains(&Role::AlertManager) { + return true; + } + false +} + +#[inline(always)] +fn is_single_node(role: Vec) -> bool { + if role.contains(&Role::All) { + return true; + } + false +} + +#[inline(always)] +pub fn is_offline() -> bool { + unsafe { + if LOCAL_NODE_STATUS == NodeStatus::Offline { + return true; + } + } + false +} + +#[inline(always)] +pub fn ge_node_by_uuid(uuid: &str) -> Option { + NODES.get(uuid).map(|node| node.clone()) +} + +#[inline(always)] +pub fn get_node_ip() -> String { + // Print the ip address of all adapters: + let mut node_ip: String = "".to_string(); + for adapter in get_if_addrs::get_if_addrs().unwrap() { + // println!("Ip addresses: {:#?}", adapter.ip()); + if adapter.is_loopback() { + continue; + } + node_ip = adapter.ip().to_string(); + break; + } + node_ip +} + +#[cfg(test)] +mod test_utils { + use super::*; + + #[test] + fn test_is_querier() { + let val = is_querier(&[Role::Querier]); + assert_eq!(val, true); + let val = is_querier(&[Role::All]); + assert_eq!(val, true); + let val = is_querier(&[Role::Ingester]); + assert_eq!(val, false); + } + + #[test] + fn test_is_ingester() { + let val = is_ingester(&[Role::Ingester]); + assert_eq!(val, true); + let val = is_ingester(&[Role::All]); + assert_eq!(val, true); + let val = is_ingester(&[Role::Querier]); + assert_eq!(val, false); + } + + #[test] + fn test_load_local_node_uuid() { + let id = load_local_node_uuid(); + assert_ne!(id, ""); + } + + #[actix_web::test] + #[ignore] + async fn test_list_nodes() { + let res = list_nodes().await; + assert_eq!(res.unwrap().len(), 0); + } + + #[test] + fn test_get_cached_online_query_nodes() { + let res = get_cached_online_query_nodes(); + assert!(res.is_none()); + } +} diff --git a/src/infra/config.rs b/src/infra/config.rs new file mode 100644 index 0000000000..f7f7d19347 --- /dev/null +++ b/src/infra/config.rs @@ -0,0 +1,364 @@ +use dashmap::DashMap; +use datafusion::arrow::datatypes::Schema; +use dotenv::dotenv; +use dotenv_config::EnvConfig; +use sys_info::hostname; + +use crate::common::file::get_file_meta; +use crate::meta::alert::{AlertList, Trigger, TriggerTimer}; +use crate::meta::prom::ClusterLeader; +use crate::meta::transform::{Transform, TransformList}; +use crate::meta::user::User; + +lazy_static! { + pub static ref CONFIG: Config = init(); + pub static ref LOCKER: DashMap> = DashMap::new(); +} + +lazy_static! { + pub static ref STREAM_TRANSFORMS: DashMap = DashMap::new(); + pub static ref STREAM_SCHEMAS: DashMap> = DashMap::new(); + pub static ref QUERY_TRANSFORMS: DashMap = DashMap::new(); + pub static ref USERS: DashMap = DashMap::new(); + pub static ref PASSWORD_HASH: DashMap = DashMap::new(); + #[derive(Debug)] + pub static ref METRIC_CLUSTER_MAP: DashMap> = DashMap::new(); + #[derive(Debug)] + pub static ref METRIC_CLUSTER_LEADER: DashMap = DashMap::new(); + pub static ref STREAM_ALERTS: DashMap = DashMap::new(); + pub static ref TRIGGERS: DashMap = DashMap::new(); + pub static ref TRIGGERS_IN_PROCESS: DashMap = DashMap::new(); +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Config { + pub auth: Auth, + pub http: Http, + pub grpc: Grpc, + pub route: Route, + pub common: Common, + pub limit: Limit, + pub compact: Compact, + pub memory_cache: MemoryCache, + pub log: Log, + pub etcd: Etcd, + pub sled: Sled, + pub s3: S3, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Auth { + #[env_config(name = "ZIOX_USER_NAME", default = "admin")] + pub username: String, + #[env_config(name = "ZIOX_USER_PASSWORD", default = "Complexpass#123")] + pub password: String, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Http { + #[env_config(name = "ZIOX_HTTP_PORT", default = 5080)] + pub port: u16, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Grpc { + #[env_config(name = "ZIOX_GRPC_PORT", default = 5081)] + pub port: u16, + #[env_config(name = "ZIOX_GRPC_TIMEOUT", default = 600)] + pub timeout: u64, + #[env_config(name = "ZIOX_GRPC_ORG_HEADER_KEY", default = "zinc-org-id")] + pub org_header_key: String, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Route { + #[env_config(name = "ZIOX_ROUTE_TIMEOUT", default = 600)] + pub timeout: u64, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Common { + #[env_config(name = "ZIOX_LOCAL_MODE", default = false)] + pub local_mode: bool, + // ZIOX_LOCAL_MODE_STORAGE is ignored when ZIOX_LOCAL_MODE is set to false + #[env_config(name = "ZIOX_LOCAL_MODE_STORAGE", default = "disk")] + pub local_mode_storage: String, + #[env_config(name = "ZIOX_NODE_ROLE", default = "all")] + pub node_role: String, + #[env_config(name = "ZIOX_INSTANCE_NAME", default = "")] + pub instance_name: String, + #[env_config(name = "ZIOX_DATA_DIR", default = "./data/")] + pub data_dir: String, + #[env_config(name = "ZIOX_DATA_WAL_DIR", default = "./data/wal/")] + pub data_wal_dir: String, + #[env_config(name = "ZIOX_DATA_STREAM_DIR", default = "./data/stream/")] + pub data_stream_dir: String, + #[env_config(name = "ZIOX_FILE_EXT_JSON", default = ".json")] + pub file_ext_json: String, + #[env_config(name = "ZIOX_FILE_EXT_PARQUET", default = ".parquet")] + pub file_ext_parquet: String, + #[env_config(name = "ZIOX_PARQUET_COMPRESSION", default = "zstd")] + pub parquet_compression: String, + #[env_config(name = "ZIOX_TIME_STAMP_COL", default = "_timestamp")] + pub time_stamp_col: String, + #[env_config(name = "ZIOX_WIDENING_SCHEMA_EVOLUTION", default = false)] + pub widening_schema_evoluation: bool, + #[env_config(name = "ZIOX_FEATURE_PER_THREAD_LOCK", default = false)] + pub feature_per_thread_lock: bool, + #[env_config(name = "ZIOX_FEATURE_FULLTEXT_ON_ALL_FIELDS", default = false)] + pub feature_fulltext_on_all_fields: bool, + #[env_config(name = "ZIOX_UI_ENABLED", default = true)] + pub ui_enabled: bool, + #[env_config(name = "ZIOX_METRICS_DEDUP_ENABLED", default = true)] + pub metrics_dedup_enabled: bool, + #[env_config(name = "ZIOX_TRACING_ENABLED", default = false)] + pub tracing_enabled: bool, + #[env_config( + name = "OTEL_OTLP_HTTP_ENDPOINT", + default = "http://127.0.0.1:5080/api/nexus/traces" + )] + pub otel_otlp_url: String, + #[env_config(name = "ZIOX_TRACING_HEADER_KEY", default = "Authorization")] + pub tracing_header_key: String, + #[env_config( + name = "ZIOX_TRACING_HEADER_VALUE", + default = "Basic YWRtaW46Q29tcGxleHBhc3MjMTIz" + )] + pub tracing_header_value: String, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Limit { + #[env_config(name = "ZIOX_JSON_LIMIT", default = 209715200)] + pub req_json_limit: usize, + #[env_config(name = "ZIOX_PAYLOAD_LIMIT", default = 209715200)] + pub req_payload_limit: usize, + #[env_config(name = "ZIOX_MAX_FILE_SIZE_ON_DISK", default = 10)] // MB + pub max_file_size_on_disk: u64, + #[env_config(name = "ZIOX_MAX_FILE_RETENTION_TIME", default = 600)] // seconds + pub max_file_retention_time: u64, + #[env_config(name = "ZIOX_FILE_PUSH_INTERVAL", default = 10)] // seconds + pub file_push_interval: u64, + #[env_config(name = "ZIOX_FILE_MOVE_THREAD_NUM", default = 0)] + pub file_move_thread_num: usize, + #[env_config(name = "ZIOX_QUERY_THREAD_NUM", default = 0)] + pub query_thread_num: usize, + #[env_config(name = "ZIOX_TS_ALLOWED_UPTO", default = 5)] // in hours - in past + pub allowed_upto: i64, + #[env_config(name = "ZIOX_METRICS_LEADER_PUSH_INTERVAL", default = 15)] + pub metrics_leader_push_interval: u64, + #[env_config(name = "ZIOX_METRICS_LEADER_ELECTION_INTERVAL", default = 30)] + pub metrics_leader_election_interval: i64, + // no need set by environment + pub cpu_num: usize, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Compact { + #[env_config(name = "ZIOX_COMPACT_ENABLED", default = true)] + pub enabled: bool, + #[env_config(name = "ZIOX_COMPACT_INTERVAL", default = 600)] // seconds + pub interval: u64, + #[env_config(name = "ZIOX_COMPACT_MAX_FILE_SIZE", default = 256)] // MB + pub max_file_size: u64, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct MemoryCache { + #[env_config(name = "ZIOX_MEMORY_CACHE_ENABLED", default = true)] + pub enabled: bool, + #[env_config(name = "ZIOX_MEMORY_CACHE_CACHE_LATEST_FILES", default = false)] + pub cache_latest_files: bool, + #[env_config(name = "ZIOX_MEMORY_CACHE_MAX_SIZE", default = 0)] + // MB, default is half of system memory + pub max_size: usize, + #[env_config(name = "ZIOX_MEMORY_CACHE_RELEASE_SIZE", default = 0)] + // MB, default is 1% of max_size + pub release_size: usize, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Log { + #[env_config(name = "RUST_LOG", default = "info")] + pub level: String, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Etcd { + #[env_config(name = "ZIOX_ETCD_ADDR", default = "localhost:2379")] + pub addr: String, + #[env_config(name = "ZIOX_ETCD_PREFIX", default = "/zinc/observe/")] + pub prefix: String, + #[env_config(name = "ZIOX_ETCD_CONNECT_TIMEOUT", default = 2)] + pub connect_timeout: u64, + #[env_config(name = "ZIOX_ETCD_COMMAND_TIMEOUT", default = 5)] + pub command_timeout: u64, + #[env_config(name = "ZIOX_ETCD_LOCK_WAIT_TIMEOUT", default = 600)] + pub lock_wait_timeout: u64, + #[env_config(name = "ZIOX_ETCD_USER", default = "")] + pub user: String, + #[env_config(name = "ZIOX_ETCD_PASSWORD", default = "")] + pub password: String, + #[env_config(name = "ZIOX_ETCD_CLIENT_CERT_AUTH", default = false)] + pub cert_auth: bool, + #[env_config(name = "ZIOX_ETCD_TRUSTED_CA_FILE", default = "")] + pub ca_file: String, + #[env_config(name = "ZIOX_ETCD_CERT_FILE", default = "")] + pub cert_file: String, + #[env_config(name = "ZIOX_ETCD_KEY_FILE", default = "")] + pub key_file: String, + #[env_config(name = "ZIOX_ETCD_DOMAIN_NAME", default = "")] + pub domain_name: String, + #[env_config(name = "ZIOX_ETCD_LOAD_PAGE_SIZE", default = 10000)] + pub load_page_size: i64, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct Sled { + #[env_config(name = "ZIOX_SLED_DATA_DIR", default = "./data/db/")] + pub data_dir: String, + #[env_config(name = "ZIOX_SLED_PREFIX", default = "/zinc/observe/")] + pub prefix: String, +} + +#[derive(Clone, Debug, EnvConfig)] +pub struct S3 { + #[env_config(name = "ZIOX_S3_SERVER_URL", default = "")] + pub server_url: String, + #[env_config(name = "ZIOX_S3_REGION_NAME", default = "")] + pub region_name: String, + #[env_config(name = "ZIOX_S3_ACCESS_KEY", default = "")] + pub access_key: String, + #[env_config(name = "ZIOX_S3_SECRET_KEY", default = "")] + pub secret_key: String, + #[env_config(name = "ZIOX_S3_BUCKET_NAME", default = "")] + pub bucket_name: String, +} + +pub fn init() -> Config { + dotenv().ok(); + let mut cfg = Config::init().unwrap(); + // set cpu num + let cpu_num = sys_info::cpu_num().unwrap() as usize; + cfg.limit.cpu_num = cpu_num; + // HACK for thread_num equal to CPU core * 4 + if cfg.limit.query_thread_num == 0 { + cfg.limit.query_thread_num = cpu_num * 4; + } + // HACK for move_file_thread_num equal to CPU core + if cfg.limit.file_move_thread_num == 0 { + cfg.limit.file_move_thread_num = cpu_num; + } + if cfg.limit.file_push_interval == 0 { + cfg.limit.file_push_interval = 10; + } + // HACK instance_name + if cfg.common.instance_name.is_empty() { + cfg.common.instance_name = hostname().unwrap(); + } + // check max_file_size_on_disk to MB + cfg.limit.max_file_size_on_disk *= 1024 * 1024; + // check compact_max_file_size to MB + cfg.compact.max_file_size *= 1024 * 1024; + if cfg.compact.interval == 0 { + cfg.compact.interval = 600; + } + // format local_mode_storage + cfg.common.local_mode_storage = cfg.common.local_mode_storage.to_lowercase(); + + // check data path config + if let Err(e) = check_path_config(&mut cfg) { + panic!("data path config error: {}", e); + } + + // check memeory cache + if let Err(e) = check_memory_cache_config(&mut cfg) { + panic!("memory cache config error: {}", e); + } + + // check etcd config + if let Err(e) = check_etcd_config(&mut cfg) { + panic!("etcd config error: {}", e); + } + cfg +} + +fn check_path_config(cfg: &mut Config) -> Result<(), anyhow::Error> { + if !cfg.common.data_wal_dir.ends_with('/') { + cfg.common.data_wal_dir = format!("{}/", cfg.common.data_wal_dir); + } + if !cfg.common.data_stream_dir.ends_with('/') { + cfg.common.data_stream_dir = format!("{}/", cfg.common.data_stream_dir); + } + if !cfg.sled.data_dir.ends_with('/') { + cfg.sled.data_dir = format!("{}/", cfg.sled.data_dir); + } + Ok(()) +} + +fn check_etcd_config(cfg: &mut Config) -> Result<(), anyhow::Error> { + if !cfg.etcd.cert_auth { + return Ok(()); + } + if let Err(e) = get_file_meta(&cfg.etcd.ca_file) { + return Err(anyhow::anyhow!( + "ZIOX_ETCD_TRUSTED_CA_FILE check err: {}", + e + )); + } + if let Err(e) = get_file_meta(&cfg.etcd.cert_file) { + return Err(anyhow::anyhow!( + "ZIOX_ETCD_TRUSTED_CA_FILE check err: {}", + e + )); + } + if let Err(e) = get_file_meta(&cfg.etcd.key_file) { + return Err(anyhow::anyhow!( + "ZIOX_ETCD_TRUSTED_CA_FILE check err: {}", + e + )); + } + + // check domain name + if cfg.etcd.domain_name.is_empty() { + let mut name = cfg.etcd.addr.clone(); + if name.contains("//") { + name = name.split("//").collect::>()[1].to_string(); + } + if name.contains(':') { + name = name.split(':').collect::>()[0].to_string(); + } + cfg.etcd.domain_name = name; + } + + Ok(()) +} + +fn check_memory_cache_config(cfg: &mut Config) -> Result<(), anyhow::Error> { + if cfg.memory_cache.max_size == 0 { + // meminfo unit is KB + let meminfo = sys_info::mem_info()?; + cfg.memory_cache.max_size = meminfo.total as usize * 1024 / 2; + } else { + cfg.memory_cache.max_size *= 1024 * 1024; + } + if cfg.memory_cache.release_size == 0 { + // when memory cache is full will release 1% (default) + cfg.memory_cache.release_size = cfg.memory_cache.max_size / 100; + } else { + cfg.memory_cache.release_size *= 1024 * 1024; + } + Ok(()) +} + +#[inline] +pub fn get_parquet_compression() -> parquet::basic::Compression { + match CONFIG.common.parquet_compression.to_lowercase().as_str() { + "snappy" => parquet::basic::Compression::SNAPPY, + "gzip" => parquet::basic::Compression::GZIP, + "brotli" => parquet::basic::Compression::BROTLI, + "lz4" => parquet::basic::Compression::LZ4_RAW, + "zstd" => parquet::basic::Compression::ZSTD, + _ => parquet::basic::Compression::ZSTD, + } +} diff --git a/src/infra/db/etcd.rs b/src/infra/db/etcd.rs new file mode 100644 index 0000000000..79a92facf4 --- /dev/null +++ b/src/infra/db/etcd.rs @@ -0,0 +1,556 @@ +use ahash::HashMap; +use async_once::AsyncOnce; +use async_trait::async_trait; +use bytes::Bytes; +use etcd_client::{ + Compare, CompareOp, DeleteOptions, EventType, GetOptions, SortOrder, SortTarget, TxnOp, +}; +use std::sync::atomic::{AtomicU8, Ordering}; +use std::sync::Arc; +use tokio::sync::mpsc; +use tokio::task::JoinHandle; +use tokio::time; +use tonic::transport::{Certificate, ClientTlsConfig, Identity}; +use tracing::info_span; + +use super::{Event, EventData}; +use crate::infra::cluster; +use crate::infra::{config::CONFIG, errors::*}; + +/// max operations in txn request +pub const MAX_OPS_PER_TXN: usize = 120; // etcd hard coded limit is 128 + +lazy_static! { + pub static ref ETCD_CLIENT: AsyncOnce> = + AsyncOnce::new(async { connect_etcd().await }); +} + +pub struct Etcd { + prefix: String, +} + +impl Etcd { + pub fn new(prefix: &str) -> Etcd { + let prefix = prefix.trim_end_matches(|v| v == '/'); + Etcd { + prefix: prefix.to_string(), + } + } +} + +impl Default for Etcd { + fn default() -> Self { + Self::new(&CONFIG.etcd.prefix) + } +} + +#[async_trait] +impl super::Db for Etcd { + async fn get(&self, key: &str) -> Result { + let key = format!("{}{}", self.prefix, key); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let ret = client.get(key.as_str(), None).await?; + if ret.kvs().is_empty() { + return Err(Error::from(DbError::KeyNotExists(key))); + } + let value: Bytes = Bytes::from(ret.kvs()[0].value().to_vec()); + Ok(value) + } + + async fn put(&self, key: &str, value: Bytes) -> Result<()> { + let key = format!("{}{}", self.prefix, key); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let _ = client.put(key, value, None).await?; + Ok(()) + } + + async fn delete(&self, key: &str, with_prefix: bool) -> Result<()> { + let key = format!("{}{}", self.prefix, key); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let opt = if with_prefix { + Some(DeleteOptions::new().with_prefix()) + } else { + None + }; + let result = client.delete(key.as_str(), opt).await?; + if result.deleted() > 0 { + Ok(()) + } else { + return Err(Error::from(DbError::KeyNotExists(key))); + } + } + + async fn list(&self, prefix: &str) -> Result> { + let mut result = HashMap::default(); + let key = format!("{}{}", self.prefix, prefix); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let mut opt = GetOptions::new() + .with_prefix() + .with_sort(SortTarget::Key, SortOrder::Ascend) + .with_limit(CONFIG.etcd.load_page_size); + let mut resp = client.get(key.clone(), Some(opt.clone())).await?; + let mut first_call = true; + let mut have_next = true; + let mut last_key = String::new(); + loop { + let kvs_num = resp.kvs().len() as i64; + if kvs_num < CONFIG.etcd.load_page_size { + have_next = false; + } + for kv in resp.kvs() { + let item_key = kv.key_str().unwrap(); + if !item_key.starts_with(&key) { + have_next = false; + break; + } + if item_key.eq(last_key.as_str()) { + continue; + } + let item_key = item_key.strip_prefix(&self.prefix).unwrap(); + result.insert(item_key.to_string(), Bytes::from(kv.value().to_vec())); + } + tokio::task::yield_now().await; // yield to other tasks + + if !have_next { + break; + } + if first_call { + first_call = false; + opt = opt.with_from_key(); + } + last_key = resp.kvs().last().unwrap().key_str().unwrap().to_string(); + resp = client.get(last_key.clone(), Some(opt.clone())).await?; + } + Ok(result) + } + + async fn list_use_channel(&self, prefix: &str) -> Result>> { + let (tx, rx) = mpsc::channel(CONFIG.etcd.load_page_size as usize); + let key = format!("{}{}", self.prefix, prefix); + let prefix_key = self.prefix.to_string(); + let _task: JoinHandle> = tokio::task::spawn(async move { + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let mut opt = GetOptions::new() + .with_prefix() + .with_sort(SortTarget::Key, SortOrder::Ascend) + .with_limit(CONFIG.etcd.load_page_size); + let mut resp = match client.get(key.clone(), Some(opt.clone())).await { + Ok(resp) => resp, + Err(err) => { + log::error!("get prefix error: {}", err); + return Err(Error::from(err)); + } + }; + let mut first_call = true; + let mut have_next = true; + let mut last_key = String::new(); + loop { + let kvs_num = resp.kvs().len() as i64; + if kvs_num < CONFIG.etcd.load_page_size { + have_next = false; + } + for kv in resp.kvs() { + let item_key = kv.key_str().unwrap(); + if !item_key.starts_with(&key) { + have_next = false; + break; + } + if item_key.eq(last_key.as_str()) { + continue; + } + let item_key = item_key.strip_prefix(&prefix_key).unwrap(); + tx.send((item_key.to_string(), Bytes::from(kv.value().to_vec()))) + .await + .unwrap(); + } + tokio::task::yield_now().await; // yield to other tasks + + if !have_next { + break; + } + if first_call { + first_call = false; + opt = opt.with_from_key(); + } + last_key = resp.kvs().last().unwrap().key_str().unwrap().to_string(); + resp = client.get(last_key.clone(), Some(opt.clone())).await?; + } + Ok(()) + }); + Ok(Arc::new(rx)) + } + + async fn list_keys(&self, prefix: &str) -> Result> { + let mut result = Vec::new(); + let key = format!("{}{}", self.prefix, prefix); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let mut opt = GetOptions::new() + .with_prefix() + .with_sort(SortTarget::Key, SortOrder::Ascend) + .with_limit(CONFIG.etcd.load_page_size); + let mut resp = client.get(key.clone(), Some(opt.clone())).await?; + let mut first_call = true; + let mut have_next = true; + let mut last_key = String::new(); + loop { + let kvs_num = resp.kvs().len() as i64; + if kvs_num < CONFIG.etcd.load_page_size { + have_next = false; + } + for kv in resp.kvs() { + let item_key = kv.key_str().unwrap(); + if !item_key.starts_with(&key) { + have_next = false; + break; + } + if item_key.eq(last_key.as_str()) { + continue; + } + let item_key = item_key.strip_prefix(&self.prefix).unwrap(); + result.push(item_key.to_string()); + } + tokio::task::yield_now().await; // yield to other tasks + + if !have_next { + break; + } + if first_call { + first_call = false; + opt = opt.with_from_key(); + } + last_key = resp.kvs().last().unwrap().key_str().unwrap().to_string(); + resp = client.get(last_key.clone(), Some(opt.clone())).await?; + } + Ok(result) + } + + async fn list_values(&self, prefix: &str) -> Result> { + let mut result = Vec::new(); + let key = format!("{}{}", self.prefix, prefix); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let mut opt = GetOptions::new() + .with_prefix() + .with_sort(SortTarget::Key, SortOrder::Ascend) + .with_limit(CONFIG.etcd.load_page_size); + let mut resp = client.get(key.clone(), Some(opt.clone())).await?; + let mut first_call = true; + let mut have_next = true; + let mut last_key = String::new(); + loop { + let kvs_num = resp.kvs().len() as i64; + if kvs_num < CONFIG.etcd.load_page_size { + have_next = false; + } + for kv in resp.kvs() { + let item_key = kv.key_str().unwrap(); + if !item_key.starts_with(&key) { + have_next = false; + break; + } + if item_key.eq(last_key.as_str()) { + continue; + } + result.push(Bytes::from(kv.value().to_vec())); + } + tokio::task::yield_now().await; // yield to other tasks + + if !have_next { + break; + } + if first_call { + first_call = false; + opt = opt.with_from_key(); + } + last_key = resp.kvs().last().unwrap().key_str().unwrap().to_string(); + resp = client.get(last_key.clone(), Some(opt.clone())).await?; + } + Ok(result) + } + + async fn watch(&self, prefix: &str) -> Result>> { + let (tx, rx) = mpsc::channel(1024); + let key = format!("{}{}", &self.prefix, prefix); + let prefix_key = self.prefix.to_string(); + let _task: JoinHandle> = tokio::task::spawn(async move { + loop { + if cluster::is_offline() { + break; + } + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let opt = etcd_client::WatchOptions::new().with_prefix(); + let (mut _watcher, mut stream) = + match client.watch(key.clone(), Some(opt.clone())).await { + Ok((watcher, stream)) => (watcher, stream), + Err(e) => { + log::error!("watching prefix: {}, error: {}", key, e); + time::sleep(time::Duration::from_secs(1)).await; + continue; + } + }; + loop { + let resp = match stream.message().await { + Ok(resp) => resp, + Err(e) => { + log::error!("watching prefix: {}, get message error: {}", key, e); + break; + } + }; + if let Some(ev) = resp { + for ev in ev.events() { + let kv = ev.kv().unwrap(); + let item_key = kv.key_str().unwrap(); + let item_key = item_key.strip_prefix(&prefix_key).unwrap(); + match ev.event_type() { + EventType::Put => tx + .send(Event::Put(EventData { + key: item_key.to_string(), + value: Some(Bytes::from(kv.value().to_vec())), + })) + .await + .unwrap(), + EventType::Delete => tx + .send(Event::Delete(EventData { + key: item_key.to_string(), + value: None, + })) + .await + .unwrap(), + } + } + } + } + } + Ok(()) + }); + Ok(Arc::new(rx)) + } + + async fn transaction( + &self, + check_key: &str, + and_ops: Vec, + else_ops: Vec, + ) -> Result<()> { + let db_span = info_span!("infra:db:etcd:transaction"); + let _guard = db_span.enter(); + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let mut txn = etcd_client::Txn::new(); + let compares = vec![Compare::value( + check_key.to_string(), + CompareOp::NotEqual, + "", + )]; + txn = txn.when(compares); + let mut txn_and_ops = Vec::new(); + for op in and_ops { + match op { + Event::Put(data) => { + let key = format!("{}{}", self.prefix, data.key); + txn_and_ops.push(TxnOp::put(key, data.value.unwrap(), None)); + } + Event::Delete(data) => { + let key = format!("{}{}", self.prefix, data.key); + txn_and_ops.push(TxnOp::delete(key, None)); + } + } + } + let mut txn_else_ops = Vec::new(); + for op in else_ops { + match op { + Event::Put(data) => { + let key = format!("{}{}", self.prefix, data.key); + txn_else_ops.push(TxnOp::put(key, data.value.unwrap(), None)); + } + Event::Delete(data) => { + let key = format!("{}{}", self.prefix, data.key); + txn_else_ops.push(TxnOp::delete(key, None)); + } + } + } + txn = txn.and_then(txn_and_ops); + txn = txn.or_else(txn_else_ops); + let _ = client.txn(txn).await?; + Ok(()) + } +} + +pub async fn connect_etcd() -> Option { + if CONFIG.common.local_mode { + return None; + } + + let mut opts = etcd_client::ConnectOptions::new() + .with_timeout(core::time::Duration::from_secs(CONFIG.etcd.command_timeout)) + .with_connect_timeout(core::time::Duration::from_secs(CONFIG.etcd.connect_timeout)); + if !&CONFIG.etcd.user.is_empty() { + opts = opts.with_user(&CONFIG.etcd.user, &CONFIG.etcd.password); + } + if CONFIG.etcd.cert_auth { + let server_root_ca_cert = tokio::fs::read(&CONFIG.etcd.ca_file).await.unwrap(); + let server_root_ca_cert = Certificate::from_pem(server_root_ca_cert); + let client_cert = tokio::fs::read(&CONFIG.etcd.cert_file).await.unwrap(); + let client_key = tokio::fs::read(&CONFIG.etcd.key_file).await.unwrap(); + let client_identity = Identity::from_pem(client_cert, client_key); + let tls = ClientTlsConfig::new() + .domain_name(&CONFIG.etcd.domain_name) + .ca_certificate(server_root_ca_cert) + .identity(client_identity); + opts = opts.with_tls(tls); + } + let client = etcd_client::Client::connect([&CONFIG.etcd.addr], Some(opts)) + .await + .unwrap(); + + // enable keep alive for auth token + tokio::task::spawn(async move { keepalive_connection().await }); + + Some(client) +} + +pub async fn keepalive_connection() -> Result<()> { + loop { + if cluster::is_offline() { + break; + } + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let key = format!("{}healthz", &CONFIG.etcd.prefix); + let key = key.as_str(); + client.put(key, "OK", None).await?; + let mut interval = time::interval(time::Duration::from_secs(60)); + interval.tick().await; // trigger the first run + loop { + interval.tick().await; + match client.get(key, None).await { + Ok(ret) => for _item in ret.kvs() {}, + Err(e) => { + log::error!("keep alive connection error: {:?}", e); + break; + } + }; + } + } + + Ok(()) +} + +pub async fn keepalive_lease_id(id: i64, ttl: i64, stopper: F) -> Result<()> +where + F: Fn() -> bool, +{ + let mut ttl_keep_alive = (ttl / 2) as u64; + loop { + if stopper() { + break; + } + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let (mut keeper, mut stream) = match client.lease_keep_alive(id).await { + Ok((keeper, stream)) => (keeper, stream), + Err(e) => { + log::error!("lease {:?} keep alive error: {:?}", id, e); + time::sleep(time::Duration::from_secs(1)).await; + continue; + } + }; + loop { + if stopper() { + break; + } + time::sleep(time::Duration::from_secs(ttl_keep_alive)).await; + match keeper.keep_alive().await { + Ok(_) => {} + Err(e) => { + log::error!("lease {:?} keep alive do keeper error: {:?}", id, e); + ttl_keep_alive = 1; + break; + } + } + match stream.message().await { + Ok(v) => { + if v.unwrap().ttl() == 0 { + log::error!("lease {:?} keep alive ttl is 0", id); + return Err(Error::from(etcd_client::Error::LeaseKeepAliveError( + "lease expired or revoked".to_string(), + ))); + } + ttl_keep_alive = (ttl / 2) as u64; + } + Err(e) => { + log::error!("lease {:?} keep alive receive message: {:?}", id, e); + ttl_keep_alive = 1; + break; + } + }; + } + } + + Ok(()) +} + +pub struct Locker { + key: String, + lock_id: String, + state: Arc, // 0: init, 1: locking, 2: release +} + +impl Locker { + pub fn new(key: &str) -> Self { + let key = format!("{}lock/{}", &CONFIG.etcd.prefix, key); + Self { + key, + lock_id: "".to_string(), + state: Arc::new(AtomicU8::new(0)), + } + } + + /// lock with timeout, 0 means use default timeout, unit: second + pub async fn lock(&mut self, timeout: u64) -> Result<()> { + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + let mut last_err = None; + let timeout = if timeout == 0 { + CONFIG.etcd.lock_wait_timeout + } else { + timeout + }; + let mut n = timeout / CONFIG.etcd.command_timeout; + if n < 1 { + n = 1; + } + for _ in 0..n { + match client.lock(self.key.as_str(), None).await { + Ok(resp) => { + self.lock_id = String::from_utf8_lossy(resp.key()).to_string(); + self.state.store(1, Ordering::SeqCst); + last_err = None; + break; + } + Err(err) => { + last_err = Some(err.to_string()); + // log::error!("get lock error: {}, key: {}", err, self.key); + if !err.to_string().contains("Timeout expired") { + break; + } + } + }; + } + if let Some(err) = last_err { + return Err(Error::Message(format!("get lock error: {}", err))); + } + Ok(()) + } + + pub async fn unlock(&mut self) -> Result<()> { + if self.state.load(Ordering::SeqCst) != 1 { + return Ok(()); + } + let mut client = ETCD_CLIENT.get().await.clone().unwrap(); + match client.unlock(self.lock_id.as_str()).await { + Ok(_) => {} + Err(err) => { + log::error!("unlock error: {}, key: {}", err, self.key); + return Err(Error::Message("unlock error".to_string())); + } + }; + self.state.store(2, Ordering::SeqCst); + Ok(()) + } +} diff --git a/src/infra/db/mod.rs b/src/infra/db/mod.rs new file mode 100644 index 0000000000..aa141cc8a6 --- /dev/null +++ b/src/infra/db/mod.rs @@ -0,0 +1,99 @@ +use ahash::HashMap; +use async_trait::async_trait; +use bytes::Bytes; +use std::sync::Arc; +use tokio::sync::mpsc; + +use super::config::CONFIG; +use super::errors::Result; + +pub mod etcd; +pub mod sled; + +pub use self::etcd::ETCD_CLIENT; +pub use self::sled::SLED_CLIENT; + +lazy_static! { + pub static ref DEFAULT: Box = default(); +} + +pub fn default() -> Box { + match CONFIG.common.local_mode { + true => Box::new(sled::Sled::new(&CONFIG.sled.prefix)), + false => Box::new(etcd::Etcd::new(&CONFIG.etcd.prefix)), + } +} + +#[derive(Clone, Debug)] +pub enum Event { + Put(EventData), + Delete(EventData), +} + +#[derive(Clone, Debug)] +pub struct EventData { + pub key: String, + pub value: Option, +} + +#[async_trait] +pub trait Db: Sync + 'static { + async fn get(&self, key: &str) -> Result; + async fn put(&self, key: &str, value: Bytes) -> Result<()>; + async fn delete(&self, key: &str, with_prefix: bool) -> Result<()>; + async fn list(&self, prefix: &str) -> Result>; + async fn list_use_channel(&self, prefix: &str) -> Result>>; + async fn list_keys(&self, prefix: &str) -> Result>; + async fn list_values(&self, prefix: &str) -> Result>; + async fn watch(&self, prefix: &str) -> Result>>; + async fn transaction( + &self, + check_key: &str, // check the key exists + and_ops: Vec, + else_ops: Vec, + ) -> Result<()>; +} + +#[cfg(test)] +mod tests { + use super::default; + use bytes::Bytes; + + #[tokio::test] + #[ignore] + async fn test_get() { + let db = default(); + db.put("/foo/bar", Bytes::from("hello")).await.unwrap(); + let value = db.get("/foo/bar").await.unwrap(); + assert_eq!(value, Bytes::from("hello")); + } + + #[tokio::test] + #[ignore] + async fn test_put() { + let db = default(); + assert_eq!(true, db.put("/foo/bar", Bytes::from("hello")).await.is_ok()); + } + + #[tokio::test] + async fn test_delete() { + let db = default(); + assert_eq!( + true, + db.put("/foo/bar1", Bytes::from("hello")).await.is_ok() + ); + assert_eq!( + true, + db.put("/foo/bar2", Bytes::from("hello")).await.is_ok() + ); + assert_eq!( + true, + db.put("/foo/bar3", Bytes::from("hello")).await.is_ok() + ); + assert_eq!(true, db.delete("/foo/bar1", false).await.is_ok()); + assert_eq!(true, db.delete("/foo/bar4", false).await.is_err()); + assert_eq!(true, db.delete("/foo/", true).await.is_ok()); + let value = db.list_keys("/foo/").await.unwrap(); + assert_eq!(value.len(), 0); + } +} diff --git a/src/infra/db/sled.rs b/src/infra/db/sled.rs new file mode 100644 index 0000000000..b250050d16 --- /dev/null +++ b/src/infra/db/sled.rs @@ -0,0 +1,288 @@ +use ahash::HashMap; +use async_trait::async_trait; +use bytes::Bytes; +use sled::transaction::ConflictableTransactionError; +use std::sync::Arc; +use tokio::{sync::mpsc, task::JoinHandle}; +use tracing::info_span; + +use super::{Event, EventData}; +use crate::infra::cluster; +use crate::infra::{config::CONFIG, errors::*}; + +lazy_static! { + pub static ref SLED_CLIENT: Option<::sled::Db> = connect_sled(); +} + +pub struct Sled { + prefix: String, +} + +impl Sled { + pub fn new(prefix: &str) -> Sled { + let prefix = prefix.trim_end_matches(|v| v == '/'); + Sled { + prefix: prefix.to_string(), + } + } +} + +impl Default for Sled { + fn default() -> Self { + Self::new(&CONFIG.sled.prefix) + } +} + +#[async_trait] +impl super::Db for Sled { + async fn get(&self, key: &str) -> Result { + let key = format!("{}{}", self.prefix, key); + let client = SLED_CLIENT.clone().unwrap(); + let result = client.get(&key); + if result.is_err() { + return Err(Error::from(DbError::KeyNotExists(key))); + } + let result = result.unwrap(); + if result.is_none() { + return Err(Error::from(DbError::KeyNotExists(key))); + } + let value: Bytes = Bytes::from(result.unwrap().as_ref().to_vec()); + Ok(value) + } + + async fn put(&self, key: &str, value: Bytes) -> Result<()> { + let key = format!("{}{}", self.prefix, key); + let client = SLED_CLIENT.clone().unwrap(); + client.insert(key.as_str(), value.to_vec())?; + Ok(()) + } + + async fn delete(&self, key: &str, with_prefix: bool) -> Result<()> { + let key = format!("{}{}", self.prefix, key); + let client = SLED_CLIENT.clone().unwrap(); + if !with_prefix { + let result = client.remove(&key)?; + if result.is_none() { + return Err(Error::from(DbError::KeyNotExists(key))); + } + return Ok(()); + } + + // prefix mod + let mut resp = client.scan_prefix(key); + loop { + let item = resp.next(); + if item.is_none() { + break; + } + let item = item.unwrap(); + let (k, _v) = item.unwrap(); + client.remove(&k)?; + } + Ok(()) + } + + async fn list(&self, prefix: &str) -> Result> { + let mut result = HashMap::default(); + let key = format!("{}{}", self.prefix, prefix); + let client = SLED_CLIENT.clone().unwrap(); + let mut resp = client.scan_prefix(key); + loop { + let item = resp.next(); + if item.is_none() { + break; + } + let item = item.unwrap(); + let (k, v) = item.unwrap(); + let item_key = std::str::from_utf8(k.as_ref()).unwrap(); + let item_key = item_key.strip_prefix(&self.prefix).unwrap(); + result.insert(item_key.to_string(), Bytes::from(v.as_ref().to_vec())); + } + Ok(result) + } + + async fn list_use_channel(&self, prefix: &str) -> Result>> { + let (tx, rx) = mpsc::channel(CONFIG.etcd.load_page_size as usize); + let key = format!("{}{}", self.prefix, prefix); + let prefix_key = self.prefix.to_string(); + let _task: JoinHandle> = tokio::task::spawn(async move { + let client = SLED_CLIENT.clone().unwrap(); + let mut resp = client.scan_prefix(key); + let mut load_num = 0; + loop { + let item = resp.next(); + if item.is_none() { + break; + } + let item = item.unwrap(); + let (k, v) = item.unwrap(); + let item_key = std::str::from_utf8(k.as_ref()).unwrap(); + let item_key = item_key.strip_prefix(&prefix_key).unwrap(); + tx.send((item_key.to_string(), Bytes::from(v.as_ref().to_vec()))) + .await + .unwrap(); + load_num += 1; + if load_num % CONFIG.etcd.load_page_size == 0 { + tokio::task::yield_now().await; // yield to other tasks + } + } + Ok(()) + }); + Ok(Arc::new(rx)) + } + + async fn list_keys(&self, prefix: &str) -> Result> { + let mut result = Vec::new(); + let key = format!("{}{}", self.prefix, prefix); + let client = SLED_CLIENT.clone().unwrap(); + let mut resp = client.scan_prefix(key); + loop { + let item = resp.next(); + if item.is_none() { + break; + } + let item = item.unwrap(); + let (k, _v) = item.unwrap(); + let item_key = std::str::from_utf8(k.as_ref()).unwrap(); + let item_key = item_key.strip_prefix(&self.prefix).unwrap(); + result.push(item_key.to_string()); + } + Ok(result) + } + + async fn list_values(&self, prefix: &str) -> Result> { + let mut result = Vec::new(); + let key = format!("{}{}", self.prefix, prefix); + let client = SLED_CLIENT.clone().unwrap(); + let mut resp = client.scan_prefix(key); + loop { + let item = resp.next(); + if item.is_none() { + break; + } + let item = item.unwrap(); + let (_k, v) = item.unwrap(); + result.push(Bytes::from(v.as_ref().to_vec())); + } + Ok(result) + } + + async fn watch(&self, prefix: &str) -> Result>> { + let (tx, rx) = mpsc::channel(1024); + let key = format!("{}{}", &self.prefix, prefix); + let prefix_key = self.prefix.to_string(); + let _task: JoinHandle> = tokio::task::spawn(async move { + loop { + if cluster::is_offline() { + break; + } + let client = SLED_CLIENT.clone().unwrap(); + let mut subscriber = client.watch_prefix(key.clone()); + while let Some(event) = (&mut subscriber).await { + match event { + ::sled::Event::Insert { key, value } => { + let item_key = std::str::from_utf8(key.as_ref()).unwrap(); + let item_key = item_key.strip_prefix(&prefix_key.clone()).unwrap(); + tx.send(Event::Put(EventData { + key: item_key.to_string(), + value: Some(Bytes::from(value.as_ref().to_vec())), + })) + .await + .unwrap(); + } + ::sled::Event::Remove { key } => { + let item_key = std::str::from_utf8(key.as_ref()).unwrap(); + let item_key = item_key.strip_prefix(&prefix_key.clone()).unwrap(); + tx.send(Event::Delete(EventData { + key: item_key.to_string(), + value: None, + })) + .await + .unwrap(); + } + }; + } + } + Ok(()) + }); + + Ok(Arc::new(rx)) + } + + async fn transaction( + &self, + check_key: &str, + and_ops: Vec, + else_ops: Vec, + ) -> Result<()> { + let db_span = info_span!("infra:db:sled:transaction"); + let _guard = db_span.enter(); + let client = SLED_CLIENT.clone().unwrap(); + let mut check_result = false; + let key = format!("{}{}", self.prefix, check_key); + let ret = client.get(key); + if ret.is_err() { + return Err(Error::from(ret.err().unwrap())); + } + let ret = ret.unwrap(); + if ret.is_some() { + check_result = true; + } + match client.transaction(|db| { + match check_result { + true => { + for op in &and_ops { + match op { + Event::Put(data) => { + let key = format!("{}{}", self.prefix, data.key); + let value = data.value.clone().unwrap(); + if let Err(e) = db.insert(key.as_str(), value.to_vec()) { + return Err(ConflictableTransactionError::Abort(e)); + } + } + Event::Delete(data) => { + let key = format!("{}{}", self.prefix, data.key); + if let Err(e) = db.remove(key.as_str()) { + return Err(ConflictableTransactionError::Abort(e)); + } + } + } + } + } + false => { + for op in &else_ops { + match op { + Event::Put(data) => { + let key = format!("{}{}", self.prefix, data.key); + let value = data.value.clone().unwrap(); + if let Err(e) = db.insert(key.as_str(), value.to_vec()) { + return Err(ConflictableTransactionError::Abort(e)); + } + } + Event::Delete(data) => { + let key = format!("{}{}", self.prefix, data.key); + if let Err(e) = db.remove(key.as_str()) { + return Err(ConflictableTransactionError::Abort(e)); + } + } + } + } + } + } + Ok(()) + }) { + Ok(_) => Ok(()), + Err(e) => Err(Error::Message(e.to_string())), + } + } +} + +pub fn connect_sled() -> Option<::sled::Db> { + if !CONFIG.common.local_mode { + return None; + } + + let db = ::sled::open(&CONFIG.sled.data_dir) + .unwrap_or_else(|e| panic!("Error creating local sled db dir: {}", e)); + Some(db) +} diff --git a/src/infra/errors.rs b/src/infra/errors.rs new file mode 100644 index 0000000000..9e3c25dce3 --- /dev/null +++ b/src/infra/errors.rs @@ -0,0 +1,31 @@ +use thiserror::Error as ThisError; + +pub type Result = std::result::Result; + +#[derive(ThisError, Debug)] +pub enum Error { + #[error("DbError# {0}")] + DbError(#[from] DbError), + #[error("EtcdError# {0}")] + EtcdError(#[from] etcd_client::Error), + #[error("SledError# {0}")] + SledError(#[from] sled::Error), + #[error("SerdeJsonError# {0}")] + SerdeJsonError(#[from] serde_json::Error), + #[error("SimdJsonError# {0}")] + SimdJsonError(#[from] simd_json::Error), + #[error("Error# watcher is exists {0}")] + WatcherExists(String), + #[error("Error# {0}")] + Message(String), + #[error("Not implemented")] + NotImplemented, + #[error("Unknown error")] + Unknown, +} + +#[derive(ThisError, Debug)] +pub enum DbError { + #[error("key:{0} not exists")] + KeyNotExists(String), +} diff --git a/src/infra/file_lock.rs b/src/infra/file_lock.rs new file mode 100644 index 0000000000..1cada15018 --- /dev/null +++ b/src/infra/file_lock.rs @@ -0,0 +1,274 @@ +use std::collections::HashMap; +use std::fs::{File, OpenOptions}; +use std::io::Write; +use std::sync::{Arc, RwLock}; + +use crate::infra::config::CONFIG; +use crate::infra::ider; +use crate::meta::StreamType; + +lazy_static! { + pub static ref LOCKER: Locker = Locker::new(); +} + +pub struct Locker { + data: Arc>, +} + +type RwData = RwLock>>; + +#[derive(Debug)] +pub struct RwFile { + file: RwLock, + dir: String, + name: String, + expired: i64, +} + +#[inline(always)] +pub fn get_or_create( + thread_id: usize, + org_id: &str, + stream_name: &str, + stream_type: StreamType, + key: &str, +) -> Arc { + LOCKER.get_or_create(thread_id, org_id, stream_name, stream_type, key) +} + +#[inline(always)] +pub fn check_in_use( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + file_name: &str, +) -> bool { + LOCKER.check_in_use(org_id, stream_name, stream_type, file_name) +} + +impl Default for Locker { + fn default() -> Self { + Self::new() + } +} + +impl Locker { + pub fn new() -> Locker { + let size = CONFIG.limit.cpu_num; + let mut data = Vec::with_capacity(size); + for _i in 0..size { + data.push(RwLock::new(HashMap::>::new())); + } + Locker { + data: Arc::new(data), + } + } + + pub fn get( + &self, + thread_id: usize, + org_id: &str, + stream_name: &str, + stream_type: StreamType, + key: &str, + ) -> Option> { + let full_key = format!("{}_{}_{}_{}", org_id, stream_name, stream_type, key); + let file = match self + .data + .get(thread_id) + .unwrap() + .read() + .unwrap() + .get(&full_key) + { + Some(file) => file.clone(), + None => { + return None; + } + }; + + // check size & ttl + if file.size() >= (CONFIG.limit.max_file_size_on_disk as i64) + || file.expired() <= chrono::Utc::now().timestamp() + { + file.sync(); + self.data + .get(thread_id) + .unwrap() + .write() + .unwrap() + .remove(&full_key); + return None; + } + + Some(file) + } + + pub fn create( + &self, + thread_id: usize, + org_id: &str, + stream_name: &str, + stream_type: StreamType, + key: &str, + ) -> Arc { + let full_key = format!("{}_{}_{}_{}", org_id, stream_name, stream_type, key); + let file = Arc::new(RwFile::new( + thread_id, + org_id, + stream_name, + stream_type, + key, + )); + let mut data = self.data.get(thread_id).unwrap().write().unwrap(); + data.insert(full_key, file.clone()); + file + } + + pub fn get_or_create( + &self, + thread_id: usize, + org_id: &str, + stream_name: &str, + stream_type: StreamType, + key: &str, + ) -> Arc { + if let Some(file) = self.get(thread_id, org_id, stream_name, stream_type, key) { + file + } else { + self.create(thread_id, org_id, stream_name, stream_type, key) + } + } + + pub fn check_in_use( + &self, + org_id: &str, + stream_name: &str, + stream_type: StreamType, + file_name: &str, + ) -> bool { + let columns = file_name.split('_').collect::>(); + let thread_id: usize = columns[0].parse().unwrap(); + let key = columns[1..columns.len() - 1].join("_"); + if let Some(file) = self.get(thread_id, org_id, stream_name, stream_type, &key) { + if file.name() == file_name { + return true; + } + } + false + } +} + +impl RwFile { + fn new( + thread_id: usize, + org_id: &str, + stream_name: &str, + stream_type: StreamType, + key: &str, + ) -> RwFile { + let mut dir_path = format!( + "{}files/{}/{}/{}/", + &CONFIG.common.data_wal_dir, org_id, stream_type, stream_name + ); + // Hack for file_list + let file_list_prefix = "/files//file_list//"; + if dir_path.contains(file_list_prefix) { + dir_path = dir_path.replace(file_list_prefix, "/file_list/"); + } + let id = ider::generate(); + let file_name = format!( + "{}_{}_{}{}", + thread_id, key, id, &CONFIG.common.file_ext_json + ); + let file_path = format!("{}{}", dir_path, file_name); + std::fs::create_dir_all(&dir_path).unwrap(); + + let f = OpenOptions::new() + .write(true) + .create(true) + .append(true) + .open(file_path) + .unwrap(); + RwFile { + file: RwLock::new(f), + dir: dir_path, + name: file_name, + expired: chrono::Utc::now().timestamp() + CONFIG.limit.max_file_retention_time as i64, + } + } + + pub fn write(&self, data: &[u8]) { + let mut f = self.file.write().unwrap(); + f.write_all(data).unwrap(); + } + + pub fn sync(&self) { + self.file.write().unwrap().sync_all().unwrap(); + } + + pub fn size(&self) -> i64 { + self.file.read().unwrap().metadata().unwrap().len() as i64 + } + + pub fn name(&self) -> &str { + &self.name + } + + pub fn full_name(&self) -> String { + format!("{}{}", self.dir, self.name) + } + + pub fn expired(&self) -> i64 { + self.expired + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_file_loc_with_stream() { + let locker = Locker::new(); + let thread_id = 1; + let org_id = "org1"; + let stream_name = "stream1"; + let stream_type = StreamType::Logs; + let key = "2022_10_17_10"; + let file = locker.get_or_create(thread_id, org_id, stream_name, stream_type, key); + file.write(b"hello world"); + assert_eq!(file.size(), 11); + assert_eq!(file.name().contains(key), true); + assert_eq!(file.expired() > 0, true); + assert_eq!( + locker + .get(1, org_id, stream_name, stream_type, key) + .unwrap() + .name(), + file.name() + ); + } + + #[test] + fn test_file_loc_without_stream() { + let locker = Locker::new(); + let thread_id = 1; + let org_id = ""; + let stream_name = ""; + let stream_type = StreamType::Filelist; + let key = "2022_10_17_10"; + let file = locker.get_or_create(thread_id, org_id, stream_name, stream_type, key); + file.write(b"hello world"); + assert_eq!(file.size(), 11); + assert_eq!(file.name().contains(key), true); + assert_eq!(file.expired() > 0, true); + assert_eq!( + locker + .get(1, org_id, stream_name, stream_type, key) + .unwrap() + .name(), + file.name() + ); + } +} diff --git a/src/infra/ider.rs b/src/infra/ider.rs new file mode 100644 index 0000000000..e7a7d2015a --- /dev/null +++ b/src/infra/ider.rs @@ -0,0 +1,21 @@ +use super::cluster; +use once_cell::sync::Lazy; +use snowflake::SnowflakeIdGenerator; + +static mut IDER: Lazy = + Lazy::new(|| unsafe { SnowflakeIdGenerator::new(1, cluster::LOCAL_NODE_ID) }); + +pub fn generate() -> String { + let id = unsafe { IDER.real_time_generate() }; + id.to_string() +} + +#[cfg(test)] +mod test_utils { + use super::*; + #[test] + fn test_generate_id() { + let id = generate(); + assert_ne!(id, ""); + } +} diff --git a/src/infra/mod.rs b/src/infra/mod.rs new file mode 100644 index 0000000000..8e411b9bc1 --- /dev/null +++ b/src/infra/mod.rs @@ -0,0 +1,8 @@ +pub mod cache; +pub mod cluster; +pub mod config; +pub mod db; +pub mod errors; +pub mod file_lock; +pub mod ider; +pub mod storage; diff --git a/src/infra/storage/local.rs b/src/infra/storage/local.rs new file mode 100644 index 0000000000..226875af84 --- /dev/null +++ b/src/infra/storage/local.rs @@ -0,0 +1,56 @@ +use async_trait::async_trait; +use std::{fs, io::Read, path::Path}; + +use super::FileStorage; +use crate::common::file::put_file_contents; +use crate::infra::config::CONFIG; + +pub struct Local {} + +#[async_trait] +impl FileStorage for Local { + async fn list(&self, prefix: &str) -> Result, anyhow::Error> { + let prefix = format!("{}{}", CONFIG.common.data_stream_dir, prefix); + let root_path = Path::new(&CONFIG.common.data_stream_dir).to_str().unwrap(); + let mut files = Vec::new(); + for entry in walkdir::WalkDir::new(prefix) + .follow_links(true) + .into_iter() + .filter_map(|e| e.ok()) + { + if entry.file_type().is_dir() { + continue; + } + let f_path = entry.path().to_str().unwrap(); + let f_path = f_path[root_path.len()..].to_string(); + files.push(f_path); + } + Ok(files) + } + + async fn get(&self, file: &str) -> Result { + let file = format!("{}{}", CONFIG.common.data_stream_dir, file); + let mut file = fs::File::open(file)?; + let mut data = Vec::new(); + file.read_to_end(&mut data)?; + Ok(bytes::Bytes::from(data)) + } + + async fn put(&self, file: &str, data: bytes::Bytes) -> Result<(), anyhow::Error> { + let file = format!("{}{}", CONFIG.common.data_stream_dir, file); + let file_path = Path::new(&file); + fs::create_dir_all(file_path.parent().unwrap()).unwrap(); + match put_file_contents(&file, &data) { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } + } + + async fn del(&self, file: &str) -> Result<(), anyhow::Error> { + let file = format!("{}{}", CONFIG.common.data_stream_dir, file); + match fs::remove_file(file) { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } + } +} diff --git a/src/infra/storage/mod.rs b/src/infra/storage/mod.rs new file mode 100644 index 0000000000..2170472036 --- /dev/null +++ b/src/infra/storage/mod.rs @@ -0,0 +1,66 @@ +use async_trait::async_trait; +use bytes::Bytes; +use chrono::{TimeZone, Utc}; + +use crate::{common::utils::is_local_disk_storage, infra::ider, meta::StreamType}; + +pub mod local; +pub mod s3; + +#[async_trait] +pub trait FileStorage: Sync + 'static { + async fn list(&self, prefix: &str) -> Result, anyhow::Error>; + async fn get(&self, file: &str) -> Result; + async fn put(&self, file: &str, data: Bytes) -> Result<(), anyhow::Error>; + async fn del(&self, file: &str) -> Result<(), anyhow::Error>; +} + +lazy_static! { + pub static ref DEFAULT: Box = default(); +} + +pub fn default() -> Box { + match is_local_disk_storage() { + true => Box::new(local::Local {}), + false => Box::new(s3::S3 {}), + } +} + +pub fn generate_partioned_file_key( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + min_ts: i64, + extn: &str, +) -> (std::string::String, std::string::String) { + let id = ider::generate(); + let time = Utc.timestamp_nanos(min_ts * 1000); + + let prefix = if stream_type.eq(&StreamType::Metadata) { + time.format("%Y/00/00/00").to_string() + } else { + time.format("%Y/%m/%d/%H").to_string() + }; + ( + format!("{}/{}/{}/{}/", org_id, stream_type, stream_name, prefix), + format!("{}{}", id, extn), + ) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::infra::config::CONFIG; + #[test] + fn test_generate_partioned_file_key() { + let file_key = generate_partioned_file_key( + "org", + "stream_name", + StreamType::Logs, + 1665580243211047, + &CONFIG.common.file_ext_parquet, + ); + assert_eq!(file_key.0.as_str(), "org/logs/stream_name/2022/10/12/13/"); + assert!(file_key.1.as_str().contains(".parquet")); + } +} diff --git a/src/infra/storage/s3.rs b/src/infra/storage/s3.rs new file mode 100644 index 0000000000..694dea9f7f --- /dev/null +++ b/src/infra/storage/s3.rs @@ -0,0 +1,151 @@ +use async_once::AsyncOnce; +use async_trait::async_trait; +use aws_config::{default_provider::credentials::DefaultCredentialsChain, SdkConfig}; +use aws_sdk_s3::{Client, Credentials, Endpoint, Region}; +use std::{sync::Arc, time::Duration}; + +use super::FileStorage; +use crate::common::utils::is_local_disk_storage; +use crate::infra::config::CONFIG; + +lazy_static! { + static ref S3CONFIG: AsyncOnce>> = + AsyncOnce::new(async { init_s3config().await }); +} + +pub struct S3 {} + +#[async_trait] +impl FileStorage for S3 { + async fn list(&self, prefix: &str) -> Result, anyhow::Error> { + let mut files = Vec::new(); + let s3config = S3CONFIG.get().await.clone().unwrap().clone(); + let client = Client::new(&s3config); + let mut start_after: String = "".to_string(); + loop { + let objects = client + .list_objects_v2() + .bucket(&CONFIG.s3.bucket_name) + .prefix(prefix) + .start_after(&start_after) + .send() + .await; + if objects.is_err() { + return Err(anyhow::anyhow!("{}", objects.err().unwrap())); + } + let objects = objects.unwrap(); + + for obj in objects.contents().unwrap_or_default() { + start_after = obj.key().unwrap().to_string(); + files.push(start_after.clone()); + } + + if objects.key_count < 1000 { + break; + } + } + Ok(files) + } + + async fn get(&self, file: &str) -> Result { + let s3config = S3CONFIG.get().await.clone().unwrap(); + let client = Client::new(&s3config); + let object = match client + .get_object() + .bucket(&CONFIG.s3.bucket_name) + .key(file) + .send() + .await + { + Ok(object) => object, + Err(e) => { + log::error!("s3 get object {} error: {:?}", file, e); + return Err(anyhow::anyhow!("s3 get object {} error: {:?}", file, e)); + } + }; + Ok(object.body.collect().await.unwrap().into_bytes()) + } + + async fn put(&self, file: &str, data: bytes::Bytes) -> Result<(), anyhow::Error> { + let s3config = S3CONFIG.get().await.clone().unwrap(); + let client = Client::new(&s3config); + let result = client + .put_object() + .bucket(&CONFIG.s3.bucket_name) + .key(file) + .body(data.into()) + .send() + .await; + match result { + Ok(_output) => { + log::info!("s3 File upload success: {}", file); + Ok(()) + } + Err(err) => { + log::error!("s3 File upload error: {:?}", err); + Err(anyhow::anyhow!(err)) + } + } + } + + async fn del(&self, file: &str) -> Result<(), anyhow::Error> { + let s3config = S3CONFIG.get().await.clone().unwrap(); + let client = Client::new(&s3config); + let result = client + .delete_object() + .bucket(&CONFIG.s3.bucket_name) + .key(file) + .send() + .await; + match result { + Ok(_output) => { + log::info!("s3 File delete success: {}", file); + Ok(()) + } + Err(err) => { + log::error!("s3 File delete error: {:?}", err); + Err(anyhow::anyhow!(err)) + } + } + } +} + +async fn init_s3config() -> Option> { + if is_local_disk_storage() { + return None; + } + + let mut s3config = aws_config::from_env(); + + if !CONFIG.s3.server_url.is_empty() { + s3config = s3config.endpoint_resolver(Endpoint::immutable( + CONFIG + .s3 + .server_url + .parse() + .expect("invalid ZIOX_S3_SERVER_URL"), + )); + } + if !CONFIG.s3.region_name.is_empty() { + s3config = s3config.region(Region::new(&CONFIG.s3.region_name)); + } + if !CONFIG.s3.access_key.is_empty() { + let creds = Credentials::new( + &CONFIG.s3.access_key, + &CONFIG.s3.secret_key, + None, + None, + "s3", + ); + s3config = s3config.credentials_provider(creds); + } else { + let creds = DefaultCredentialsChain::builder() + .load_timeout(Duration::from_secs(10)) + .build() + .await; + s3config = s3config.credentials_provider(creds); + } + + let s3config = s3config.load().await; + Some(Arc::new(s3config)) +} diff --git a/src/job/alert_manager.rs b/src/job/alert_manager.rs new file mode 100644 index 0000000000..4472a6c957 --- /dev/null +++ b/src/job/alert_manager.rs @@ -0,0 +1,20 @@ +use tokio::time; + +use crate::infra::cluster::is_alert_manager; +use crate::service; + +pub async fn run() -> Result<(), anyhow::Error> { + if !is_alert_manager(&super::cluster::LOCAL_NODE_ROLE) { + return Ok(()); + } + // should run it every 10 seconds + let mut interval = time::interval(time::Duration::from_secs(10)); + interval.tick().await; // trigger the first run + loop { + interval.tick().await; + let ret = service::alert_manager::run().await; + if ret.is_err() { + log::error!("[ALERT MANAGER] run error: {}", ret.err().unwrap()); + } + } +} diff --git a/src/job/compact.rs b/src/job/compact.rs new file mode 100644 index 0000000000..cca6f3a5cc --- /dev/null +++ b/src/job/compact.rs @@ -0,0 +1,24 @@ +use tokio::time; + +use crate::infra::cluster::is_compactor; +use crate::infra::config::CONFIG; +use crate::service; + +pub async fn run() -> Result<(), anyhow::Error> { + if !is_compactor(&super::cluster::LOCAL_NODE_ROLE) { + return Ok(()); + } + if !CONFIG.compact.enabled { + return Ok(()); + } + // should run it every hour + let mut interval = time::interval(time::Duration::from_secs(CONFIG.compact.interval)); + interval.tick().await; // trigger the first run + loop { + interval.tick().await; + let ret = service::compact::run().await; + if ret.is_err() { + log::error!("[COMPACTOR] run error: {}", ret.err().unwrap()); + } + } +} diff --git a/src/job/file_list.rs b/src/job/file_list.rs new file mode 100644 index 0000000000..2134f92a38 --- /dev/null +++ b/src/job/file_list.rs @@ -0,0 +1,103 @@ +use std::{fs, path::Path}; +use tokio::time; + +use crate::common::file::scan_files; +use crate::infra::cluster; +use crate::infra::config::CONFIG; +use crate::infra::file_lock; +use crate::infra::storage; +use crate::meta::StreamType; + +pub async fn run() -> Result<(), anyhow::Error> { + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok(()); // not an ingester, no need to init job + } + + let mut interval = time::interval(time::Duration::from_secs(CONFIG.limit.file_push_interval)); + interval.tick().await; // trigger the first run + loop { + interval.tick().await; + if let Err(e) = move_file_list_to_storage().await { + log::error!("Error moving file_list to remote: {}", e); + } + } +} + +/* + * upload compressed file_list to storage & delete moved files from local + */ +async fn move_file_list_to_storage() -> Result<(), anyhow::Error> { + let data_dir = Path::new(&CONFIG.common.data_wal_dir) + .canonicalize() + .unwrap(); + + let pattern = format!("{}/file_list/*.json", &CONFIG.common.data_wal_dir); + let files = scan_files(&pattern); + + for file in files { + let local_file = file.to_owned(); + let local_path = Path::new(&file).canonicalize().unwrap(); + let file_path = local_path + .strip_prefix(&data_dir) + .unwrap() + .to_str() + .unwrap(); + let columns = file_path.split('/').collect::>(); + // check file is in use + if columns.len() != 2 { + continue; + } + let file_name = columns[1].to_string(); + + // check the file is using for write + if file_lock::check_in_use("", "", StreamType::Filelist, &file_name) { + continue; + } + log::info!("[JOB] convert file_list: {}", file); + + match upload_file(&local_file, &file_name).await { + Ok(_) => match fs::remove_file(&local_file) { + Ok(_) => {} + Err(e) => { + log::error!( + "[JOB] Failed to remove file_list {}: {}", + local_file, + e.to_string() + ) + } + }, + Err(e) => log::error!("[JOB] Error while uploading file_list to storage {}", e), + } + } + Ok(()) +} + +async fn upload_file(path_str: &str, file_key: &str) -> Result<(), anyhow::Error> { + let mut file = fs::File::open(path_str).unwrap(); + log::info!("[JOB] File_list upload begin: local: {}", path_str); + + let mut encoder = zstd::Encoder::new(Vec::new(), 3)?; + std::io::copy(&mut file, &mut encoder)?; + let compressed_bytes = encoder.finish().unwrap(); + + let file_columns = file_key.split('_').collect::>(); + let new_file_key = format!( + "file_list/{}/{}/{}/{}/{}.zst", + file_columns[1], file_columns[2], file_columns[3], file_columns[4], file_columns[5] + ); + + let storage = &storage::DEFAULT; + let result = storage + .put(&new_file_key, bytes::Bytes::from(compressed_bytes)) + .await; + match result { + Ok(_output) => { + log::info!("[JOB] File_list upload success: {}", new_file_key); + Ok(()) + } + Err(err) => { + log::error!("[JOB] File_list upload error: {:?}", err); + Err(anyhow::anyhow!(err)) + } + } +} diff --git a/src/job/files.rs b/src/job/files.rs new file mode 100644 index 0000000000..af81077e7f --- /dev/null +++ b/src/job/files.rs @@ -0,0 +1,232 @@ +use datafusion::arrow; +use datafusion::arrow::json::reader::infer_json_schema; +use parquet::{arrow::ArrowWriter, file::properties::WriterProperties}; +use std::io::{BufReader, Seek, SeekFrom}; +use std::{fs, path::Path, sync::Arc}; +use tokio::{sync::Semaphore, task, time}; + +use crate::common::file::scan_files; +use crate::common::utils::populate_file_meta; +use crate::infra::cluster; +use crate::infra::config::{get_parquet_compression, CONFIG}; +use crate::infra::file_lock; +use crate::infra::storage; +use crate::infra::storage::generate_partioned_file_key; +use crate::meta::common::FileMeta; +use crate::meta::StreamType; +use crate::service::db; +use crate::service::schema::schema_evolution; + +/// TaskResult (local file path, remote file key, file meta, stream type) +type TaskResult = (String, String, FileMeta, StreamType); + +pub async fn run() -> Result<(), anyhow::Error> { + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok(()); // not an ingester, no need to init job + } + + // create wal dir + fs::create_dir_all(&CONFIG.common.data_wal_dir)?; + + let mut interval = time::interval(time::Duration::from_secs(CONFIG.limit.file_push_interval)); + interval.tick().await; // trigger the first run + loop { + interval.tick().await; + if let Err(e) = move_files_to_storage().await { + log::error!("Error moving files to remote: {}", e); + } + } +} + +/* + * upload compressed files to storage & delete moved files from local + */ +async fn move_files_to_storage() -> Result<(), anyhow::Error> { + let data_dir = Path::new(&CONFIG.common.data_wal_dir) + .canonicalize() + .unwrap(); + + let pattern = format!("{}/files/*/*/*/*.json", &CONFIG.common.data_wal_dir); + let files = scan_files(&pattern); + + // use multiple threads to upload files + let mut tasks: Vec>> = Vec::new(); + + let semaphore = std::sync::Arc::new(Semaphore::new(CONFIG.limit.file_move_thread_num)); + for file in files { + let local_file = file.to_owned(); + let local_path = Path::new(&file).canonicalize().unwrap(); + let file_path = local_path + .strip_prefix(&data_dir) + .unwrap() + .to_str() + .unwrap(); + let columns = file_path.split('/').collect::>(); + // check file is in use + if columns.len() != 5 { + continue; + } + let _ = columns[0].to_string(); + let org_id = columns[1].to_string(); + let stream_type: StreamType = StreamType::from(columns[2]); + let stream_name = columns[3].to_string(); + let file_name = columns[4].to_string(); + + // check the file is using for write + if file_lock::check_in_use(&org_id, &stream_name, stream_type, &file_name) { + // println!("file is using for write, skip, {}", file_name); + continue; + } + log::info!("[JOB] convert file: {}", file); + + let mut partitions = file_name.split('_').collect::>(); + partitions.retain(|&x| x.contains('=')); + let mut partition_key = String::from(""); + for key in partitions { + partition_key.push_str(key); + partition_key.push('/'); + } + + let permit = semaphore.clone().acquire_owned().await.unwrap(); + let task: task::JoinHandle> = + task::spawn(async move { + let ret = upload_file( + &org_id, + &stream_name, + stream_type, + &local_file, + partition_key, + ) + .await; + drop(permit); + match ret { + Ok((key, meta, stream_type)) => Ok((local_file, key, meta, stream_type)), + Err(e) => Err(e), + } + }); + tasks.push(task); + task::yield_now().await; + } + + for task in tasks { + match task.await { + Ok(ret) => match ret { + Ok((path, key, meta, _stream_type)) => { + match db::file_list::local::set(&key, meta, false).await { + Ok(_) => match fs::remove_file(&path) { + Ok(_) => {} + Err(e) => { + log::error!( + "[JOB] Failed to remove file {}: {}", + path, + e.to_string() + ) + } + }, + Err(e) => log::error!( + "[JOB] Failed write file meta:{}, error: {}", + path, + e.to_string() + ), + } + } + Err(e) => log::error!("[JOB] Error while uploading file to storage {}", e), + }, + Err(e) => log::error!("[JOB] Error while uploading file to storage {}", e), + }; + } + + Ok(()) +} + +async fn upload_file( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + path_str: &str, + partition_key: String, +) -> Result<(String, FileMeta, StreamType), anyhow::Error> { + let mut file = fs::File::open(path_str).unwrap(); + let file_meta = file.metadata().unwrap(); + let file_size = file_meta.len(); + log::info!("[JOB] File upload begin: local: {}", path_str); + + let mut schema_reader = BufReader::new(&file); + let inferred_schema = infer_json_schema(&mut schema_reader, Some(4096)).unwrap(); + let arrow_schema = Arc::new(inferred_schema.clone()); + drop(schema_reader); + + file.seek(SeekFrom::Start(0)).unwrap(); + let mut json_reader = BufReader::new(&file); + let json = arrow::json::Reader::new( + &mut json_reader, + arrow_schema.clone(), + arrow::json::reader::DecoderOptions::new(), + ); + + let mut buf_parquet = Vec::new(); + let props = WriterProperties::builder() + .set_compression(get_parquet_compression()) + .set_write_batch_size(4096) + .set_data_pagesize_limit(1024 * 512) + .set_max_row_group_size(1024 * 1024 * 256); + let writer_props = props.build(); + let mut writer = + ArrowWriter::try_new(&mut buf_parquet, arrow_schema.clone(), Some(writer_props)).unwrap(); + let mut meta_batch = vec![]; + for batch in json { + let batch_write = batch.unwrap(); + writer.write(&batch_write).expect("Writing batch"); + meta_batch.push(batch_write); + } + writer.close().unwrap(); + + //let file_name = path.file_name(); + let mut file_meta = FileMeta { + min_ts: 0, + max_ts: 0, + records: 0, + original_size: file_size, + compressed_size: buf_parquet.len() as u64, + }; + + populate_file_meta(arrow_schema.clone(), vec![meta_batch], &mut file_meta).await; + + schema_evolution( + org_id, + stream_name, + stream_type, + inferred_schema, + file_meta.min_ts, + ) + .await; + + let new_file = generate_partioned_file_key( + org_id, + stream_name, + stream_type, + file_meta.min_ts, + &CONFIG.common.file_ext_parquet, + ); + + let new_file_key = if partition_key.eq("") { + format!("files/{}{}", new_file.0, new_file.1) + } else { + format!("files/{}{}{}", new_file.0, partition_key, new_file.1) + }; + + let storage = &storage::DEFAULT; + let result = storage + .put(&new_file_key, bytes::Bytes::from(buf_parquet)) + .await; + match result { + Ok(_output) => { + log::info!("[JOB] File upload success: {}", new_file_key); + Ok((new_file_key, file_meta, stream_type)) + } + Err(err) => { + log::error!("[JOB] File upload error: {:?}", err); + Err(anyhow::anyhow!(err)) + } + } +} diff --git a/src/job/mod.rs b/src/job/mod.rs new file mode 100644 index 0000000000..eaf6a33372 --- /dev/null +++ b/src/job/mod.rs @@ -0,0 +1,72 @@ +use crate::infra::cluster; +use crate::infra::config::CONFIG; +use crate::meta::user::User; +use crate::service::{db, users}; + +mod alert_manager; +mod compact; +mod file_list; +mod files; +mod prom; + +pub async fn init() -> Result<(), anyhow::Error> { + let res = db::user::get_root_user(&CONFIG.auth.username).await; + if res.is_err() || res.unwrap().is_none() { + let _ = users::post_user( + "dummy", + User { + name: CONFIG.auth.username.clone(), + password: CONFIG.auth.password.clone(), + role: crate::meta::user::Role::Root, + salt: String::new(), + }, + ) + .await; + } + tokio::task::spawn(async move { db::transform::watch().await }); + tokio::task::spawn(async move { db::user::watch().await }); + tokio::task::spawn(async move { db::schema::watch().await }); + tokio::task::spawn(async move { db::watch_prom_cluster_leader().await }); + tokio::task::spawn(async move { db::alerts::watch().await }); + tokio::task::spawn(async move { db::triggers::watch().await }); + tokio::task::yield_now().await; // yield let other tasks run + db::transform::cache().await?; + db::user::cache().await?; + db::schema::cache().await?; + db::cache_prom_cluster_leader().await?; + db::alerts::cache().await?; + db::triggers::cache().await?; + + // cache file list + db::file_list::local::cache().await?; + db::file_list::remote::cache().await?; + + // Shouldn't serve request until initialization finishes + log::info!("[TRACE] Start job"); + + // compactor run + tokio::task::spawn(async move { compact::run().await }); + + // alert manager run + tokio::task::spawn(async move { alert_manager::run().await }); + + // ingester run + tokio::task::spawn(async move { files::run().await }); + tokio::task::spawn(async move { file_list::run().await }); + tokio::task::spawn(async move { prom::run().await }); + + Ok(()) +} + +#[cfg(test)] +mod test_utils { + use super::*; + use std::env; + #[actix_web::test] + async fn test_init() { + env::set_var("ZIOX_LOCAL_MODE", "true"); + env::set_var("ZIOX_NODE_ROLE", "all"); + let _ = init().await; + //assert_eq!(fs::metadata(&CONFIG.common.data_wal_dir).is_ok(), true) + } +} diff --git a/src/job/prom.rs b/src/job/prom.rs new file mode 100644 index 0000000000..176254ccf9 --- /dev/null +++ b/src/job/prom.rs @@ -0,0 +1,32 @@ +use tokio::time::{self, Duration}; + +use crate::infra::cluster; +use crate::infra::config::{CONFIG, METRIC_CLUSTER_LEADER}; +use crate::service::db; + +pub async fn run() -> Result<(), anyhow::Error> { + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok(()); // not an ingester, no need to init job + } + + if !CONFIG.common.metrics_dedup_enabled { + return Ok(()); + } + + let mut interval = time::interval(Duration::from_secs( + CONFIG.limit.metrics_leader_push_interval, + )); + interval.tick().await; // trigger the first run + loop { + interval.tick().await; + let leaders = METRIC_CLUSTER_LEADER.clone(); + for item in leaders.iter() { + // log::info!("Cluster leader for {:?} --> {:?}", item.key(), item.value()); + let result = db::set_prom_cluster_leader(item.key(), item.value()).await; + match result { + Ok(_) => log::info!("Successfully updated leader to etcd "), + Err(err) => log::error!("error updating leader to etcd {}", err), + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000000..2044fb0173 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,9 @@ +pub mod common; +pub mod handler; +pub mod infra; +pub mod job; +pub mod meta; +pub mod service; + +#[macro_use] +extern crate lazy_static; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000000..f977bcbf65 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,180 @@ +use actix_web::{middleware, web, App, HttpServer}; +use actix_web_opentelemetry::RequestTracing; +use actix_web_prometheus::PrometheusMetricsBuilder; +use opentelemetry::sdk::propagation::TraceContextPropagator; +use opentelemetry::sdk::{trace as sdktrace, Resource}; +use opentelemetry::KeyValue; +use opentelemetry_otlp::WithExportConfig; +use opentelemetry_proto::tonic::collector::trace::v1::trace_service_server::TraceServiceServer; +use prometheus::{opts, GaugeVec}; +use std::collections::HashMap; +use std::net::SocketAddr; +use std::sync::atomic::{AtomicU8, Ordering}; +use std::sync::Arc; +use std::time::Duration; +use tokio::sync::oneshot; +use tonic::codec::CompressionEncoding; +use tracing_subscriber::prelude::*; +use tracing_subscriber::Registry; +use zinc_oxide::handler::grpc::auth::check_auth; +use zinc_oxide::handler::grpc::cluster_rpc::event_server::EventServer; +use zinc_oxide::handler::grpc::cluster_rpc::search_server::SearchServer; +use zinc_oxide::handler::grpc::request::{event::Eventer, search::Searcher, traces::TraceServer}; +use zinc_oxide::handler::http::router::get_routes; +use zinc_oxide::infra::cluster; +use zinc_oxide::infra::config::CONFIG; +use zinc_oxide::service::router; + +#[cfg(feature = "mimalloc")] +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + +#[tokio::main] +async fn main() -> Result<(), anyhow::Error> { + if CONFIG.common.tracing_enabled { + let service_name = format!("zinc-oxide/{}", CONFIG.common.instance_name); + opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new()); + let mut headers = HashMap::new(); + headers.insert( + CONFIG.common.tracing_header_key.clone(), + CONFIG.common.tracing_header_value.clone(), + ); + let tracer = opentelemetry_otlp::new_pipeline() + .tracing() + .with_exporter( + opentelemetry_otlp::new_exporter() + .http() + .with_endpoint(&CONFIG.common.otel_otlp_url) + .with_headers(headers), + ) + .with_trace_config(sdktrace::config().with_resource(Resource::new(vec![ + KeyValue::new("service.name", service_name), + KeyValue::new("deployment_type", "k8s"), + ]))) + .install_batch(opentelemetry::runtime::Tokio)?; + + Registry::default() + .with(tracing_subscriber::EnvFilter::new(&CONFIG.log.level)) + .with(tracing_subscriber::fmt::layer()) + .with(tracing_opentelemetry::layer().with_tracer(tracer)) + .init(); + } else { + env_logger::init_from_env(env_logger::Env::new().default_filter_or(&CONFIG.log.level)); + } + + // init jobs + // it must be initialized before the server starts + let (tx, rx) = oneshot::channel(); + tokio::task::spawn(async move { + cluster::register_and_keepalive() + .await + .unwrap_or_else(|e| panic!("cluster init failed: {}", e)); + zinc_oxide::job::init() + .await + .unwrap_or_else(|e| panic!("job init failed: {}", e)); + tx.send(true).unwrap(); + }); + + // gRPC server + rx.await.unwrap(); + if !router::is_router() { + let gaddr: SocketAddr = format!("0.0.0.0:{}", CONFIG.grpc.port).parse()?; + let searcher = Searcher::default(); + let search_svc = SearchServer::new(searcher) + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + let eventer = Eventer::default(); + let event_svc = EventServer::new(eventer) + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + let tracer = TraceServer::default(); + let trace_svc = TraceServiceServer::new(tracer); + + tokio::task::spawn(async move { + log::info!("starting gRPC server at {}", gaddr); + tonic::transport::Server::builder() + .layer(tonic::service::interceptor(check_auth)) + .add_service(search_svc) + .add_service(event_svc) + .add_service(trace_svc) + .serve(gaddr) + .await + .unwrap_or_else(|e| panic!("gRPC server failed: {}", e)); + }); + } + + // let node online + let _ = cluster::set_online().await; + + // metrics + let mut labels = HashMap::new(); + labels.insert("hostname".to_string(), CONFIG.common.instance_name.clone()); + labels.insert("role".to_string(), CONFIG.common.node_role.clone()); + let prometheus = PrometheusMetricsBuilder::new("zinc_oxide") + .endpoint("/metrics") + .const_labels(labels) + .build() + .unwrap(); + let stats_opts = + opts!("ingest_stats", "Summary ingestion stats metric").namespace("zinc_oxide"); + let stats = GaugeVec::new(stats_opts, &["org", "name", "field"]).unwrap(); + prometheus + .registry + .register(Box::new(stats.clone())) + .unwrap(); + + // HTTP server + let thread_id = Arc::new(AtomicU8::new(0)); + let haddr: SocketAddr = format!("0.0.0.0:{}", CONFIG.http.port).parse()?; + if router::is_router() { + HttpServer::new(move || { + log::info!("starting HTTP server at: {}", haddr); + App::new() + .default_service(web::route().to(router::dispatch)) + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) // size is in bytes + .app_data(web::Data::new( + awc::Client::builder() + .timeout(Duration::from_secs(CONFIG.route.timeout)) + .finish(), + )) + .wrap(middleware::Logger::default()) + .wrap(RequestTracing::new()) + .wrap(prometheus.clone()) + }) + .bind(haddr)? + .run() + .await?; + } else { + HttpServer::new(move || { + let local_id = thread_id.load(Ordering::SeqCst) as usize; + if CONFIG.common.feature_per_thread_lock { + thread_id.fetch_add(1, Ordering::SeqCst); + } + log::info!( + "starting HTTP server at: {}, thread_id: {}", + haddr, + local_id + ); + App::new() + .configure(get_routes) + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) // size is in bytes + .app_data(web::Data::new(stats.clone())) + .app_data(web::Data::new(local_id)) + .wrap(middleware::Logger::default()) + .wrap(RequestTracing::new()) + .wrap(prometheus.clone()) + }) + .bind(haddr)? + .run() + .await?; + }; + + // leave the cluster + let _ = cluster::leave().await; + + log::info!("server stopped"); + + Ok(()) +} diff --git a/src/meta/alert.rs b/src/meta/alert.rs new file mode 100644 index 0000000000..91d2717bd6 --- /dev/null +++ b/src/meta/alert.rs @@ -0,0 +1,196 @@ +use super::search::Query; +use serde::{Deserialize, Serialize}; +use serde_json::{Map, Value}; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Condition { + pub column: String, + pub operator: AllOperator, + #[serde(default)] + pub ignore_case: Option, + pub value: serde_json::Value, + pub is_numeric: Option, +} + +impl Evaluate for Condition { + fn evaluate(&self, row: Map) -> bool { + if !row.contains_key(&self.column) { + return false; + }; + + let evaluate_numeric = if self.is_numeric.is_some() { + self.is_numeric.unwrap() + } else { + matches!(row.get(&self.column).unwrap(), serde_json::Value::Number(_)) + }; + + if evaluate_numeric { + let number = match row.get(&self.column).expect("column exists") { + serde_json::Value::Number(number) => number, + _ => unreachable!("please make sure right value for is_numeric is set trigger"), + }; + + match self.operator { + AllOperator::EqualTo => number.as_f64().unwrap() == self.value.as_f64().unwrap(), + AllOperator::NotEqualTo => number.as_f64().unwrap() != self.value.as_f64().unwrap(), + AllOperator::GreaterThan => number.as_f64().unwrap() > self.value.as_f64().unwrap(), + AllOperator::GreaterThanEquals => { + number.as_f64().unwrap() >= self.value.as_f64().unwrap() + } + AllOperator::LessThan => number.as_f64().unwrap() < self.value.as_f64().unwrap(), + AllOperator::LessThanEquals => { + number.as_f64().unwrap() <= self.value.as_f64().unwrap() + } + _ => false, + } + } else { + let string = match row.get(&self.column).expect("column exists") { + serde_json::Value::String(s) => s, + _ => unreachable!("please make sure right value for is_numeric is set trigger"), + }; + + if self.ignore_case.unwrap_or_default() { + match self.operator { + AllOperator::EqualTo => { + string.eq_ignore_ascii_case(self.value.as_str().unwrap()) + } + AllOperator::NotEqualTo => { + !string.eq_ignore_ascii_case(self.value.as_str().unwrap()) + } + AllOperator::Contains => string + .to_ascii_lowercase() + .contains(&self.value.as_str().unwrap().to_ascii_lowercase()), + AllOperator::NotContains => !string + .to_ascii_lowercase() + .contains(&self.value.as_str().unwrap().to_ascii_lowercase()), + _ => false, + } + } else { + match self.operator { + AllOperator::EqualTo => string.eq(self.value.as_str().unwrap()), + AllOperator::NotEqualTo => !string.eq(self.value.as_str().unwrap()), + AllOperator::Contains => string.contains(self.value.as_str().unwrap()), + AllOperator::NotContains => !string.contains(self.value.as_str().unwrap()), + _ => false, + } + } + } + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AllOperator { + #[serde(alias = "=")] + EqualTo, + #[serde(alias = "!=")] + NotEqualTo, + #[serde(alias = ">")] + GreaterThan, + #[serde(alias = ">=")] + GreaterThanEquals, + #[serde(alias = "<")] + LessThan, + #[serde(alias = "<=")] + LessThanEquals, + Contains, + NotContains, +} + +impl Default for AllOperator { + fn default() -> Self { + Self::EqualTo + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Alert { + #[serde(default)] + pub name: String, + #[serde(default)] + pub stream: String, + pub query: Option, + pub condition: Condition, + pub duration: i64, + pub frequency: i64, + pub time_between_alerts: i64, + pub destination: String, + #[serde(default)] + pub is_ingest_time: bool, +} + +impl PartialEq for Alert { + fn eq(&self, other: &Self) -> bool { + self.name == other.name && self.stream == other.stream + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct AlertList { + pub list: Vec, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Trigger { + #[serde(default)] + pub timestamp: i64, + #[serde(default)] + pub is_valid: bool, + #[serde(default)] + pub alert_name: String, + #[serde(default)] + pub stream: String, + #[serde(default)] + pub org: String, + #[serde(default)] + pub last_sent_at: i64, + #[serde(default)] + pub count: i64, + #[serde(default)] + pub is_ingest_time: bool, +} + +impl Default for Trigger { + fn default() -> Self { + Trigger { + timestamp: 0, + is_valid: true, + alert_name: String::new(), + stream: String::new(), + org: String::new(), + last_sent_at: 0, + count: 0, + is_ingest_time: false, + } + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct TriggerTimer { + #[serde(default)] + pub updated_at: i64, + #[serde(default)] + pub expires_at: i64, +} + +pub trait Evaluate { + fn evaluate(&self, row: Map) -> bool; +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_evaluate() { + let condition = Condition { + column: "occurance".to_owned(), + operator: AllOperator::GreaterThanEquals, + ignore_case: None, + value: serde_json::json!(5), + is_numeric: None, + }; + let row = serde_json::json!({"Country":"USA","occurance": 10}); + condition.evaluate(row.as_object().unwrap().clone()); + } +} diff --git a/src/meta/common.rs b/src/meta/common.rs new file mode 100644 index 0000000000..ac7fbd77c9 --- /dev/null +++ b/src/meta/common.rs @@ -0,0 +1,67 @@ +use super::StreamType; +use crate::common::json; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +pub struct FileKey { + pub key: String, + pub meta: FileMeta, + pub deleted: bool, +} + +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +pub struct FileDescriptor { + pub meta: FileMeta, + pub file_type: StreamType, +} + +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +pub struct FileMeta { + pub min_ts: i64, // microseconds + pub max_ts: i64, // microseconds + pub records: u64, + pub original_size: u64, + pub compressed_size: u64, +} + +impl From<&str> for FileMeta { + fn from(data: &str) -> Self { + json::from_str::(data).unwrap() + } +} + +impl From for Vec { + fn from(value: FileMeta) -> Vec { + serde_json::to_vec(&value).unwrap() + } +} + +impl From for String { + fn from(data: FileMeta) -> Self { + json::to_string(&data).unwrap() + } +} + +impl From for bytes::Bytes { + fn from(value: FileMeta) -> bytes::Bytes { + serde_json::to_vec(&value).unwrap().into() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_file_meta() { + let file_meta = FileMeta { + min_ts: 100, + max_ts: 200, + records: 1000, + original_size: 10000, + compressed_size: 150, + }; + let file_meta_str = json::to_string(&file_meta).unwrap(); + assert_eq!(FileMeta::try_from(file_meta_str.as_str()), Ok(file_meta)); + } +} diff --git a/src/meta/dashboards.rs b/src/meta/dashboards.rs new file mode 100644 index 0000000000..4c729a095c --- /dev/null +++ b/src/meta/dashboards.rs @@ -0,0 +1,12 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Dashboard { + pub name: String, + pub details: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct DashboardList { + pub list: Vec, +} diff --git a/src/meta/dialect.rs b/src/meta/dialect.rs new file mode 100644 index 0000000000..1fa49055b3 --- /dev/null +++ b/src/meta/dialect.rs @@ -0,0 +1,40 @@ +use sqlparser::dialect::Dialect; + +#[derive(Debug, Default)] +pub struct ZincDialect; + +// ZincDialect support url as identifier +impl Dialect for ZincDialect { + fn is_identifier_start(&self, ch: char) -> bool { + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch == '_' + } + + // identifier support ':', '/', '?', '&', '=' + fn is_identifier_part(&self, ch: char) -> bool { + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() + || ch.is_ascii_digit() + || [':', '/', '?', '&', '=', '-', '_', '.'].contains(&ch) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use sqlparser::parser::Parser; + + #[test] + fn test_zinc_dilect() { + let sql = { + let url = "https://github.com/zinc-labs/zinc/blob/main/examples/sql/test.csv"; + + let sql = format!( + "select * from {} where Country IN('GRE', 'USA') and _timestamp > '2022-09-02T06:29:11Z' limit 2", + url + ); + + sql + }; + assert!(Parser::parse_sql(&ZincDialect::default(), &sql).is_ok()); + } +} diff --git a/src/meta/http.rs b/src/meta/http.rs new file mode 100644 index 0000000000..250c145ed9 --- /dev/null +++ b/src/meta/http.rs @@ -0,0 +1,57 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct HttpResponse { + pub code: u16, + #[serde(skip_serializing_if = "String::is_empty")] + pub message: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub error: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct ESResponse { + pub took: u16, + pub errors: bool, + // pub items: Vec +} + +impl HttpResponse { + pub fn _new(code: u16, message: String, error: Option) -> Self { + HttpResponse { + code, + message, + error, + } + } + + pub fn message(code: u16, message: String) -> Self { + HttpResponse { + code, + message, + error: None, + } + } + + pub fn error(code: u16, error: Option) -> Self { + HttpResponse { + code, + message: "".to_string(), + error, + } + } +} +#[cfg(test)] +mod test { + use super::*; + use actix_web::http; + #[test] + fn test_err_response() { + let msg = "This is an error response"; + let err = HttpResponse::error( + http::StatusCode::INTERNAL_SERVER_ERROR.into(), + Some(msg.to_string()), + ); + assert_eq!(err.error.unwrap(), msg); + } +} diff --git a/src/meta/ingestion.rs b/src/meta/ingestion.rs new file mode 100644 index 0000000000..228c9bc640 --- /dev/null +++ b/src/meta/ingestion.rs @@ -0,0 +1,51 @@ +use ahash::AHashMap; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct RecordStatus { + pub successful: u32, + pub failed: u32, + #[serde(default)] + #[serde(skip_serializing_if = "String::is_empty")] + pub msg: String, +} + +#[derive(Debug)] +pub struct StreamData { + pub data: AHashMap>, + pub status: RecordStatus, +} + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct StreamStatus { + pub name: String, + #[serde(flatten)] + pub status: RecordStatus, +} + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct IngestionResponse { + pub code: u16, + #[serde(skip_serializing_if = "Vec::is_empty")] + pub status: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + pub error: Option, +} + +impl IngestionResponse { + pub fn new(code: u16, status: Vec) -> Self { + IngestionResponse { + code, + status, + error: None, + } + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct StreamSchemaChk { + pub conforms: bool, + pub has_fields: bool, + pub has_partition_keys: bool, +} diff --git a/src/meta/mod.rs b/src/meta/mod.rs new file mode 100644 index 0000000000..22f62a476b --- /dev/null +++ b/src/meta/mod.rs @@ -0,0 +1,58 @@ +use serde::{Deserialize, Serialize}; +use std::fmt; +use utoipa::ToSchema; + +pub mod alert; +pub mod common; +pub mod dashboards; +pub mod dialect; +pub mod http; +pub mod ingestion; +pub mod prom; +pub mod search; +pub mod service; +pub mod sql; +pub mod stream; +pub mod traces; +pub mod transform; +pub mod user; + +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize, ToSchema)] +pub enum StreamType { + #[default] + #[serde(rename = "logs")] + Logs, + #[serde(rename = "metrics")] + Metrics, + #[serde(rename = "traces")] + Traces, + #[serde(rename = "metadata")] + Metadata, + #[serde(rename = "file_list")] + Filelist, +} + +impl From<&str> for StreamType { + fn from(s: &str) -> Self { + match s.to_lowercase().as_str() { + "logs" => StreamType::Logs, + "metrics" => StreamType::Metrics, + "traces" => StreamType::Traces, + "metadata" => StreamType::Metadata, + "file_list" => StreamType::Filelist, + _ => StreamType::Logs, + } + } +} + +impl fmt::Display for StreamType { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + StreamType::Logs => write!(f, "logs"), + StreamType::Metrics => write!(f, "metrics"), + StreamType::Traces => write!(f, "traces"), + StreamType::Metadata => write!(f, "metadata"), + StreamType::Filelist => write!(f, "file_list"), + } + } +} diff --git a/src/meta/prom.rs b/src/meta/prom.rs new file mode 100644 index 0000000000..20ec22f513 --- /dev/null +++ b/src/meta/prom.rs @@ -0,0 +1,44 @@ +use ahash::AHashMap; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Metric { + pub name: String, + pub value: f64, + #[serde(flatten)] + #[serde(skip_serializing_if = "HashMap::is_empty")] + pub collection: AHashMap, + pub _timestamp: i64, + pub metric_type: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Collection { + pub name: String, + pub value: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct ClusterLeader { + pub name: String, + pub last_received: i64, +} + +impl Metric { + pub fn new( + name: String, + value: f64, + collection: AHashMap, + _timestamp: i64, + metric_type: String, + ) -> Self { + Metric { + name, + value, + collection, + _timestamp, + metric_type, + } + } +} diff --git a/src/meta/search.rs b/src/meta/search.rs new file mode 100644 index 0000000000..6f0c05d762 --- /dev/null +++ b/src/meta/search.rs @@ -0,0 +1,146 @@ +use ahash::AHashMap; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use std::collections::HashMap; + +use crate::common::json::unflatten_json; +use crate::service::search::datafusion::storage::file_list; + +#[derive(Clone, Debug)] +pub struct Session { + pub id: String, + pub data_type: file_list::SessionType, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Request { + pub query: Query, + #[serde(default)] + pub aggs: AHashMap, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Query { + pub sql: String, + #[serde(default)] + pub from: usize, + #[serde(default = "default_size")] + pub size: usize, + #[serde(default)] + pub start_time: i64, + #[serde(default)] + pub end_time: i64, + #[serde(default)] + pub sql_mode: String, + #[serde(default)] + pub track_total_hits: bool, +} + +fn default_size() -> usize { + 10 +} + +impl Default for Query { + fn default() -> Self { + Query { + sql: "".to_string(), + from: 0, + size: 10, + start_time: 0, + end_time: 0, + sql_mode: "context".to_string(), + track_total_hits: false, + } + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Response { + pub took: usize, + pub hits: Vec, + #[serde(skip_serializing_if = "HashMap::is_empty")] + pub aggs: AHashMap>, + pub total: usize, + pub from: usize, + pub size: usize, + #[serde(skip_serializing)] + pub file_count: usize, + pub scan_size: usize, +} + +impl Default for Response { + fn default() -> Self { + Response { + took: 0, + total: 0, + from: 0, + size: 0, + file_count: 0, + scan_size: 0, + hits: Vec::new(), + aggs: AHashMap::new(), + } + } +} + +impl Response { + pub fn new(from: usize, size: usize) -> Self { + Response { + took: 0, + total: 0, + from, + size, + file_count: 0, + scan_size: 0, + hits: Vec::new(), + aggs: AHashMap::new(), + } + } + + pub fn add_hit(&mut self, hit: &Value) { + let hit = unflatten_json(hit); + self.hits.push(hit); + self.total += 1; + } + + pub fn add_agg(&mut self, name: &str, hit: &Value) { + let val = self.aggs.entry(name.to_string()).or_default(); + val.push(hit.to_owned()); + } + + pub fn set_took(&mut self, val: usize) { + self.took = val; + } + + pub fn set_total(&mut self, val: usize) { + self.total = val; + } + + pub fn set_file_count(&mut self, val: usize) { + self.file_count = val; + } + + pub fn set_scan_size(&mut self, val: usize) { + self.scan_size = val; + } +} + +#[cfg(test)] +mod test { + use serde_json::json; + + use super::*; + + #[test] + fn test_response() { + let mut res = Response::default(); + res.set_total(10); + res.set_file_count(5); + let hit = json!({"num":12}); + let mut val_map = serde_json::Map::new(); + val_map.insert("id".to_string(), json!({"id":1})); + res.add_agg("count", &serde_json::Value::Object(val_map)); + res.add_hit(&hit); // total+1 + assert_eq!(res.total, 11); + } +} diff --git a/src/meta/service.rs b/src/meta/service.rs new file mode 100644 index 0000000000..7fe1234e7e --- /dev/null +++ b/src/meta/service.rs @@ -0,0 +1,3 @@ +pub const LOGS: &str = "logs"; +pub const METRICS: &str = "metrics"; +pub const TRACES: &str = "traces"; diff --git a/src/meta/sql.rs b/src/meta/sql.rs new file mode 100644 index 0000000000..d702d9d3ec --- /dev/null +++ b/src/meta/sql.rs @@ -0,0 +1,876 @@ +use anyhow::anyhow; +use chrono::DateTime; +use regex::Regex; +use serde::Serialize; +use sqlparser::{ + ast::{ + BinaryOperator, Expr as SqlExpr, Function, FunctionArg, FunctionArgExpr, + Offset as SqlOffset, OrderByExpr, Select, SelectItem, SetExpr, Statement, TableFactor, + TableWithJoins, Value, + }, + parser::Parser, +}; + +use super::dialect::ZincDialect; +use crate::infra::config::CONFIG; + +/// parsed sql +#[derive(Clone, Debug, Serialize)] +pub struct Sql { + pub(crate) fields: Vec, // projection, select, fields + pub(crate) selection: Option, // where + pub(crate) source: String, // table + pub(crate) order_by: Vec<(String, bool)>, // desc: true / false + pub(crate) offset: usize, + pub(crate) limit: usize, + pub(crate) quick_text: Vec<(String, String, SqlOperator)>, // use text line quick filter + pub(crate) full_text: Vec<(String, SqlOperator)>, // fulltext: value1 and value2, and: true / false + pub(crate) time_range: Option<(i64, i64)>, // time range: min, max +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)] +pub enum SqlOperator { + And, + Or, + Eq, + Neq, + Gt, + Gte, + Lt, + Lte, + Like, +} + +#[derive(Clone, Debug, Serialize)] +pub enum SqlValue { + String(String), + Number(i64), +} + +pub struct Projection<'a>(pub(crate) &'a Vec); +pub struct Quicktext<'a>(pub(crate) &'a Option); +pub struct Fulltext<'a>(pub(crate) &'a Option); +pub struct Timerange<'a>(pub(crate) &'a Option); +pub struct Source<'a>(pub(crate) &'a [TableWithJoins]); +pub struct Order<'a>(pub(crate) &'a OrderByExpr); +pub struct Offset<'a>(pub(crate) &'a SqlOffset); +pub struct Limit<'a>(pub(crate) &'a SqlExpr); + +impl Sql { + pub fn new(sql: &str) -> Result { + let statement = Parser::parse_sql(&ZincDialect::default(), sql); + if statement.is_err() { + return Err(anyhow::anyhow!(statement.err().unwrap())); + } + let statement = &statement.unwrap()[0]; + let sql: Result = statement.try_into(); + if sql.is_err() { + return Err(sql.err().unwrap()); + } + + Ok(sql.unwrap()) + } +} + +impl TryFrom<&Statement> for Sql { + type Error = anyhow::Error; + + fn try_from(sql: &Statement) -> Result { + match sql { + // just take case of: query (select ... from ... where ...) + Statement::Query(q) => { + let offset = q.offset.as_ref(); + let limit = q.limit.as_ref(); + let orders = &q.order_by; + let Select { + from: table_with_joins, + selection, + projection, + group_by: _, + .. + } = match &q.body.as_ref() { + SetExpr::Select(statement) => statement.as_ref(), + _ => return Err(anyhow!("We only support Select Query at the moment")), + }; + + let source = Source(table_with_joins).try_into()?; + + let mut order_by = Vec::new(); + for expr in orders { + order_by.push(Order(expr).try_into()?); + } + + let offset = offset.map_or(0, |v| Offset(v).into()); + let limit = limit.map_or(0, |v| Limit(v).into()); + + let fields = Projection(projection).try_into()?; + let selection = selection.as_ref().cloned(); + + let quick_text: Vec<(String, String, SqlOperator)> = + Quicktext(&selection).try_into()?; + let full_text: Vec<(String, SqlOperator)> = Fulltext(&selection).try_into()?; + let time_range: Option<(i64, i64)> = Timerange(&selection).try_into()?; + + Ok(Sql { + fields, + selection, + source, + order_by, + offset, + limit, + quick_text, + full_text, + time_range, + }) + } + _ => Err(anyhow!("We only support Query at the moment")), + } + } +} + +impl<'a> TryFrom> for Vec { + type Error = anyhow::Error; + + fn try_from(projection: Projection<'a>) -> Result { + let mut fields = Vec::new(); + for item in projection.0 { + match item { + SelectItem::UnnamedExpr(expr) => { + let field = expr.to_string(); + let field = field.trim_matches(|v| v == '\'' || v == '"'); + fields.push(field.to_owned()); + } + SelectItem::Wildcard(_) => { + // we use empty to represent all fields + // fields.push("*".to_string()); + } + // _ => return Err(anyhow!("We only support UnnamedExpr at the moment")), + _ => {} + } + } + Ok(fields) + } +} + +impl<'a> TryFrom> for Vec<(String, SqlOperator)> { + type Error = anyhow::Error; + + fn try_from(selection: Fulltext<'a>) -> Result { + let mut fields = Vec::new(); + match selection.0 { + Some(expr) => parse_expr_for_field(expr, "_all", &mut fields)?, + None => {} + } + + let fields = fields + .iter() + .map(|(_field, value, _op, operator)| { + (value.to_owned().to_string(), operator.to_owned()) + }) + .collect(); + + Ok(fields) + } +} + +impl<'a> TryFrom> for Vec<(String, String, SqlOperator)> { + type Error = anyhow::Error; + + fn try_from(selection: Quicktext<'a>) -> Result { + let mut fields = Vec::new(); + match selection.0 { + Some(expr) => parse_expr_for_field(expr, "*", &mut fields)?, + None => {} + } + + let fields = fields + .iter() + .filter_map(|(field, value, op, operator)| { + if op == &SqlOperator::Eq || op == &SqlOperator::Like { + Some(( + field.to_string(), + value.to_owned().to_string(), + operator.to_owned(), + )) + } else { + None + } + }) + .collect(); + + Ok(fields) + } +} + +impl<'a> TryFrom> for Option<(i64, i64)> { + type Error = anyhow::Error; + + fn try_from(selection: Timerange<'a>) -> Result { + let mut fields = Vec::new(); + match selection.0 { + Some(expr) => parse_expr_for_field(expr, &CONFIG.common.time_stamp_col, &mut fields)?, + None => {} + } + + let mut time_min = Vec::new(); + for (_field, value, op, _operator) in fields.iter() { + match op { + SqlOperator::Gt => match parse_timestamp(value) { + Ok(v) => time_min.push(v.unwrap_or_default()), + Err(e) => return Err(e), + }, + SqlOperator::Gte => match parse_timestamp(value) { + Ok(v) => time_min.push(v.unwrap_or_default()), + Err(e) => return Err(e), + }, + _ => {} + } + } + + let mut time_max = Vec::new(); + for (_field, value, op, _operator) in fields.iter() { + match op { + SqlOperator::Lt => match parse_timestamp(value) { + Ok(v) => time_max.push(v.unwrap_or_default()), + Err(e) => return Err(e), + }, + SqlOperator::Lte => match parse_timestamp(value) { + Ok(v) => time_max.push(v.unwrap_or_default()), + Err(e) => return Err(e), + }, + _ => {} + } + } + + let time_min = { + if !time_min.is_empty() { + time_min.iter().min().unwrap().to_owned() + } else { + 0 + } + }; + let mut time_max = { + if !time_max.is_empty() { + time_max.iter().max().unwrap().to_owned() + } else { + 0 + } + }; + if time_min > 0 && time_max == 0 { + time_max = chrono::Utc::now().timestamp_micros(); + } + + Ok(Some((time_min, time_max))) + } +} + +impl<'a> TryFrom> for String { + type Error = anyhow::Error; + + fn try_from(source: Source<'a>) -> Result { + if source.0.len() != 1 { + return Err(anyhow!("We only support single data source at the moment")); + } + + let table = &source.0[0]; + if !table.joins.is_empty() { + return Err(anyhow!("We do not support joint data source at the moment")); + } + + match &table.relation { + TableFactor::Table { name, .. } => Ok(name.0.first().unwrap().value.clone()), + _ => Err(anyhow!("We only support table")), + } + } +} + +impl<'a> TryFrom> for (String, bool) { + type Error = anyhow::Error; + + fn try_from(o: Order) -> Result { + let name = match &o.0.expr { + SqlExpr::Identifier(id) => id.to_string(), + expr => { + return Err(anyhow!( + "We only support identifier for order by, got {}", + expr + )) + } + }; + + Ok((name, !o.0.asc.unwrap_or(true))) + } +} + +impl std::fmt::Display for SqlValue { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SqlValue::String(s) => write!(f, "{}", s), + SqlValue::Number(n) => write!(f, "{}", n), + } + } +} + +impl<'a> From> for usize { + fn from(offset: Offset) -> Self { + match offset.0 { + SqlOffset { + value: SqlExpr::Value(Value::Number(v, _b)), + .. + } => v.parse().unwrap_or(0), + _ => 0, + } + } +} + +impl<'a> From> for usize { + fn from(l: Limit<'a>) -> Self { + match l.0 { + SqlExpr::Value(Value::Number(v, _b)) => { + let mut v: usize = v.parse().unwrap_or(0); + if v > 10000 { + v = 10000; + } + v + } + _ => 0, + } + } +} + +fn parse_timestamp(s: &SqlValue) -> Result, anyhow::Error> { + match s { + SqlValue::String(s) => { + let s = s.to_lowercase(); + let mut s = s.as_str(); + // println!("timestamp: s: {}", s); + if s.starts_with("to_timestamp") { + if s.starts_with("to_timestamp_seconds(") { + s = s.strip_prefix("to_timestamp_seconds(").unwrap(); + } else if s.starts_with("to_timestamp_micros(") { + s = s.strip_prefix("to_timestamp_micros(").unwrap(); + } else if s.starts_with("to_timestamp_millis(") { + s = s.strip_prefix("to_timestamp_millis(").unwrap(); + } else if s.starts_with("to_timestamp(") { + s = s.strip_prefix("to_timestamp(").unwrap(); + } else { + return Err(anyhow!("Only support timestamp functions [to_timestamp|to_timestamp_millis|to_timestamp_micros|to_timestamp_seconds]")); + } + s = s.strip_suffix(')').unwrap(); + s = s.trim_matches(|v| v == '\'' || v == '"'); + } + let v = DateTime::parse_from_rfc3339(s)?; + Ok(Some(v.timestamp_micros())) + } + SqlValue::Number(n) => { + if *n == 0 { + Ok(None) + } else if *n > (1e18 as i64) { + Ok(Some(*n / 1000)) + } else if *n > (1e15 as i64) { + Ok(Some(*n)) + } else if *n > (1e12 as i64) { + Ok(Some(*n * 1000)) + } else if *n > (1e9 as i64) { + Ok(Some(*n * 1000 * 1000)) + } else { + Err(anyhow!("Invalid timestamp: {}", n)) + } + } + } +} + +fn parse_expr_for_field( + expr: &SqlExpr, + field: &str, + fields: &mut Vec<(String, SqlValue, SqlOperator, SqlOperator)>, +) -> Result<(), anyhow::Error> { + // println!("! parse_expr -> {:?}", expr); + match expr { + SqlExpr::Nested(e) => parse_expr_for_field(e, field, fields)?, + SqlExpr::BinaryOp { left, op, right } => { + let next_op: SqlOperator = op.try_into()?; + + match &**left { + SqlExpr::Nested(e) => parse_expr_for_field(e, field, fields)?, + SqlExpr::BinaryOp { left, op, right } => { + parse_expr_for_field( + &SqlExpr::BinaryOp { + left: left.clone(), + op: op.clone(), + right: right.clone(), + }, + field, + fields, + )?; + } + SqlExpr::Identifier(ident) => { + let nop = op.try_into()?; + let eq = parse_expr_check_field_name(&ident.value, field); + if ident.value == field || (eq && nop == SqlOperator::Eq) { + let val = get_value_from_expr(right); + if val.is_none() { + return Err(anyhow!( + "SqlExpr::Identifier: We only support Identifier at the moment" + )); + } + fields.push((ident.value.to_string(), val.unwrap(), nop, next_op)); + } + } + SqlExpr::Like { + negated, + expr, + pattern, + escape_char, + } => { + parse_expr_like(negated, expr, pattern, escape_char, next_op, field, fields) + .unwrap(); + } + SqlExpr::InList { + expr, + list, + negated, + } => { + parse_expr_in_list(expr, list, negated, field, fields).unwrap(); + } + SqlExpr::Between { + expr, + negated, + low, + high, + } => { + let ret = parse_expr_between(expr, negated, low, high, field, fields); + if ret.is_err() { + return Err(anyhow!("{:?}", ret.err())); + } + } + SqlExpr::Function(f) => { + // Hack _timestamp + if field == CONFIG.common.time_stamp_col { + let f_name = f.to_string().to_lowercase(); + if parse_expr_check_field_name(&f_name, field) { + let val = get_value_from_expr(right); + if val.is_none() { + return Err(anyhow!( + "SqlExpr::Identifier: We only support Identifier at the moment [_timestamp]" + )); + } + fields.push(( + CONFIG.common.time_stamp_col.clone(), + val.unwrap(), + next_op, + next_op, + )); + } + } + let ret = parse_expr_function(f, field, fields); + if ret.is_err() { + return Err(anyhow!("{:?}", ret.err())); + } + } + _ => {} + } + + match &**right { + SqlExpr::Nested(e) => parse_expr_for_field(e, field, fields)?, + SqlExpr::BinaryOp { left, op, right } => { + parse_expr_for_field( + &SqlExpr::BinaryOp { + left: left.clone(), + op: op.clone(), + right: right.clone(), + }, + field, + fields, + )?; + } + SqlExpr::Like { + negated, + expr, + pattern, + escape_char, + } => { + parse_expr_like(negated, expr, pattern, escape_char, next_op, field, fields) + .unwrap(); + } + SqlExpr::InList { + expr, + list, + negated, + } => { + parse_expr_in_list(expr, list, negated, field, fields).unwrap(); + } + SqlExpr::Between { + expr, + negated, + low, + high, + } => { + let ret = parse_expr_between(expr, negated, low, high, field, fields); + if ret.is_err() { + return Err(anyhow!("{:?}", ret.err())); + } + } + SqlExpr::Function(f) => { + let ret = parse_expr_function(f, field, fields); + if ret.is_err() { + return Err(anyhow!("{:?}", ret.err())); + } + } + _ => {} + } + } + SqlExpr::InList { + expr, + list, + negated, + } => { + parse_expr_in_list(expr, list, negated, field, fields).unwrap(); + } + SqlExpr::Between { + expr, + negated, + low, + high, + } => { + let ret = parse_expr_between(expr, negated, low, high, field, fields); + if ret.is_err() { + return Err(anyhow!("{:?}", ret.err())); + } + } + SqlExpr::Function(f) => { + let ret = parse_expr_function(f, field, fields); + if ret.is_err() { + return Err(anyhow!("{:?}", ret.err())); + } + } + _ => {} + } + + Ok(()) +} + +fn parse_expr_check_field_name(s: &str, field: &str) -> bool { + if s == field { + return true; + } + if field == "*" && s != "_all" && s != CONFIG.common.time_stamp_col.clone() { + return true; + } + + // check function, like: to_timestamp_micros("field") + let re = Regex::new(&format!(r##"(?i)\(['"]?{}['"]?\)"##, field)).unwrap(); + if re.is_match(s) { + return true; + } + + false +} + +fn parse_expr_like( + _negated: &bool, + expr: &SqlExpr, + pattern: &SqlExpr, + _escape_char: &Option, + next_op: SqlOperator, + field: &str, + fields: &mut Vec<(String, SqlValue, SqlOperator, SqlOperator)>, +) -> Result<(), anyhow::Error> { + if let SqlExpr::Identifier(ident) = expr { + if parse_expr_check_field_name(&ident.value, field) { + let nop = SqlOperator::Like; + let val = get_value_from_expr(pattern); + if val.is_none() { + return Err(anyhow!( + "SqlExpr::Like: We only support Identifier at the moment" + )); + } + fields.push((ident.value.to_string(), val.unwrap(), nop, next_op)); + } + } + Ok(()) +} + +fn parse_expr_in_list( + expr: &SqlExpr, + list: &[SqlExpr], + negated: &bool, + field: &str, + fields: &mut Vec<(String, SqlValue, SqlOperator, SqlOperator)>, +) -> Result<(), anyhow::Error> { + if *negated { + return Ok(()); + } + let field_name = get_value_from_expr(expr).unwrap().to_string(); + if parse_expr_check_field_name(&field_name, field) { + for val in list.iter() { + fields.push(( + field.to_string(), + SqlValue::String(val.to_string()), + SqlOperator::Eq, + SqlOperator::Or, + )); + } + } + + Ok(()) +} + +fn parse_expr_between( + expr: &SqlExpr, + negated: &bool, + low: &SqlExpr, + high: &SqlExpr, + field: &str, + fields: &mut Vec<(String, SqlValue, SqlOperator, SqlOperator)>, +) -> Result<(), anyhow::Error> { + if *negated { + return Ok(()); + } + let f_name = get_value_from_expr(expr).unwrap().to_string(); + if parse_expr_check_field_name(&f_name, field) { + let min = get_value_from_expr(low).unwrap(); + let max = get_value_from_expr(high).unwrap(); + fields.push((field.to_string(), min, SqlOperator::Gte, SqlOperator::And)); + fields.push((field.to_string(), max, SqlOperator::Lt, SqlOperator::And)); + } + Ok(()) +} + +fn parse_expr_function( + f: &Function, + field: &str, + fields: &mut Vec<(String, SqlValue, SqlOperator, SqlOperator)>, +) -> Result<(), anyhow::Error> { + let f_name = f.name.to_string().to_lowercase(); + if ![ + "strpos", + "contains", + "match", + "time_range", + "to_timestamp", + "to_timestamp_millis", + "to_timestamp_micros", + "to_timestamp_seconds", + ] + .contains(&f_name.as_str()) + { + return Ok(()); + } + + // Hack time_range + if f_name == "time_range" { + return parse_expr_fun_time_range(f, field, fields); + } + + if f.args.len() < 2 { + return Ok(()); + } + + let nop = SqlOperator::And; + let next_op = SqlOperator::And; + let field_name = f.args.get(0).unwrap().to_string(); + let field_name = field_name.trim_matches(|c: char| c == '\'' || c == '"'); + if parse_expr_check_field_name(field_name, field) { + match f.args.get(1).unwrap() { + FunctionArg::Named { name: _name, arg } => { + match arg { + FunctionArgExpr::Expr(expr) => { + let val = get_value_from_expr(expr); + if val.is_none() { + return Err(anyhow!("SqlExpr::Function: We only support Identifier at the moment")); + } + fields.push((field.to_string(), val.unwrap(), nop, next_op)); + } + _ => return Err(anyhow!("We only support String at the moment")), + } + } + FunctionArg::Unnamed(arg) => { + match arg { + FunctionArgExpr::Expr(expr) => { + let val = get_value_from_expr(expr); + if val.is_none() { + return Err(anyhow!("SqlExpr::Function: We only support Identifier at the moment")); + } + fields.push((field.to_string(), val.unwrap(), nop, next_op)); + } + _ => return Err(anyhow!("We only support String at the moment")), + } + } + } + } + + Ok(()) +} + +fn parse_expr_fun_time_range( + f: &Function, + field: &str, + fields: &mut Vec<(String, SqlValue, SqlOperator, SqlOperator)>, +) -> Result<(), anyhow::Error> { + if f.args.len() != 3 { + return Err(anyhow!( + "SqlExpr::Function: time_range function must have 3 arguments" + )); + } + + let next_op = SqlOperator::And; + let field_name = f.args.get(0).unwrap().to_string(); + let field_name = field_name.trim_matches(|c: char| c == '\'' || c == '"'); + if parse_expr_check_field_name(field_name, field) { + let mut vals = Vec::new(); + for arg in f.args.iter() { + let val = match arg { + FunctionArg::Named { name: _name, arg } => match arg { + FunctionArgExpr::Expr(expr) => { + let val = get_value_from_expr(expr); + if val.is_none() { + return Err(anyhow!("SqlExpr::Function: We only support Identifier at the moment")); + } + val.unwrap() + } + _ => return Err(anyhow!("We only support String at the moment")), + }, + FunctionArg::Unnamed(arg) => match arg { + FunctionArgExpr::Expr(expr) => { + let val = get_value_from_expr(expr); + if val.is_none() { + return Err(anyhow!("SqlExpr::Function: We only support Identifier at the moment")); + } + val.unwrap() + } + _ => return Err(anyhow!("We only support String at the moment")), + }, + }; + vals.push(val); + } + + fields.push(( + field_name.to_string(), + vals.get(1).unwrap().to_owned(), + SqlOperator::Gte, + next_op, + )); + fields.push(( + field_name.to_string(), + vals.get(2).unwrap().to_owned(), + SqlOperator::Lt, + next_op, + )); + } + + Ok(()) +} + +fn get_value_from_expr(expr: &SqlExpr) -> Option { + match expr { + SqlExpr::Identifier(ident) => Some(SqlValue::String(ident.value.to_string())), + SqlExpr::Value(value) => match value { + Value::SingleQuotedString(s) => Some(SqlValue::String(s.to_string())), + Value::DoubleQuotedString(s) => Some(SqlValue::String(s.to_string())), + Value::Number(s, _) => Some(SqlValue::Number(s.parse::().unwrap())), + _ => None, + }, + SqlExpr::Function(f) => Some(SqlValue::String(f.to_string())), + _ => None, + } +} + +impl TryFrom<&BinaryOperator> for SqlOperator { + type Error = anyhow::Error; + fn try_from(value: &BinaryOperator) -> Result { + match value { + BinaryOperator::And => Ok(SqlOperator::And), + BinaryOperator::Or => Ok(SqlOperator::Or), + BinaryOperator::Eq => Ok(SqlOperator::Eq), + BinaryOperator::NotEq => Ok(SqlOperator::Neq), + BinaryOperator::Gt => Ok(SqlOperator::Gt), + BinaryOperator::GtEq => Ok(SqlOperator::Gte), + BinaryOperator::Lt => Ok(SqlOperator::Lt), + BinaryOperator::LtEq => Ok(SqlOperator::Lte), + _ => Err(anyhow!("We only support BinaryOperator at the moment")), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::meta::dialect::ZincDialect; + use crate::meta::sql::SqlValue; + use sqlparser::parser::Parser; + + #[test] + fn parse_sql_works() { + let table = "index.1.2022"; + let sql = format!( + "select a, b, c from {} where a=1 and b=1 or c=1 order by c desc limit 5 offset 10", + table + ); + let statement = &Parser::parse_sql(&ZincDialect::default(), sql.as_ref()).unwrap()[0]; + let sql: Sql = statement.try_into().unwrap(); + assert_eq!(sql.source, table); + assert_eq!(sql.limit, 5); + assert_eq!(sql.offset, 10); + assert_eq!(sql.order_by, vec![("c".into(), true)]); + assert_eq!(sql.fields, vec!["a", "b", "c"]); + } + + #[test] + fn test_new_sql() { + let table = "index.1.2022"; + let sql = format!( + "select a, b, c from {} where a=1 and b=1 or c=1 order by c desc limit 5 offset 10", + table + ); + let local_sql: Sql = Sql::new(sql.as_str()).unwrap(); + assert_eq!(local_sql.source, table); + assert_eq!(local_sql.limit, 5); + assert_eq!(local_sql.offset, 10); + assert_eq!(local_sql.order_by, vec![("c".into(), true)]); + assert_eq!(local_sql.fields, vec!["a", "b", "c"]); + } + + #[test] + fn test_parse_timestamp() { + let val = 1666093521151350; + let ts_val = SqlValue::Number(val); + let ts = parse_timestamp(&ts_val).unwrap().unwrap(); + let ts_str_val = SqlValue::String("to_timestamp1()".to_string()); + let ts_str = parse_timestamp(&ts_str_val); + assert_eq!(ts, val); + assert!(ts_str.is_err()); + } + + #[test] + fn test_parse_timerange() { + let sqls:Vec::<(&str,(i64,i64))> = [ + ("select * from tbl where ts in (1, 2, 3)", (0,0)), + ("select * from tbl where _timestamp >= 1666093521151350", (1666093521151350,0)), + ("select * from tbl where _timestamp >= 1666093521151350 AND _timestamp < 1666093521151351", (1666093521151350,1666093521151351)), + ("select * from tbl where a=1 AND _timestamp>=1666093521151350 AND _timestamp < 1666093521151351", (1666093521151350,1666093521151351)), + ("select * from tbl where a=1 AND b = 2 AND _timestamp>=1666093521151350 AND _timestamp < 1666093521151351", (1666093521151350,1666093521151351)), + ("select * from tbl where \"a\"=1 AND b = 2 AND (_timestamp>=1666093521151350 AND _timestamp < 1666093521151351)", (1666093521151350,1666093521151351)), + ("select * from tbl where b = 2 AND (_timestamp>=1666093521151350 AND _timestamp < 1666093521151351)", (1666093521151350,1666093521151351)), + ("select * from tbl where b = 2 AND _timestamp>=1666093521151350 AND _timestamp < 1666093521151351", (1666093521151350,1666093521151351)), + ("select * from tbl where (_timestamp>=1666093521151350 AND _timestamp < 1666093521151351)", (1666093521151350,1666093521151351)), + ("select * from tbl where _timestamp>=1666093521151350 AND _timestamp < 1666093521151351", (1666093521151350,1666093521151351)), + ("select * from tbl where a=1 AND b = 2 AND (_timestamp BETWEEN 1666093521151350 AND 1666093521151351)", (1666093521151350,1666093521151351)), + ("select * from tbl where b = 2 AND (_timestamp BETWEEN 1666093521151350 AND 1666093521151351)", (1666093521151350,1666093521151351)), + ("select * from tbl where (_timestamp BETWEEN 1666093521151350 AND 1666093521151351)", (1666093521151350,1666093521151351)), + ("select * from tbl where _timestamp BETWEEN 1666093521151350 AND 1666093521151351", (1666093521151350,1666093521151351)), + ("select * from tbl where time_range(\"_timestamp\", '2022-10-19T15:19:24.587Z','2022-10-19T15:34:24.587Z')",(1666192764587000,1666193664587000))].to_vec(); + for sql in sqls { + let meta = Sql::new(sql.0); + if meta.is_err() { + println!("sql: {}, err: {}", sql.0, meta.as_ref().err().unwrap()); + } + assert!(meta.is_ok()); + let time_range = meta.unwrap().time_range.unwrap(); + assert_eq!(time_range.0, sql.1 .0); + if sql.1 .1 != 0 { + assert_eq!(time_range.1, sql.1 .1); + } + } + } +} diff --git a/src/meta/stream.rs b/src/meta/stream.rs new file mode 100644 index 0000000000..9843dd9ed2 --- /dev/null +++ b/src/meta/stream.rs @@ -0,0 +1,124 @@ +use std::collections::HashMap; + +use super::StreamType; +use crate::common::json; + +use datafusion::arrow::datatypes::Schema; +use serde::{ser::SerializeStruct, Deserialize, Serialize, Serializer}; +use utoipa::ToSchema; + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct Stream { + pub name: String, + pub storage_type: String, + pub stream_type: StreamType, + pub stats: Stats, + #[serde(skip_serializing_if = "Vec::is_empty")] + pub schema: Vec, + pub settings: StreamSettings, +} + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct StreamProperty { + pub name: String, + #[serde(rename = "type")] + pub prop_type: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct StreamQueryParams { + #[serde(rename = "type")] + pub stream_type: Option, +} + +#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, ToSchema)] +pub struct Stats { + pub doc_time_min: i64, + pub doc_time_max: i64, + pub doc_num: u64, + pub file_num: u64, + pub storage_size: f64, + pub compressed_size: f64, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct StreamSchema { + pub stream_name: String, + pub stream_type: StreamType, + pub schema: Schema, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct StreamSettings { + #[serde(skip_serializing_if = "Vec::is_empty")] + #[serde(default)] + pub partition_keys: Vec, + #[serde(skip_serializing_if = "Vec::is_empty")] + #[serde(default)] + pub full_text_search_keys: Vec, +} + +impl Serialize for StreamSettings { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let mut state = serializer.serialize_struct("StreamSettings", 2)?; + let mut part_keys = HashMap::new(); + for (index, key) in self.partition_keys.iter().enumerate() { + part_keys.insert(format!("L{}", index), key.to_string()); + } + state.serialize_field("partition_keys", &part_keys)?; + state.serialize_field("full_text_search_keys", &self.full_text_search_keys)?; + state.end() + } +} + +impl Default for Stats { + fn default() -> Self { + Self { + doc_time_min: 0, + doc_time_max: 0, + doc_num: 0, + file_num: 0, + storage_size: 0.0, + compressed_size: 0.0, + } + } +} + +impl From<&str> for Stats { + fn from(data: &str) -> Self { + json::from_str::(data).unwrap() + } +} + +impl From for Vec { + fn from(value: Stats) -> Vec { + serde_json::to_vec(&value).unwrap() + } +} + +impl From for String { + fn from(data: Stats) -> Self { + json::to_string(&data).unwrap() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct ListStream { + pub list: Vec, +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_stats() { + let stats = Stats::default(); + let stats_str: String = stats.try_into().unwrap(); + let stats_frm_str = Stats::from(stats_str.as_str()); + assert_eq!(stats, stats_frm_str); + } +} diff --git a/src/meta/traces.rs b/src/meta/traces.rs new file mode 100644 index 0000000000..1e90d0e25d --- /dev/null +++ b/src/meta/traces.rs @@ -0,0 +1,61 @@ +use ahash::AHashMap; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use std::collections::HashMap; + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Span { + pub trace_id: String, + pub span_id: String, + pub flags: u8, + pub span_kind: String, + pub operation_name: String, + pub start_time: u64, + pub end_time: u64, + pub duration: u64, + #[serde(flatten)] + #[serde(skip_serializing_if = "HashMap::is_empty")] + pub reference: AHashMap, + pub service_name: String, + #[serde(flatten)] + #[serde(skip_serializing_if = "HashMap::is_empty")] + pub attributes: AHashMap, + #[serde(flatten)] + #[serde(skip_serializing_if = "HashMap::is_empty")] + pub service: AHashMap, + pub _timestamp: u64, + pub events: String, +} + +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] +pub enum SpanRefType { + #[default] + #[serde(rename = "CHILD_OF")] + ChildOf, + #[serde(rename = "PARENT_OF")] + ParentOf, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Event { + pub name: String, + pub _timestamp: u64, + #[serde(flatten)] + #[serde(skip_serializing_if = "HashMap::is_empty")] + pub attributes: AHashMap, +} +/* #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct SpanReference { + pub parent_trace_id: String, + pub parent_span_id: String, + pub ref_type: SpanRefType, +} + +//Service which has generated the trace id - span id ...in distrubited tracing there can be multiple services using same trace id +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Service { + pub name: String, + #[serde(flatten)] + #[serde(skip_serializing_if = "HashMap::is_empty")] + pub attributes: AHashMap, +} */ diff --git a/src/meta/transform.rs b/src/meta/transform.rs new file mode 100644 index 0000000000..105811f398 --- /dev/null +++ b/src/meta/transform.rs @@ -0,0 +1,62 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Transform { + #[serde(default)] + #[serde(skip_serializing_if = "is_zero")] + pub order: u32, + pub function: String, + #[serde(default)] + #[serde(skip_serializing_if = "String::is_empty")] + pub stream_name: String, + #[serde(default)] + pub name: String, + #[serde(default)] + pub num_args: u8, + #[serde(default)] + pub trans_type: u8, +} +fn is_zero(b: impl std::borrow::Borrow) -> bool { + b.borrow() <= &0 +} + +impl PartialEq for Transform { + fn eq(&self, other: &Self) -> bool { + self.name == other.name && self.stream_name == other.stream_name + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct TransformList { + pub list: Vec, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_tarsnform() { + let trns = Transform { + order: 0, + function: "function jsconcat(a,b){return a+b}".to_string(), + stream_name: "olympics".to_string(), + name: "jsconcat".to_string(), + num_args: 2, + trans_type: 1, + }; + + let mod_trns = Transform { + order: 0, + function: "function jsconcat(a,b){return a..b}".to_string(), + stream_name: "olympics".to_string(), + name: "jsconcat".to_string(), + num_args: 2, + trans_type: 1, + }; + + let trans_list = TransformList { list: vec![] }; + assert_eq!(trns, mod_trns); + assert!(trans_list.list.is_empty()); + } +} diff --git a/src/meta/user.rs b/src/meta/user.rs new file mode 100644 index 0000000000..1d21178c9b --- /dev/null +++ b/src/meta/user.rs @@ -0,0 +1,34 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct User { + pub name: String, + pub password: String, + pub role: Role, + #[serde(default)] + pub salt: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct SignInUser { + pub name: String, + pub password: String, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +pub enum Role { + Admin, + User, + Root, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct UserResponse { + pub name: String, + pub role: Role, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct UserList { + pub list: Vec, +} diff --git a/src/service/alert_manager.rs b/src/service/alert_manager.rs new file mode 100644 index 0000000000..7af49b4810 --- /dev/null +++ b/src/service/alert_manager.rs @@ -0,0 +1,138 @@ +use crate::common::notification::send_notification; +use crate::infra::config::{TRIGGERS, TRIGGERS_IN_PROCESS}; +use crate::meta; +use crate::meta::alert::{Alert, Evaluate, Trigger, TriggerTimer}; +use crate::meta::search::Request; +use crate::service::search as SearchService; +use crate::service::triggers; +use ahash::AHashMap; +use chrono::Utc; +use serde_json::json; +use tokio::time; + +pub async fn run() -> Result<(), anyhow::Error> { + for item in TRIGGERS.iter() { + if !item.is_ingest_time { + let local_item = item.clone(); + tokio::task::spawn(async move { + handle_triggers(&local_item.alert_name.clone(), local_item.clone()).await + }); + } + } + Ok(()) +} +pub async fn handle_triggers(alert_name: &str, trigger: Trigger) { + match super::db::alerts::get(&trigger.org, &trigger.stream, &trigger.alert_name).await { + Ok(result) => match result { + Some(alert) => { + if TRIGGERS_IN_PROCESS.contains_key(alert_name) { + let mut curr_time = + TRIGGERS_IN_PROCESS.get_mut(&alert_name.to_owned()).unwrap(); + let delay = trigger.timestamp - curr_time.updated_at; + if delay > 0 { + log::info!( + "Updating timeout for trigger to {}", + curr_time.expires_at + delay + ); + curr_time.expires_at += delay; + curr_time.updated_at = trigger.timestamp; + } + } else { + let expires_at = + Utc::now().timestamp_micros() + get_micros_from_min(alert.duration); // * 60 * 1000000; + log::info!("Setting timeout for trigger to {}", expires_at); + TRIGGERS_IN_PROCESS.insert( + alert_name.to_owned(), + TriggerTimer { + updated_at: trigger.timestamp, + expires_at, + }, + ); + handle_trigger(alert_name, alert.clone()).await; + } + } + None => log::error!("[ALERT MANAGER] no alert found for trigger",), + }, + Err(_) => log::error!("[ALERT MANAGER] Error fectching alert",), + } +} + +pub async fn handle_trigger(alert_name: &str, alert: Alert) { + let mut interval = time::interval(time::Duration::from_secs( + (alert.frequency * 60).try_into().unwrap(), + )); + + loop { + interval.tick().await; + let curr_ts = Utc::now().timestamp_micros(); + let trigger = TRIGGERS.get(&alert_name.to_owned()).unwrap(); + if TRIGGERS_IN_PROCESS.contains_key(alert_name) { + let trigger_time = TRIGGERS_IN_PROCESS.get(&alert_name.to_owned()).unwrap(); + if curr_ts <= trigger_time.expires_at { + let mut query = alert.query.clone().unwrap(); + let curr_ts = Utc::now().timestamp_micros(); + query.end_time = curr_ts; + query.start_time = curr_ts - get_micros_from_min(alert.duration); + let req: meta::search::Request = Request { + query, + aggs: AHashMap::new(), + }; + //let time_elpased = curr_ts - trigger.clone().last_sent_at; + + // do search + match SearchService::search(&trigger.org, meta::StreamType::Logs, &req).await { + Ok(res) => { + if !res.hits.is_empty() { + let record = res.hits.first().unwrap().as_object().unwrap(); + if alert.condition.clone().evaluate(record.clone()) { + let curr_ts = Utc::now().timestamp_micros(); + let mut local_trigger = trigger.clone(); + + if trigger.clone().last_sent_at == 0 + || (trigger.clone().last_sent_at > 0 + && curr_ts - trigger.clone().last_sent_at + > get_micros_from_min(alert.time_between_alerts)) + { + //Invoke Webhook + let msg = json!({ + "text": + format!( + "For stream {} of organization {} alert {} is active", + &trigger.stream, &trigger.org, &trigger.alert_name + ) + }); + let _ = send_notification(&alert.destination, msg).await; + local_trigger.last_sent_at = curr_ts; + } + //Update trigger for last sent + + local_trigger.count += 1; + let _ = triggers::save_trigger( + alert.name.clone(), + local_trigger.clone(), + ) + .await; + } + } + } + Err(err) => { + log::error!("search error: {:?}", err); + } + } + } else { + log::info!( + "Setting to in-active expired trigger with name {}", + &alert_name.to_owned() + ); + let mut local_trigger = trigger.clone(); + local_trigger.is_valid = false; + let _ = triggers::save_trigger(alert.name.clone(), local_trigger.clone()).await; + break; + } + } + } +} + +fn get_micros_from_min(min: i64) -> i64 { + min * 60 * 1000000 +} diff --git a/src/service/alerts.rs b/src/service/alerts.rs new file mode 100644 index 0000000000..9d5f78ec91 --- /dev/null +++ b/src/service/alerts.rs @@ -0,0 +1,170 @@ +use super::search::sql::Sql; +use super::{db, triggers}; +use crate::handler::grpc::cluster_rpc; +use crate::meta; +use crate::meta::alert::{Alert, AlertList, Trigger}; +use crate::meta::http::HttpResponse as MetaHttpResponse; +use crate::meta::search::Query; +use actix_web::{ + http::{self, StatusCode}, + HttpResponse, +}; +use ahash::AHashMap; +use arrow_schema::DataType; +use chrono::Utc; +use std::io::Error; +use tracing::info_span; + +pub async fn save_alert( + org_id: String, + stream_name: String, + name: String, + mut alert: Alert, +) -> Result { + let loc_span = info_span!("service:alerts:save"); + let _guard = loc_span.enter(); + + alert.stream = stream_name.to_string(); + alert.name = name.to_string(); + + // before saving alert check column type to decide numeric condition + let schema = db::schema::get(&org_id, &stream_name, Some(crate::meta::StreamType::Logs)) + .await + .unwrap(); + + let fields = schema.fields; + if fields.is_empty() { + return Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some(format!("Stream with name {} not found", stream_name)), + ))); + } + + if alert.query.is_none() { + alert.query = Some(Query { + sql: format!("select * from {}", stream_name), + start_time: 0, + end_time: 0, + sql_mode: "full".to_owned(), + track_total_hits: false, + from: 0, + size: 0, + }); + alert.is_ingest_time = true; + + //for condtion in alert.trigger.iter_mut() { + let mut local_fields = fields.clone(); + + local_fields.retain(|field| field.name().eq(&alert.condition.column)); + + if !local_fields.is_empty() { + if local_fields + .first() + .unwrap() + .data_type() + .eq(&DataType::Utf8) + { + alert.condition.is_numeric = Some(false); + } else { + alert.condition.is_numeric = Some(true); + } + } else { + return Ok(HttpResponse::BadRequest().json(MetaHttpResponse::error( + StatusCode::BAD_REQUEST.into(), + Some(format!( + "Column named {} not found on stream {}", + &alert.condition.column, stream_name + )), + ))); + } + //} + } else { + let meta_req = meta::search::Request { + query: alert.clone().query.unwrap(), + aggs: AHashMap::new(), + }; + let req: cluster_rpc::SearchRequest = meta_req.into(); + let sql = Sql::new(&req).await; + + if sql.is_err() { + return Ok(HttpResponse::BadRequest().json(MetaHttpResponse::error( + StatusCode::BAD_REQUEST.into(), + Some(format!("Invalid query : {:?} ", sql.err())), + ))); + } + } + + db::alerts::set( + org_id.as_str(), + stream_name.as_str(), + name.as_str(), + alert.clone(), + ) + .await + .unwrap(); + // For non-ingest alert set trigger immediately + if !alert.is_ingest_time { + let trigger = Trigger { + timestamp: Utc::now().timestamp_micros(), + is_valid: true, + alert_name: alert.name.clone(), + stream: stream_name, + org: org_id, + last_sent_at: 0, + count: 0, + is_ingest_time: false, + }; + let _ = triggers::save_trigger(trigger.alert_name.clone(), trigger.clone()).await; + } + + Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "Alert saved".to_string(), + ))) +} + +pub async fn list_alert(org_id: String, stream_name: Option<&str>) -> Result { + let loc_span = info_span!("service:alerts:list"); + let _guard = loc_span.enter(); + let udf_list = db::alerts::list(org_id.as_str(), stream_name) + .await + .unwrap(); + Ok(HttpResponse::Ok().json(AlertList { list: udf_list })) +} + +pub async fn delete_alert( + org_id: String, + stream_name: String, + name: String, +) -> Result { + let loc_span = info_span!("service:alerts:delete"); + let _guard = loc_span.enter(); + let result = db::alerts::delete(org_id.as_str(), stream_name.as_str(), name.as_str()).await; + match result { + Ok(_) => Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "Alert deleted ".to_string(), + ))), + Err(err) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some(err.to_string()), + ))), + } +} + +pub async fn get_alert( + org_id: String, + stream_name: String, + name: String, +) -> Result { + let loc_span = info_span!("service:alerts:get"); + let _guard = loc_span.enter(); + let result = db::alerts::get(org_id.as_str(), stream_name.as_str(), name.as_str()).await; + match result { + Ok(alert) => Ok(HttpResponse::Ok().json(alert)), + Err(_) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some("alert not found".to_string()), + ))), + } +} diff --git a/src/service/compact/file_list.rs b/src/service/compact/file_list.rs new file mode 100644 index 0000000000..7e3e64ae72 --- /dev/null +++ b/src/service/compact/file_list.rs @@ -0,0 +1,146 @@ +use ahash::AHashMap as HashMap; +use bytes::Buf; +use chrono::{Duration, TimeZone, Utc}; +use std::io::{BufRead, BufReader, Write}; + +use crate::common::json; +use crate::infra::config::{CONFIG, STREAM_SCHEMAS}; +use crate::infra::db::etcd; +use crate::infra::ider; +use crate::infra::storage; +use crate::meta::common::FileKey; +use crate::service::db; + +/// check all streams done compact in this hour +/// merge all small file list keys in this hour to a single file and upload to storage +/// delete all small file list keys in this hour from storage +/// node should load new file list from storage +pub async fn run(offset: i64) -> Result<(), anyhow::Error> { + let mut offset = offset; + if offset == 0 { + // get earilest date from schema + offset = Utc::now().timestamp_micros(); + for item in STREAM_SCHEMAS.iter() { + let schema = item.value(); + if let Some(val) = schema.first().unwrap().metadata.get("created_at") { + let time_min = val.parse().unwrap(); + if time_min < offset { + offset = time_min; + } + } + } + } + + // still not found, just return + if offset == 0 { + return Ok(()); // no stream + } + + // check compact is done + let offsets = db::compact::files::list_offset().await?; + if offsets.is_empty() { + return Ok(()); // no stream + } + // compact offset already is next hour, we need fix it, get the latest compact offset + for (_, val) in offsets { + let val = val - Duration::hours(1).num_microseconds().unwrap(); + if val < offset { + return Ok(()); // compact is not done + } + } + + // output file list + merge_file_list(offset).await?; + + // write new sync offset + offset += Duration::hours(1).num_microseconds().unwrap(); + db::compact::file_list::set_offset(offset).await +} + +/// merge and delete the small file list keys in this hour from etcd +/// upload new file list into storage +async fn merge_file_list(offset: i64) -> Result<(), anyhow::Error> { + let mut locker = None; + if !CONFIG.common.local_mode { + // get a cluster lock for merge file list + let lock_key = "compactor/file_list"; + let mut lock = etcd::Locker::new(lock_key); + if lock.lock(CONFIG.etcd.command_timeout).await.is_err() { + return Ok(()); // lock failed, just skip + } + locker = Some(lock); + } + + // get all small file list keys in this hour + let offset = Utc.timestamp_nanos(offset * 1000); + let offset_prefix = offset.format("/%Y/%m/%d/%H/").to_string(); + let key = format!("file_list{}", offset_prefix); + let storage = &storage::DEFAULT; + let file_list = storage.list(&key).await?; + if file_list.is_empty() { + return Ok(()); + } + + // filter deleted file keys + let mut filter_file_keys: HashMap = HashMap::with_capacity(1024); + for file in file_list.clone() { + log::info!("[COMPACT] merge small file list: {}", file); + let data = storage.get(&file).await?; + // uncompress file + let uncompress = zstd::decode_all(data.reader())?; + let uncompress_reader = BufReader::new(uncompress.reader()); + // parse file list + for line in uncompress_reader.lines() { + let line = line?; + if line.is_empty() { + continue; + } + let item: FileKey = json::from_slice(line.as_bytes())?; + match filter_file_keys.get(&item.key) { + Some(_) => { + if item.deleted { + filter_file_keys.insert(item.key.clone(), item); + } + } + None => { + filter_file_keys.insert(item.key.clone(), item); + } + } + } + } + + // write new file list + let id = ider::generate(); + let file_name = format!("file_list{}{}.json.zst", offset_prefix, id); + let mut buf = zstd::Encoder::new(Vec::new(), 3)?; + for (_, item) in filter_file_keys.iter() { + if item.deleted { + continue; + } + let val = json::to_vec(&item)?; + buf.write_all(val.as_slice())?; + buf.write_all(b"\n")?; + } + let compressed_bytes = buf.finish().unwrap(); + + match storage.put(&file_name, compressed_bytes.into()).await { + Ok(_) => { + log::info!("[COMPACT] merge file list success, new file: {}", file_name); + // delete all small file list keys in this hour from storage + for file in file_list { + storage.del(&file).await?; + } + } + Err(err) => { + log::error!("[COMPACT] upload file list failed: {}", err); + } + } + + if locker.is_some() { + // release cluster lock + let mut lock = locker.unwrap(); + lock.unlock().await?; + } + + Ok(()) +} diff --git a/src/service/compact/merge.rs b/src/service/compact/merge.rs new file mode 100644 index 0000000000..7c37cf9025 --- /dev/null +++ b/src/service/compact/merge.rs @@ -0,0 +1,378 @@ +use ::datafusion::arrow::datatypes::Schema; +use ahash::AHashMap as HashMap; +use chrono::{DateTime, Datelike, Duration, TimeZone, Timelike, Utc}; +use std::io::Write; +use std::sync::Arc; +use tokio::time; + +use crate::common::json; +use crate::infra::db::etcd::MAX_OPS_PER_TXN; +use crate::infra::storage::generate_partioned_file_key; +use crate::infra::{cache, ider, storage}; +use crate::infra::{config::CONFIG, db::etcd}; +use crate::meta::common::{FileKey, FileMeta}; +use crate::meta::StreamType; +use crate::service::search::datafusion; +use crate::service::{db, file_list}; + +/// compactor run steps on a stream: +/// 3. get a cluster lock for compactor stream +/// 4. read last compacted offset: year/month/day/hour +/// 5. read current hour all files +/// 6. compact small files to big files -> COMPACTOR_MAX_FILE_SIZE +/// 7. write to storage +/// 8. delete small files keys & write big files keys, use transaction +/// 9. delete small files from storage +/// 10. update last compacted offset +/// 11. release cluster lock +pub async fn merge_by_stream( + last_file_list_offset: i64, + org_id: &str, + stream_name: &str, + stream_type: StreamType, +) -> Result<(), anyhow::Error> { + let mut locker = None; + if !CONFIG.common.local_mode { + // get a cluster lock for compactor stream + let lock_key = format!("compactor/files/{}/{}/{}", org_id, stream_type, stream_name); + let mut lock = etcd::Locker::new(&lock_key); + if lock.lock(CONFIG.etcd.command_timeout).await.is_err() { + return Ok(()); // lock failed, just skip + } + locker = Some(lock); + } + + // get schema + let schema = db::schema::get(org_id, stream_name, Some(stream_type)).await?; + let schema_metadata = schema.metadata.clone(); + let schema = Arc::new(schema.with_metadata(std::collections::HashMap::new())); + + // get last compacted offset + let mut offset = db::compact::files::get_offset(org_id, stream_name, stream_type).await?; + if offset == 0 { + offset = schema_metadata + .get("created_at") + .unwrap_or(&String::from("0")) + .parse::() + .unwrap(); + } + if offset == 0 { + if locker.is_some() { + // release cluster lock + let mut lock = locker.unwrap(); + lock.unlock().await?; + } + return Ok(()); // no data + } + + // check sync offset, if already synced, just set to next hour + if offset < last_file_list_offset { + // write new offset + offset += Duration::hours(1).num_microseconds().unwrap(); + db::compact::files::set_offset(org_id, stream_name, stream_type, offset).await?; + // release cluster lock + if locker.is_some() { + let mut lock = locker.unwrap(); + lock.unlock().await?; + } + return Ok(()); // the time is current hour, just wait + } + + // check offset + let time_now: DateTime = Utc::now(); + let time_now_hour = Utc + .with_ymd_and_hms( + time_now.year(), + time_now.month(), + time_now.day(), + time_now.hour(), + 0, + 0, + ) + .unwrap() + .timestamp_micros(); + let offset_time: DateTime = Utc.timestamp_nanos(offset * 1000); + let offset_time_hour = Utc + .with_ymd_and_hms( + offset_time.year(), + offset_time.month(), + offset_time.day(), + offset_time.hour(), + 0, + 0, + ) + .unwrap() + .timestamp_micros(); + // if offset is future, just wait + // if offset is last hour, must wait for at least 3 times of max_file_retention_time + // - first period: the last hour local file upload to storage, write file list + // - second period, the last hour file list upload to storage + // - third period, we can do the merge, at least 3 times of max_file_retention_time + if offset >= time_now_hour + || (offset_time_hour + Duration::hours(1).num_microseconds().unwrap() == time_now_hour + && time_now.timestamp_micros() - time_now_hour + < Duration::seconds(CONFIG.limit.max_file_retention_time as i64) + .num_microseconds() + .unwrap() + * 3) + { + if locker.is_some() { + // release cluster lock + let mut lock = locker.unwrap(); + lock.unlock().await?; + } + return Ok(()); // the time is future, just wait + } + + // get current hour all files + let files = + file_list::get_file_list(org_id, stream_name, Some(stream_type), offset, offset + 1) + .await?; + + // do partition by partition key + let mut partition_files_with_size: HashMap> = HashMap::new(); + for file in files { + let prefix = { + let pos = file.rfind('/').unwrap(); + file[..pos].to_string() + }; + let partition = partition_files_with_size.entry(prefix).or_default(); + let file_meta = file_list::get_file_meta(&file).await?; + partition.push((file.clone(), file_meta.original_size)); + } + + let storage = &storage::DEFAULT; + let mut merge_success = true; + for (_, files_with_size) in partition_files_with_size.iter_mut() { + // sort by file size + files_with_size.sort_by(|a, b| a.1.cmp(&b.1)); + loop { + // yield to other tasks + tokio::task::yield_now().await; + // merge file and get the big file key + let (new_file_name, new_file_meta, new_file_list) = merge_files( + org_id, + stream_name, + stream_type, + schema.clone(), + files_with_size, + ) + .await?; + if new_file_name.is_empty() { + break; // no file need to merge + } + + // delete small files keys & write big files keys, use transaction + let mut events = Vec::with_capacity(new_file_list.len() + 1); + events.push(FileKey { + key: new_file_name.clone(), + meta: new_file_meta, + deleted: false, + }); + for file in new_file_list.iter() { + events.push(FileKey { + key: file.clone(), + meta: FileMeta::default(), + deleted: true, + }); + } + + // upload the new file_list to storage + let new_file_list_key = format!( + "file_list/{}/{}.json.zst", + offset_time.format("%Y/%m/%d/%H"), + ider::generate() + ); + let mut buf = zstd::Encoder::new(Vec::new(), 3)?; + for file in events.iter() { + let mut write_buf = json::to_vec(&file)?; + write_buf.push(b'\n'); + buf.write_all(&write_buf)?; + } + let compressed_bytes = buf.finish().unwrap(); + storage + .put(&new_file_list_key, compressed_bytes.into()) + .await?; + + // set to local cache & send broadcast + let mut db_success = false; + // retry 10 times + for _ in 0..9 { + // set to local cache + let mut cache_success = true; + for event in &events { + if let Err(e) = + db::file_list::progress(&event.key, event.meta, event.deleted).await + { + cache_success = false; + log::error!("[COMPACT] set local cache failed, retrying: {}", e); + time::sleep(time::Duration::from_secs(1)).await; + break; + } + } + if !cache_success { + continue; + } + // send broadcast to other nodes + if let Err(e) = db::file_list::broadcast::send(&events).await { + log::error!("[COMPACT] send broadcast failed, retrying: {}", e); + time::sleep(time::Duration::from_secs(1)).await; + continue; + } + // set to db & broadcast success + db_success = true; + break; + } + + if !db_success { + merge_success = false; + // delete the file just upload to storage + match storage.del(&new_file_name).await { + Ok(_) => {} + Err(e) => { + log::error!("[COMPACT] delete file failed: {}", e); + } + } + continue; + } + + // delete small files from storage + for file in &new_file_list { + tokio::task::yield_now().await; // yield to other tasks + match storage.del(file).await { + Ok(_) => {} + Err(e) => { + log::error!("[COMPACT] delete file failed: {}", e); + } + } + } + // delete files from file list + files_with_size.retain(|value| !&new_file_list.contains(&value.0)); + } + } + + // write new offset + if merge_success { + offset += Duration::hours(1).num_microseconds().unwrap(); + db::compact::files::set_offset(org_id, stream_name, stream_type, offset).await?; + } + + if locker.is_some() { + // release cluster lock + let mut lock = locker.unwrap(); + lock.unlock().await?; + } + + Ok(()) +} + +/// merge some small files into one big file, upload to storage, returns the big file key and merged files +async fn merge_files( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + schema: Arc, + files_with_size: &Vec<(String, u64)>, +) -> Result<(String, FileMeta, Vec), anyhow::Error> { + if files_with_size.len() <= 1 { + return Ok((String::from(""), FileMeta::default(), Vec::new())); + } + + let mut new_file_size = 0; + let mut new_file_list = Vec::new(); + for (new_files_num, (file, size)) in files_with_size.iter().enumerate() { + if new_files_num > MAX_OPS_PER_TXN || new_file_size + size > CONFIG.compact.max_file_size { + break; + } + new_file_size += size; + new_file_list.push(file.to_owned()); + log::info!("[COMPACT] merge small file: {}", file); + } + // no files need to merge + if new_file_list.len() <= 1 { + return Ok((String::from(""), FileMeta::default(), Vec::new())); + } + + // convert the file to the latest version of schema + let schema_versions = db::schema::get_versions(org_id, stream_name, Some(stream_type)).await?; + let schema_latest = schema_versions.last().unwrap(); + let schema_latest_id = schema_versions.len() - 1; + if CONFIG.common.widening_schema_evoluation && schema_versions.len() > 1 { + for file in &new_file_list { + // get the schema version of the file + let mut file_meta = file_list::get_file_meta(file).await.unwrap_or_default(); + let schema_ver_id = match db::schema::filter_schema_version_id( + &schema_versions, + file_meta.min_ts, + file_meta.max_ts, + ) { + Some(id) => id, + None => { + log::error!( + "[COMPACT] merge small file: {}, schema version not found, min_ts: {}, max_ts: {}", + file, + file_meta.min_ts, + file_meta.max_ts + ); + // HACK: use the latest verion if not found in schema versions + schema_latest_id + } + }; + if schema_ver_id == schema_latest_id { + continue; + } + // cacluate the diff between latest schema and current schema + let schema = schema_versions[schema_ver_id] + .clone() + .with_metadata(std::collections::HashMap::new()); + let mut diff_fields = HashMap::new(); + let cur_fields = schema.fields(); + for field in cur_fields { + if let Ok(v) = schema_latest.field_with_name(field.name()) { + if v.data_type() != field.data_type() { + diff_fields.insert(v.name().clone(), v.data_type().clone()); + } + } + } + if diff_fields.is_empty() { + continue; + } + // do the convert + let mut buf = Vec::new(); + datafusion::exec::convert_parquet_file(&mut buf, Arc::new(schema), diff_fields, file) + .await?; + file_meta.compressed_size = buf.len() as u64; + cache::file_list::set_file_to_cache(file, Some(file_meta), false)?; + cache::file_data::set(file, buf.into())?; + } + } + + let mut buf = Vec::new(); + let mut new_file_meta = + datafusion::exec::merge_parquet_files(&mut buf, schema, &new_file_list.clone()).await?; + new_file_meta.original_size = new_file_size; + new_file_meta.compressed_size = buf.len() as u64; + + let new_file = generate_partioned_file_key( + org_id, + stream_name, + stream_type, + new_file_meta.min_ts, + &CONFIG.common.file_ext_parquet, + ); + let new_file_key = format!("files/{}{}", new_file.0, new_file.1); + + log::info!( + "[COMPACT] merge file success, new file: {}, orginal_size: {}, compressed_size: {}", + new_file_key, + new_file_meta.original_size, + new_file_meta.compressed_size, + ); + + // upload file + let storage = &storage::DEFAULT; + match storage.put(&new_file_key, buf.into()).await { + Ok(_) => Ok((new_file_key, new_file_meta, new_file_list)), + Err(e) => Err(e), + } +} diff --git a/src/service/compact/mod.rs b/src/service/compact/mod.rs new file mode 100644 index 0000000000..27aa4f8f95 --- /dev/null +++ b/src/service/compact/mod.rs @@ -0,0 +1,63 @@ +use crate::infra::cache; +use crate::meta::StreamType; +use crate::service::db; + +mod file_list; +mod merge; + +/// compactor run steps: +/// 1. get all organization +/// 2. range streams by organization & stream_type +/// 3. get a cluster lock for compactor stream +/// 4. read last compacted offset: year/month/day/hour +/// 5. read current hour all files +/// 6. compact small files to big files -> COMPACTOR_MAX_FILE_SIZE +/// 7. write to storage +/// 8. delete small files keys & write big files keys, use transaction +/// 9. delete small files from storage +/// 10. update last compacted offset +/// 11. release cluster lock +/// 12. compact file list from storage +pub async fn run() -> Result<(), anyhow::Error> { + // get last file_list compact offset + let last_file_list_offset = db::compact::file_list::get_offset().await?; + + let orgs = cache::file_list::get_all_organization()?; + let stream_types = [ + StreamType::Logs, + StreamType::Metrics, + StreamType::Traces, + StreamType::Metadata, + ]; + for org_id in orgs { + for stream_type in stream_types { + let streams = cache::file_list::get_all_stream(&org_id, stream_type)?; + for stream_name in streams { + tokio::task::yield_now().await; // yield to other tasks + if let Err(e) = merge::merge_by_stream( + last_file_list_offset, + &org_id, + &stream_name, + stream_type, + ) + .await + { + log::error!( + "[COMPACTOR] merge_by_stream [{}:{}:{}] error: {}", + org_id, + stream_type, + stream_name, + e + ); + } + } + } + } + + // after compact, compact file list from storage + if let Err(e) = file_list::run(last_file_list_offset).await { + log::error!("[COMPACTOR] output file list error: {}", e); + } + + Ok(()) +} diff --git a/src/service/dashboards.rs b/src/service/dashboards.rs new file mode 100644 index 0000000000..8f16d1cb62 --- /dev/null +++ b/src/service/dashboards.rs @@ -0,0 +1,72 @@ +use actix_web::{ + http::{self, StatusCode}, + HttpResponse, +}; +use std::io::Error; +use tracing::info_span; + +use crate::meta::dashboards::DashboardList; +use crate::meta::{self, http::HttpResponse as MetaHttpResponse}; +use crate::service::db; + +pub async fn get_dashboard(org_id: &str, name: &str) -> Result { + let loc_span = info_span!("service:dashboards:get"); + let _guard = loc_span.enter(); + let ret = db::dashboard::get(org_id, name).await; + match ret { + Ok(Some(dashboard)) => Ok(HttpResponse::Ok().json(dashboard)), + Ok(None) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some("Dashboard not found".to_string()), + ))), + Err(_) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some("Dashboard not found".to_string()), + ))), + } +} + +pub async fn save_dashboard( + org_id: &str, + name: &str, + details: &str, +) -> Result { + let loc_span = info_span!("service:dashboards:save"); + let _guard = loc_span.enter(); + let ret = db::dashboard::set(org_id, name, details).await; + match ret { + Ok(_) => Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "Dashboard saved".to_string(), + ))), + Err(err) => Ok( + HttpResponse::InternalServerError().json(meta::http::HttpResponse::error( + StatusCode::BAD_REQUEST.into(), + Some(err.to_string()), + )), + ), + } +} + +pub async fn list_dashboards(org_id: &str) -> Result { + let loc_span = info_span!("service:dashboards:list"); + let _guard = loc_span.enter(); + let list = db::dashboard::list(org_id).await.unwrap(); + Ok(HttpResponse::Ok().json(DashboardList { list })) +} + +pub async fn delete_dashboard(org_id: &str, name: &str) -> Result { + let loc_span = info_span!("service:dashboards:delete"); + let _guard = loc_span.enter(); + let result = db::dashboard::delete(org_id, name).await; + match result { + Ok(_) => Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "Dashboard deleted".to_string(), + ))), + Err(err) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some(err.to_string()), + ))), + } +} diff --git a/src/service/db/alerts.rs b/src/service/db/alerts.rs new file mode 100644 index 0000000000..155f15e7ec --- /dev/null +++ b/src/service/db/alerts.rs @@ -0,0 +1,128 @@ +use crate::common::json; +use crate::infra::config::STREAM_ALERTS; +use crate::infra::db::Event; +use crate::meta::alert::{Alert, AlertList}; +use std::sync::Arc; + +pub async fn get( + org_id: &str, + stream_name: &str, + name: &str, +) -> Result, anyhow::Error> { + let map_key = format!("{}/{}", org_id, stream_name); + let value: Option = if STREAM_ALERTS.contains_key(&map_key) { + let mut val = STREAM_ALERTS.get(&map_key).unwrap().clone(); + val.list.retain(|alert| alert.name.eq(name)); + val.list.first().cloned() + } else { + let db = &crate::infra::db::DEFAULT; + let key = format!("/alerts/{}/{}/{}", org_id, stream_name, name); + match db.get(&key).await { + Ok(val) => json::from_slice(&val).unwrap(), + Err(_) => None, + } + }; + Ok(value) +} + +pub async fn set( + org_id: &str, + stream_name: &str, + name: &str, + alert: Alert, +) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/alerts/{}/{}/{}", org_id, stream_name, name); + db.put(&key, json::to_vec(&alert).unwrap().into()).await?; + Ok(()) +} + +pub async fn delete(org_id: &str, stream_name: &str, name: &str) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/alerts/{}/{}/{}", org_id, stream_name, name); + match db.delete(&key, false).await { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } +} + +pub async fn list(org_id: &str, stream_name: Option<&str>) -> Result, anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = match stream_name { + Some(val) => format!("/alerts/{}/{}", org_id, val), + None => format!("/alerts/{}", org_id), + }; + //let key = format!("/alerts/{}", org_id); + let ret = db.list_values(&key).await?; + let mut alerts_list: Vec = Vec::new(); + for item_value in ret { + let json_val = json::from_slice(&item_value).unwrap(); + alerts_list.push(json_val) + } + Ok(alerts_list) +} + +pub async fn watch() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/alerts/"; + let mut events = db.watch(key).await?; + let events = Arc::get_mut(&mut events).unwrap(); + log::info!("[TRACE] Start watching alerts"); + loop { + let ev = match events.recv().await { + Some(ev) => ev, + None => { + log::error!("watch_alerts: event channel closed"); + break; + } + }; + match ev { + Event::Put(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let alert_key = item_key[0..item_key.rfind('/').unwrap()].to_string(); + let item_value: Alert = json::from_slice(&ev.value.unwrap()).unwrap(); + + let mut group = STREAM_ALERTS + .entry(alert_key.to_string()) + .or_insert(AlertList { list: vec![] }); + if group.list.contains(&item_value) { + let stream_name = group.list.iter().position(|x| x.eq(&item_value)).unwrap(); + let _ = std::mem::replace(&mut group.list[stream_name], item_value); + } else { + group.list.push(item_value); + } + } + Event::Delete(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let alert_key = item_key[0..item_key.rfind('/').unwrap()].to_string(); + let item_name = item_key[item_key.rfind('/').unwrap() + 1..].to_string(); + if alert_key.contains('/') { + let mut group = STREAM_ALERTS.get(&alert_key.to_string()).unwrap().clone(); + group.list.retain(|trans| !trans.name.eq(&item_name)); + STREAM_ALERTS.insert(alert_key.to_string(), group); + } else { + STREAM_ALERTS.remove(item_key); + } + } + } + } + Ok(()) +} + +pub async fn cache() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/alerts/"; + let ret = db.list(key).await?; + for (item_key, item_value) in ret { + let item_key = item_key.strip_prefix(key).unwrap(); + let json_val: Alert = json::from_slice(&item_value).unwrap(); + let stream_key = &item_key[0..item_key.rfind('/').unwrap()]; + + let mut group = STREAM_ALERTS + .entry(stream_key.to_string()) + .or_insert(AlertList { list: vec![] }); + group.list.push(json_val); + } + log::info!("[TRACE] Alerts Cached"); + Ok(()) +} diff --git a/src/service/db/compact.rs b/src/service/db/compact.rs new file mode 100644 index 0000000000..6598fd37ab --- /dev/null +++ b/src/service/db/compact.rs @@ -0,0 +1,2 @@ +pub mod file_list; +pub mod files; diff --git a/src/service/db/compact/file_list.rs b/src/service/db/compact/file_list.rs new file mode 100644 index 0000000000..92644f203e --- /dev/null +++ b/src/service/db/compact/file_list.rs @@ -0,0 +1,17 @@ +pub async fn get_offset() -> Result { + let db = &crate::infra::db::DEFAULT; + let key = "/compact/file_list/offset"; + let value = match db.get(key).await { + Ok(ret) => String::from_utf8_lossy(&ret).to_string(), + Err(_) => String::from("0"), + }; + let offset: i64 = value.parse().unwrap(); + Ok(offset) +} + +pub async fn set_offset(offset: i64) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/compact/file_list/offset"; + db.put(key, offset.to_string().into()).await?; + Ok(()) +} diff --git a/src/service/db/compact/files.rs b/src/service/db/compact/files.rs new file mode 100644 index 0000000000..f4e236273c --- /dev/null +++ b/src/service/db/compact/files.rs @@ -0,0 +1,44 @@ +use crate::meta::StreamType; + +pub async fn get_offset( + org_id: &str, + stream_name: &str, + stream_type: StreamType, +) -> Result { + let db = &crate::infra::db::DEFAULT; + let key = format!("/compact/files/{}/{}/{}", org_id, stream_type, stream_name); + let value = match db.get(&key).await { + Ok(ret) => String::from_utf8_lossy(&ret).to_string(), + Err(_) => String::from("0"), + }; + let offset: i64 = value.parse().unwrap(); + Ok(offset) +} + +pub async fn set_offset( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + offset: i64, +) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/compact/files/{}/{}/{}", org_id, stream_type, stream_name); + db.put(&key, offset.to_string().into()).await?; + Ok(()) +} + +pub async fn list_offset() -> Result, anyhow::Error> { + let mut items = Vec::new(); + let db = &crate::infra::db::DEFAULT; + let key = "/compact/files/"; + let ret = db.list(key).await?; + for (item_key, item_value) in ret { + let item_key = item_key.strip_prefix(key).unwrap(); + let value = String::from_utf8_lossy(&item_value) + .to_string() + .parse() + .unwrap(); + items.push((item_key.to_string(), value)); + } + Ok(items) +} diff --git a/src/service/db/dashboard.rs b/src/service/db/dashboard.rs new file mode 100644 index 0000000000..d9f81f71bd --- /dev/null +++ b/src/service/db/dashboard.rs @@ -0,0 +1,44 @@ +use bytes::Bytes; + +use crate::meta::dashboards::Dashboard; + +pub async fn get(org_id: &str, name: &str) -> Result, anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/dashboard/{}/{}", org_id, name); + let ret = db.get(&key).await?; + let details = String::from_utf8(ret.to_vec()).unwrap(); + let value = Some(Dashboard { + name: name.to_string(), + details, + }); + Ok(value) +} + +pub async fn set(org_id: &str, name: &str, details: &str) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/dashboard/{}/{}", org_id, name); + db.put(&key, Bytes::from(details.to_string())).await?; + Ok(()) +} + +pub async fn delete(org_id: &str, name: &str) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/dashboard/{}/{}", org_id, name); + match db.delete(&key, false).await { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } +} + +pub async fn list(org_id: &str) -> Result, anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/dashboard/{}/", org_id); + let ret = db.list(&key).await?; + let mut udf_list: Vec = Vec::new(); + for (item_key, item_value) in ret { + let name = item_key.strip_prefix(&key).unwrap().to_string(); + let details = String::from_utf8(item_value.to_vec()).unwrap(); + udf_list.push(Dashboard { name, details }) + } + Ok(udf_list) +} diff --git a/src/service/db/file_list/broadcast.rs b/src/service/db/file_list/broadcast.rs new file mode 100644 index 0000000000..adebbc4ab8 --- /dev/null +++ b/src/service/db/file_list/broadcast.rs @@ -0,0 +1,92 @@ +use dashmap::DashMap; +use http_auth_basic::Credentials; +use std::sync::Arc; +use tokio::sync::mpsc; +use tonic::{codec::CompressionEncoding, metadata::MetadataValue, transport::Channel, Request}; + +use crate::handler::grpc::cluster_rpc; +use crate::infra::cluster; +use crate::infra::config::{CONFIG, USERS}; +use crate::meta::common::FileKey; + +lazy_static! { + pub static ref EVENTS: DashMap>>> = DashMap::new(); +} + +/// send an event to broadcast, will create a new channel for each nodes +pub async fn send(items: &[FileKey]) -> Result<(), anyhow::Error> { + if CONFIG.common.local_mode { + return Ok(()); + } + let nodes = cluster::get_cached_online_nodes().unwrap(); + let local_node_uuid = cluster::LOCAL_NODE_UUID.clone(); + for node in nodes { + if node.uuid.eq(&local_node_uuid) { + continue; + } + if cluster::is_router(&node.role) { + continue; + } + let node = node.clone(); + let events = EVENTS.entry(node.uuid.clone()).or_insert_with(|| { + let (tx, mut rx) = mpsc::channel(1024); + tokio::task::spawn(async move { send_to_node(node, &mut rx).await }); + Arc::new(tx) + }); + events.clone().send(items.to_vec()).await?; + } + + Ok(()) +} + +async fn send_to_node( + node: cluster::Node, + rx: &mut mpsc::Receiver>, +) -> Result<(), anyhow::Error> { + loop { + if cluster::ge_node_by_uuid(&node.uuid).is_none() { + return Ok(()); + } + let user = USERS.get(&CONFIG.auth.username).unwrap(); + let credentials = Credentials::new(&CONFIG.auth.username, &user.password); + let credentials = credentials.as_http_header(); + let token: MetadataValue<_> = credentials.parse()?; + let channel = Channel::from_shared(node.grpc_addr) + .unwrap() + .connect() + .await?; + + let mut client = cluster_rpc::event_client::EventClient::with_interceptor( + channel, + move |mut req: Request<()>| { + req.metadata_mut().insert("authorization", token.clone()); + Ok(req) + }, + ); + client = client + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + loop { + let items = rx.recv().await.unwrap(); + // log::info!("broadcast to node[{}] -> {:?}", &node.uuid, items); + let mut req_query = cluster_rpc::FileList::default(); + for item in items.iter() { + req_query.items.push(cluster_rpc::FileKey::from(item)); + } + for _ in 0..3 { + let request = tonic::Request::new(req_query.clone()); + match client.send_file_list(request).await { + Ok(_) => break, + Err(e) => { + if cluster::ge_node_by_uuid(&node.uuid).is_none() { + return Ok(()); + } + log::error!("broadcast to node[{}] error: {}", &node.uuid, e); + tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; + continue; + } + } + } + } + } +} diff --git a/src/service/db/file_list/local.rs b/src/service/db/file_list/local.rs new file mode 100644 index 0000000000..a9fd8b1012 --- /dev/null +++ b/src/service/db/file_list/local.rs @@ -0,0 +1,67 @@ +use chrono::{TimeZone, Utc}; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +use crate::common::file::scan_files; +use crate::common::json; +use crate::infra::config::CONFIG; +use crate::infra::file_lock; +use crate::meta::common::{FileKey, FileMeta}; +use crate::meta::StreamType; + +pub async fn set(key: &str, meta: FileMeta, deleted: bool) -> Result<(), anyhow::Error> { + let file_data = FileKey { + key: key.to_string(), + meta, + deleted, + }; + let mut write_buf = json::to_vec(&file_data)?; + write_buf.push(b'\n'); + let hour_key = Utc + .timestamp_nanos(meta.min_ts * 1000) + .format("%Y_%m_%d_%H") + .to_string(); + let file = file_lock::get_or_create(0, "", "", StreamType::Filelist, &hour_key); + file.write(write_buf.as_ref()); + + super::progress(key, meta, deleted).await?; + super::broadcast::send(&[file_data]).await +} + +pub async fn get_all() -> Result, anyhow::Error> { + let mut result = Vec::new(); + let pattern = format!("{}/file_list/*.json", &CONFIG.common.data_wal_dir); + let files = scan_files(&pattern); + for file in files { + let file = File::open(file)?; + let reader = BufReader::new(file); + // parse file list + for line in reader.lines() { + let line = line?; + if line.is_empty() { + continue; + } + let item: FileKey = json::from_slice(line.as_bytes())?; + result.push(item); + } + } + Ok(result) +} + +#[inline] +pub async fn cache() -> Result<(), anyhow::Error> { + let files = get_all().await?; + for file in files { + super::progress(&file.key, file.meta, false).await?; + } + Ok(()) +} + +#[inline] +pub async fn broadcast_cache() -> Result<(), anyhow::Error> { + let files = get_all().await?; + if files.is_empty() { + return Ok(()); + } + super::broadcast::send(&files).await +} diff --git a/src/service/db/file_list/mod.rs b/src/service/db/file_list/mod.rs new file mode 100644 index 0000000000..a1a98f550a --- /dev/null +++ b/src/service/db/file_list/mod.rs @@ -0,0 +1,80 @@ +use crate::infra::cache; +use crate::infra::cluster; +use crate::infra::config::CONFIG; +use crate::meta::common::FileMeta; + +pub mod broadcast; +pub mod local; +pub mod remote; + +#[inline] +pub async fn progress(key: &str, data: FileMeta, delete: bool) -> Result<(), anyhow::Error> { + let old_data = cache::file_list::get_file_from_cache(key); + match delete { + true => { + let data = match old_data { + Ok(meta) => meta, + Err(_e) => { + return Ok(()); + } + }; + match cache::file_list::set_file_to_cache(key, None, true) { + Ok(_) => {} + Err(e) => { + log::error!( + "service:db:file_list: delete {}, set_file_to_cache error: {}", + key, + e + ); + } + } + match cache::stats::decr_stream_stats(key, data) { + Ok(_) => {} + Err(e) => { + log::error!( + "service:db:file_list: delete {}, incr_stream_stats error: {}", + key, + e + ); + } + } + } + false => { + match cache::file_list::set_file_to_cache(key, Some(data), false) { + Ok(_) => {} + Err(e) => { + log::error!( + "service:db:file_list: add {}, set_file_to_cache error: {}", + key, + e + ); + } + } + if CONFIG.memory_cache.cache_latest_files + && cluster::is_querier(&cluster::LOCAL_NODE_ROLE) + { + match cache::file_data::download(key).await { + Ok(_) => {} + Err(e) => { + log::error!("service:db:file_list: add {}, download error: {}", key, e); + } + } + } + if old_data.is_ok() { + return Ok(()); // already exists, skip increase stats + }; + match cache::stats::incr_stream_stats(key, data) { + Ok(_) => {} + Err(e) => { + log::error!( + "service:db:file_list: add {}, incr_stream_stats error: {}", + key, + e + ); + } + } + } + } + + Ok(()) +} diff --git a/src/service/db/file_list/remote.rs b/src/service/db/file_list/remote.rs new file mode 100644 index 0000000000..1f460e1e37 --- /dev/null +++ b/src/service/db/file_list/remote.rs @@ -0,0 +1,90 @@ +use bytes::Buf; +use dashmap::DashMap; +use std::io::{BufRead, BufReader}; +use tokio::sync::Semaphore; + +use crate::common::json; +use crate::infra::config::CONFIG; +use crate::infra::storage; +use crate::meta::common::{FileKey, FileMeta}; + +lazy_static! { + static ref DELETED_FILES: DashMap = DashMap::with_capacity(64); +} + +pub async fn cache() -> Result<(), anyhow::Error> { + log::info!("[TRACE] Load file_list begin"); + let storage = &storage::DEFAULT; + let prefix = "file_list/"; + let files = storage.list(prefix).await?; + let mut tasks = Vec::new(); + let semaphore = std::sync::Arc::new(Semaphore::new(CONFIG.limit.cpu_num)); + for file in files.iter() { + let file = file.clone(); + let permit = semaphore.clone().acquire_owned().await.unwrap(); + let task: tokio::task::JoinHandle> = + tokio::task::spawn(async move { + let count = proccess_file(storage.as_ref(), &file).await?; + drop(permit); + Ok(count) + }); + tasks.push(task); + } + + let mut count = 0; + for task in tasks { + match task.await { + Ok(ret) => match ret { + Ok(v) => { + count += v; + } + Err(e) => { + return Err(anyhow::anyhow!("[TRACE] Load file_list err: {:?}", e)); + } + }, + Err(e) => { + return Err(anyhow::anyhow!(e)); + } + }; + } + + // delete files + for item in DELETED_FILES.iter() { + super::progress(item.key(), item.value().to_owned(), true).await?; + } + + log::info!("[TRACE] Load file_list done[{}:{}]", files.len(), count); + + // clean deleted files + DELETED_FILES.clear(); + + Ok(()) +} + +async fn proccess_file( + client: &dyn storage::FileStorage, + file: &str, +) -> Result { + // download file list from storage + let data = client.get(file).await?; + // uncompress file + let uncompress = zstd::decode_all(data.reader())?; + let uncompress_reader = BufReader::new(uncompress.reader()); + // parse file list + let mut count = 0; + for line in uncompress_reader.lines() { + let line = line?; + if line.is_empty() { + continue; + } + count += 1; + let item: FileKey = json::from_slice(line.as_bytes())?; + // check deleted files + if item.deleted { + DELETED_FILES.insert(item.key, item.meta.to_owned()); + continue; + } + super::progress(&item.key, item.meta, item.deleted).await?; + } + Ok(count) +} diff --git a/src/service/db/mod.rs b/src/service/db/mod.rs new file mode 100644 index 0000000000..d7183d3462 --- /dev/null +++ b/src/service/db/mod.rs @@ -0,0 +1,109 @@ +use bytes::Bytes; +use std::sync::Arc; + +use crate::common::json; +use crate::infra::cache::stats; +use crate::infra::config::METRIC_CLUSTER_LEADER; +use crate::infra::db::Event; +use crate::meta::prom::ClusterLeader; +use crate::meta::stream::Stats; + +pub mod alerts; +pub mod compact; +pub mod dashboard; +pub mod file_list; +pub mod schema; +pub mod transform; +pub mod triggers; +pub mod udf; +pub mod user; + +pub async fn get_stream_stats( + org_id: &str, + stream_name: &str, + stream_type: &str, +) -> Result { + match stats::get_stream_stats(org_id, stream_name, stream_type) { + Some(stats) => Ok(stats), + None => { + let key = format!("/stats/{}/{}/{}", org_id, stream_type, stream_name); + let db = &crate::infra::db::DEFAULT; + let value = match db.get(&key).await { + Ok(val) => serde_json::from_slice(&val).unwrap(), + Err(_) => Stats::default(), + }; + Ok(value) + } + } +} + +pub async fn set_prom_cluster_info( + cluster: &str, + members: Vec, +) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/metrics_members/{}", cluster); + let mem_list = members + .into_iter() + .map(|val| format!("{},", val)) + .collect::(); + let members_list = mem_list.strip_suffix(',').unwrap(); + match db.put(&key, Bytes::from(members_list.to_string())).await { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } +} + +pub async fn set_prom_cluster_leader( + cluster: &str, + leader: &ClusterLeader, +) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/metrics_leader/{}", cluster); + match db.put(&key, json::to_vec(&leader).unwrap().into()).await { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } +} + +pub async fn watch_prom_cluster_leader() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/metrics_leader/"; + let mut events = db.watch(key).await?; + let events = Arc::get_mut(&mut events).unwrap(); + log::info!("[TRACE] Start watching prometheus cluster leader"); + loop { + let ev = match events.recv().await { + Some(ev) => ev, + None => { + log::error!("watch_prom_cluster_leader: event channel closed"); + break; + } + }; + match ev { + Event::Put(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let item_value: ClusterLeader = json::from_slice(&ev.value.unwrap()).unwrap(); + METRIC_CLUSTER_LEADER.insert(item_key.to_owned(), item_value); + } + Event::Delete(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + METRIC_CLUSTER_LEADER.remove(item_key); + } + } + } + Ok(()) +} + +pub async fn cache_prom_cluster_leader() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/metrics_leader/"; + let ret = db.list(key).await?; + for (item_key, item_value) in ret { + let item_key_str = item_key.strip_prefix(key).unwrap(); + let json_val: ClusterLeader = json::from_slice(&item_value).unwrap(); + METRIC_CLUSTER_LEADER.insert(item_key_str.to_string(), json_val); + } + log::info!("[TRACE] Prometheus cluster leaders Cached"); + Ok(()) +} diff --git a/src/service/db/schema.rs b/src/service/db/schema.rs new file mode 100644 index 0000000000..b60526f5dc --- /dev/null +++ b/src/service/db/schema.rs @@ -0,0 +1,304 @@ +use crate::common::json; +use crate::infra::config::STREAM_SCHEMAS; +use crate::infra::db::Event; +use crate::meta::stream::StreamSchema; +use crate::meta::StreamType; +use chrono::Utc; +use datafusion::arrow::datatypes::Schema; +use serde_json::Value; +use std::sync::Arc; + +pub async fn get( + org_id: &str, + stream_name: &str, + stream_type: Option, +) -> Result { + let mut value = Schema::empty(); + let stream_type = match stream_type { + Some(v) => v, + None => StreamType::Logs, + }; + let key = format!("/schema/{}/{}/{}", org_id, stream_type, stream_name); + let map_key = key.strip_prefix("/schema/").unwrap(); + if STREAM_SCHEMAS.contains_key(map_key) { + value = STREAM_SCHEMAS + .get(map_key) + .unwrap() + .value() + .clone() + .last() + .unwrap() + .clone(); + } else { + let db = &crate::infra::db::DEFAULT; + if let Ok(v) = db.get(&key).await { + // for backward compatibility check if value in etcd is vec or schema based on it return value + let local_val: Value = json::from_slice(&v).unwrap(); + if local_val.is_array() { + let local_vec: Vec = json::from_slice(&v).unwrap(); + value = local_vec.last().unwrap().clone(); + } else { + value = json::from_slice(&v).unwrap() + } + } + } + Ok(value) +} + +#[tracing::instrument(name = "db:schema:get_versions")] +pub async fn get_versions( + org_id: &str, + stream_name: &str, + stream_type: Option, +) -> Result, anyhow::Error> { + let mut value = vec![]; + let stream_type = match stream_type { + Some(v) => v, + None => StreamType::Logs, + }; + let key = format!("/schema/{}/{}/{}", org_id, stream_type, stream_name); + let map_key = key.strip_prefix("/schema/").unwrap(); + if STREAM_SCHEMAS.contains_key(map_key) { + value = STREAM_SCHEMAS.get(map_key).unwrap().value().clone(); + } else { + let db = &crate::infra::db::DEFAULT; + if let Ok(v) = db.get(&key).await { + // for backward compatibility check if value in etcd is vec or schema based on it return value + let local_val: Value = json::from_slice(&v).unwrap(); + if local_val.is_array() { + value = json::from_slice(&v).unwrap() + } else { + value = vec![json::from_slice(&v).unwrap()] + } + } + } + Ok(value) +} + +pub async fn set( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + schema: &Schema, + min_ts: Option, +) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/schema/{}/{}/{}", org_id, stream_type, stream_name); + let mut versions: Vec; + let map_key = key.strip_prefix("/schema/").unwrap(); + if STREAM_SCHEMAS.contains_key(map_key) { + versions = STREAM_SCHEMAS.get(map_key).unwrap().value().clone(); + if min_ts.is_some() { + //update last schema to add end date + let last_schema = versions.pop().unwrap(); + if !last_schema.fields.eq(&schema.fields) { + let mut last_meta = last_schema.metadata().clone(); + last_meta.insert("end_dt".to_string(), min_ts.unwrap().to_string()); + versions.push(last_schema.with_metadata(last_meta)); + + //update current schema to add start date + let mut metadata = schema.metadata().clone(); + metadata.insert("start_dt".to_string(), min_ts.unwrap().to_string()); + versions.push(schema.clone().with_metadata(metadata)); + let _ = db.put(&key, json::to_vec(&versions).unwrap().into()).await; + } + } else { + versions.pop().unwrap(); + versions.push(schema.clone()); + let _ = db.put(&key, json::to_vec(&versions).unwrap().into()).await; + } + } else { + let mut metadata = schema.metadata().clone(); + if metadata.contains_key("created_at") { + metadata.insert( + "start_dt".to_string(), + metadata.get("created_at").unwrap().clone(), + ); + } else { + let curr_ts = Utc::now().timestamp_micros().to_string(); + metadata.insert("start_dt".to_string(), curr_ts.clone()); + metadata.insert("created_at".to_string(), curr_ts); + } + let _ = db + .put( + &key, + json::to_vec(&vec![schema.clone().with_metadata(metadata)]) + .unwrap() + .into(), + ) + .await; + } + Ok(()) +} + +#[tracing::instrument(name = "db:schema:list")] +pub async fn list( + org_id: &str, + stream_type: Option, + fetch_schema: bool, +) -> Result, anyhow::Error> { + let mut stream_list: Vec = Vec::new(); + if STREAM_SCHEMAS.len() > 0 { + let map_key = match stream_type { + Some(stream_type_loc) => format!("{}/{}/", org_id, stream_type_loc), + None => format!("{}/", org_id), + }; + let iter = STREAM_SCHEMAS + .iter() + .filter(|entry| entry.key().contains(&map_key)); + let mut value; + for item in iter { + let item_key = item.key(); + let item_key = item_key.strip_prefix(&map_key).unwrap(); + let stream_name; + let stream_type_ret: StreamType; + match stream_type { + Some(stream_type_loc) => { + stream_name = item_key.to_string(); + stream_type_ret = stream_type_loc; + } + None => { + let columns = item_key.split('/').collect::>(); + stream_type_ret = StreamType::from(columns[0]); + stream_name = columns[1].to_string(); + } + } + if fetch_schema { + value = item.value().last().unwrap().clone(); + } else { + value = Schema::empty() + } + stream_list.push(StreamSchema { + stream_name, + stream_type: stream_type_ret, + schema: value, + }) + } + } else { + let db = &crate::infra::db::DEFAULT; + let key = match stream_type { + Some(stream_type_loc) => { + format!("/schema/{}/{}/", org_id, stream_type_loc) + } + None => format!("/schema/{}/", org_id), + }; + let ret = db.list(&key).await?; + for (item_key, item_value) in ret { + let item_key = item_key.strip_prefix(&key).unwrap(); + let stream_name; + let stream_type_ret: StreamType; + match stream_type { + Some(stream_type_loc) => { + stream_name = item_key.to_string(); + stream_type_ret = stream_type_loc; + } + None => { + let columns = item_key.split('/').collect::>(); + stream_type_ret = StreamType::from(columns[0]); + stream_name = columns[1].to_string(); + } + } + + let value = if fetch_schema { + json::from_slice(&item_value).unwrap() + } else { + Schema::empty() + }; + + stream_list.push(StreamSchema { + stream_name, + stream_type: stream_type_ret, + schema: value, + }) + } + } + Ok(stream_list) +} + +pub async fn watch() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/schema/"; + let mut events = db.watch(key).await?; + let events = Arc::get_mut(&mut events).unwrap(); + log::info!("[TRACE] Start watching stream schema"); + loop { + let ev = match events.recv().await { + Some(ev) => ev, + None => { + log::error!("watch_stream_schema: event channel closed"); + break; + } + }; + match ev { + Event::Put(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let item_value: Vec = json::from_slice(&ev.value.unwrap()).unwrap(); + STREAM_SCHEMAS.insert(item_key.to_owned(), item_value); + } + Event::Delete(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + STREAM_SCHEMAS.remove(item_key); + } + } + } + Ok(()) +} + +pub async fn cache() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/schema/"; + let ret = db.list(key).await?; + for (item_key, item_value) in ret { + let item_key_str = item_key.strip_prefix(key).unwrap(); + // Hack: compatible for DataFusion 15 + let mut item_value = item_value; + let value_str = std::str::from_utf8(&item_value).unwrap().to_string(); + if !value_str.contains(r##","metadata":{}}"##) { + let value_str = value_str.replace( + r##","dict_is_ordered":false}"##, + r##","dict_is_ordered":false,"metadata":{}}"##, + ); + item_value = bytes::Bytes::from(value_str); + } + // Hack: compatible old version, schema is an object + if item_value[0] == b'{' { + let value_str = format!("[{}]", value_str); + item_value = bytes::Bytes::from(value_str); + } + // Hack end + let json_val: Vec = match json::from_slice(&item_value) { + Ok(v) => v, + Err(e) => { + return Err(anyhow::anyhow!( + "Error parsing schema, key: {}, error: {}", + item_key, + e + )); + } + }; + STREAM_SCHEMAS.insert(item_key_str.to_string(), json_val); + } + log::info!("[TRACE] Stream schemas Cached"); + Ok(()) +} + +pub fn filter_schema_version_id(schemas: &[Schema], start_dt: i64, end_dt: i64) -> Option { + for (i, schema) in schemas.iter().enumerate() { + let metadata = schema.metadata(); + let start_dt_loc: i64 = metadata.get("start_dt").unwrap().parse().unwrap(); + if start_dt < start_dt_loc { + continue; + } + let end_dt_loc: i64 = match metadata.get("end_dt") { + Some(v) => v.parse().unwrap(), + None => { + return Some(i); + } + }; + if end_dt > end_dt_loc { + continue; + } + return Some(i); + } + None +} diff --git a/src/service/db/transform.rs b/src/service/db/transform.rs new file mode 100644 index 0000000000..df17107fcc --- /dev/null +++ b/src/service/db/transform.rs @@ -0,0 +1,81 @@ +use std::sync::Arc; + +use crate::common::json; +use crate::infra::config::{QUERY_TRANSFORMS, STREAM_TRANSFORMS}; +use crate::infra::db::Event; +use crate::meta::transform::{Transform, TransformList}; + +pub async fn watch() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/transform/"; + let mut events = db.watch(key).await?; + let events = Arc::get_mut(&mut events).unwrap(); + log::info!("[TRACE] Start watching transform"); + loop { + let ev = match events.recv().await { + Some(ev) => ev, + None => { + log::error!("watch_transforms: event channel closed"); + break; + } + }; + match ev { + Event::Put(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let trans_key = item_key[0..item_key.rfind('/').unwrap()].to_string(); + let item_value: Transform = json::from_slice(&ev.value.unwrap()).unwrap(); + if !item_value.stream_name.is_empty() { + let mut group = STREAM_TRANSFORMS + .entry(trans_key.to_string()) + .or_insert(TransformList { list: vec![] }); + if group.list.contains(&item_value) { + let stream_name = + group.list.iter().position(|x| x.eq(&item_value)).unwrap(); + let _ = std::mem::replace(&mut group.list[stream_name], item_value); + } else { + group.list.push(item_value); + } + } else { + QUERY_TRANSFORMS.insert(item_key.to_owned(), item_value); + } + } + Event::Delete(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let trans_key = item_key[0..item_key.rfind('/').unwrap()].to_string(); + let item_name = item_key[item_key.rfind('/').unwrap() + 1..].to_string(); + if trans_key.contains('/') { + let mut group = STREAM_TRANSFORMS + .get(&trans_key.to_string()) + .unwrap() + .clone(); + group.list.retain(|trans| !trans.name.eq(&item_name)); + STREAM_TRANSFORMS.insert(trans_key.to_string(), group); + } else { + STREAM_TRANSFORMS.remove(item_key); + } + } + } + } + Ok(()) +} + +pub async fn cache() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/transform/"; + let ret = db.list(key).await?; + for (item_key, item_value) in ret { + let item_key = item_key.strip_prefix(key).unwrap(); + let json_val: Transform = json::from_slice(&item_value).unwrap(); + let stream_key = &item_key[0..item_key.rfind('/').unwrap()]; + if !json_val.stream_name.is_empty() { + let mut group = STREAM_TRANSFORMS + .entry(stream_key.to_string()) + .or_insert(TransformList { list: vec![] }); + group.list.push(json_val); + } else { + QUERY_TRANSFORMS.insert(item_key.to_string(), json_val); + } + } + log::info!("[TRACE] Transforms Cached"); + Ok(()) +} diff --git a/src/service/db/triggers.rs b/src/service/db/triggers.rs new file mode 100644 index 0000000000..8510e7999d --- /dev/null +++ b/src/service/db/triggers.rs @@ -0,0 +1,84 @@ +use std::sync::Arc; + +use crate::common::json; +use crate::infra::config::{TRIGGERS, TRIGGERS_IN_PROCESS}; +use crate::infra::db::Event; +use crate::meta::alert::Trigger; + +pub async fn get(alert_name: &str) -> Result, anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/trigger/{}", alert_name); + let value: Option = match db.get(&key).await { + Ok(val) => json::from_slice(&val).unwrap(), + Err(_) => None, + }; + Ok(value) +} + +pub async fn set(alert_name: &str, trigger: Trigger) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/trigger/{}", alert_name); + db.put(&key.clone(), json::to_vec(&trigger.clone()).unwrap().into()) + .await?; + Ok(()) +} + +pub async fn delete(alert_name: &str) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = format!("/trigger/{}", alert_name); + match db.delete(&key.clone(), false).await { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } +} + +pub async fn cache() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/trigger/"; + let ret = db.list(key).await?; + for (item_key, item_value) in ret { + let item_key = item_key.strip_prefix(key).unwrap(); + let json_val: Trigger = json::from_slice(&item_value).unwrap(); + //let trigger_key = &item_key[0..item_key.rfind('/').unwrap()]; + if json_val.is_valid { + TRIGGERS.insert(item_key.to_owned(), json_val); + } + } + log::info!("[TRACE] Triggers Cached"); + Ok(()) +} + +pub async fn watch() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/trigger/"; + let mut events = db.watch(key).await?; + let events = Arc::get_mut(&mut events).unwrap(); + log::info!("[TRACE] Start watching Triggers"); + loop { + let ev = match events.recv().await { + Some(ev) => ev, + None => { + log::error!("watch_trigger: event channel closed"); + break; + } + }; + match ev { + Event::Put(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let item_value: Trigger = json::from_slice(&ev.value.unwrap()).unwrap(); + // to avoid timeour error from etcd + if item_value.is_valid { + TRIGGERS.insert(item_key.to_string(), item_value.clone()); + } else { + TRIGGERS_IN_PROCESS.remove(item_key); + TRIGGERS.remove(item_key); + } + } + Event::Delete(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + TRIGGERS.remove(item_key); + } + } + } + Ok(()) +} diff --git a/src/service/db/udf.rs b/src/service/db/udf.rs new file mode 100644 index 0000000000..2b3370877c --- /dev/null +++ b/src/service/db/udf.rs @@ -0,0 +1,64 @@ +use crate::common::json; +use crate::meta::transform::Transform; +use crate::meta::StreamType; + +pub async fn set( + org_id: &str, + stream_name: Option, + name: &str, + js_func: Transform, +) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = match stream_name { + Some(idx_name) => format!( + "/transform/{}/{}/{}/{}", + org_id, + StreamType::Logs, + idx_name, + name + ), + None => format!("/transform/{}/{}", org_id, name), + }; + db.put(&key, json::to_vec(&js_func).unwrap().into()).await?; + Ok(()) +} + +pub async fn delete( + org_id: &str, + stream_name: Option, + name: &str, +) -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = match stream_name { + Some(idx_name) => format!( + "/transform/{}/{}/{}/{}", + org_id, + StreamType::Logs, + idx_name, + name + ), + None => format!("/transform/{}/{}", org_id, name), + }; + match db.delete(&key, false).await { + Ok(_) => Ok(()), + Err(_) => Err(anyhow::anyhow!("transform not found")), + } +} + +pub async fn list( + org_id: &str, + stream_name: Option, +) -> Result, anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let mut udf_list: Vec = Vec::new(); + let key = match stream_name { + Some(idx_name) => format!("/transform/{}/{}/{}", org_id, StreamType::Logs, idx_name), + None => format!("/transform/{}", org_id), + }; + let result = db.list_values(&key).await?; + for item in result { + let json_val = json::from_slice(&item).unwrap(); + udf_list.push(json_val) + } + Ok(udf_list) +} diff --git a/src/service/db/user.rs b/src/service/db/user.rs new file mode 100644 index 0000000000..8c62db39a4 --- /dev/null +++ b/src/service/db/user.rs @@ -0,0 +1,99 @@ +use std::sync::Arc; +use tracing::info_span; + +use crate::common::json; +use crate::infra::config::USERS; +use crate::infra::db::Event; +use crate::meta::user::User; + +pub async fn get(org_id: Option<&str>, name: &str) -> Result, anyhow::Error> { + let db_span = info_span!("db:user:get"); + let _guard = db_span.enter(); + let db = &crate::infra::db::DEFAULT; + let key = match org_id { + Some(org) => format!("/user/{}/{}", org, name), + None => format!("/user/{}", name), + }; + let ret = db.get(&key).await?; + let loc_value = json::from_slice(&ret).unwrap(); + let value = Some(loc_value); + Ok(value) +} + +pub async fn set(org_id: &str, user: User) -> Result<(), anyhow::Error> { + let db_span = info_span!("db:user:set"); + let _guard = db_span.enter(); + let db = &crate::infra::db::DEFAULT; + + let key = match user.role { + crate::meta::user::Role::Admin => format!("/user/{}/{}", org_id, user.name), + crate::meta::user::Role::User => format!("/user/{}/{}", org_id, user.name), + crate::meta::user::Role::Root => format!("/user/{}", user.name), + }; + db.put(&key, json::to_vec(&user).unwrap().into()).await?; + Ok(()) +} + +pub async fn delete(org_id: &str, name: &str) -> Result<(), anyhow::Error> { + let db_span = info_span!("db:user:delete"); + let _guard = db_span.enter(); + let db = &crate::infra::db::DEFAULT; + let key = format!("/user/{}/{}", org_id, name); + match db.delete(&key, false).await { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!(e)), + } +} + +pub async fn watch() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/user/"; + let mut events = db.watch(key).await?; + let events = Arc::get_mut(&mut events).unwrap(); + log::info!("[TRACE] Start watching user"); + loop { + let ev = match events.recv().await { + Some(ev) => ev, + None => { + log::error!("watch_users: event channel closed"); + break; + } + }; + match ev { + Event::Put(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + let item_value: User = json::from_slice(&ev.value.unwrap()).unwrap(); + USERS.insert(item_key.to_owned(), item_value); + } + Event::Delete(ev) => { + let item_key = ev.key.strip_prefix(key).unwrap(); + USERS.remove(item_key); + } + } + } + Ok(()) +} + +pub async fn cache() -> Result<(), anyhow::Error> { + let db = &crate::infra::db::DEFAULT; + let key = "/user/"; + let ret = db.list(key).await?; + for (item_key, item_value) in ret { + let item_key = item_key.strip_prefix(key).unwrap(); + let json_val: User = json::from_slice(&item_value).unwrap(); + USERS.insert(item_key.to_string(), json_val); + } + log::info!("[TRACE] Users Cached"); + Ok(()) +} + +pub async fn get_root_user(name: &str) -> Result, anyhow::Error> { + let db_span = info_span!("db:user:get_root"); + let _guard = db_span.enter(); + let db = &crate::infra::db::DEFAULT; + let key = format!("/user/{}", name); + let ret = db.get(&key).await?; + let loc_value = json::from_slice(&ret).unwrap(); + let value = Some(loc_value); + Ok(value) +} diff --git a/src/service/file_list.rs b/src/service/file_list.rs new file mode 100644 index 0000000000..e8f608f963 --- /dev/null +++ b/src/service/file_list.rs @@ -0,0 +1,80 @@ +use crate::common; +use crate::infra::cache::file_list; +use crate::meta::common::FileMeta; +use crate::meta::StreamType; + +#[inline] +#[tracing::instrument(name = "service:file_list:get_file_list")] +pub async fn get_file_list( + org_id: &str, + stream_name: &str, + stream_type: Option, + time_min: i64, + time_max: i64, +) -> Result, anyhow::Error> { + let stream_type_loc = match stream_type { + Some(v) => v, + None => StreamType::Logs, + }; + file_list::get_file_list(org_id, stream_name, stream_type_loc, time_min, time_max).await +} + +#[inline] +#[tracing::instrument(name = "service:file_list:get_file_meta")] +pub async fn get_file_meta(file: &str) -> Result { + match file_list::get_file_from_cache(file) { + Ok(v) => Ok(v), + Err(_) => Ok(FileMeta::default()), + } +} + +#[inline] +#[tracing::instrument(name = "service:file_list:calculate_files_size", skip(files))] +pub async fn calculate_files_size(files: &[String]) -> Result { + let mut size = 0; + for file in files { + let resp = get_file_meta(file).await.unwrap_or_default(); + size += resp.original_size; + } + Ok(size) +} + +#[inline] +#[tracing::instrument(name = "service:file_list:calculate_local_files_size", skip(files))] +pub async fn calculate_local_files_size(files: &[String]) -> Result { + let mut size = 0; + for file in files { + let file_size = match common::file::get_file_meta(file) { + Ok(resp) => resp.len(), + Err(_) => 0, + }; + size += file_size; + } + Ok(size) +} + +#[cfg(test)] +mod test { + use super::*; + #[actix_web::test] + async fn test_get_file_meta() { + let res = get_file_meta( + "files/default/logs/olympics/2022/10/03/10/6982652937134804993_1.parquet", + ) + .await; + // println!("{:?}", res); + assert!(res.is_ok()); + } + #[actix_web::test] + async fn test_get_file_list() { + let res = get_file_list( + "default", + "olympics", + Some(StreamType::Logs), + 1663064862606912, + 1663064862606912, + ) + .await; + assert!(res.is_ok()); + } +} diff --git a/src/service/logs/bulk.rs b/src/service/logs/bulk.rs new file mode 100644 index 0000000000..04057d8660 --- /dev/null +++ b/src/service/logs/bulk.rs @@ -0,0 +1,290 @@ +use actix_web::{http, web, HttpResponse}; +use ahash::AHashMap; +use bytes::{BufMut, BytesMut}; +use chrono::{Duration, Utc}; +use datafusion::arrow::datatypes::Schema; +use mlua::{Function, Lua}; +use prometheus::GaugeVec; +use serde_json::Value; +use std::fs::OpenOptions; +use std::io::{BufRead, BufReader, Error}; + +use super::StreamMeta; +use crate::common::json; +use crate::infra::cluster; +use crate::infra::config::CONFIG; +use crate::infra::file_lock; +use crate::meta::alert::Alert; +use crate::meta::http::HttpResponse as MetaHttpResponse; +use crate::meta::ingestion::{ + IngestionResponse, RecordStatus, StreamData, StreamSchemaChk, StreamStatus, +}; +use crate::meta::transform::Transform; +use crate::meta::StreamType; +use crate::service::schema::{add_stream_schema, stream_schema_exists}; +use crate::{common::time::parse_timestamp_micro_from_value, meta::alert::Trigger}; + +pub async fn ingest( + org_id: &str, + body: actix_web::web::Bytes, + thread_id: web::Data, + ingest_stats: web::Data, +) -> Result { + // let loc_span = info_span!("service:logs:bulk:ingest"); + // let _guard = loc_span.enter(); + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok( + HttpResponse::InternalServerError().json(MetaHttpResponse::error( + http::StatusCode::INTERNAL_SERVER_ERROR.into(), + Some("not an ingester".to_string()), + )), + ); + } + let mut min_ts = (Utc::now() + Duration::hours(CONFIG.limit.allowed_upto)).timestamp_micros(); + let lua = Lua::new(); + let mut stream_file_map: AHashMap = AHashMap::new(); + let mut stream_schema_map: AHashMap = AHashMap::new(); + let mut stream_data_map = AHashMap::new(); + let mut stream_tansform_map: AHashMap> = AHashMap::new(); + let mut stream_partition_keys_map: AHashMap)> = + AHashMap::new(); + let mut stream_alerts_map: AHashMap> = AHashMap::new(); + let mut stream_lua_map: AHashMap = AHashMap::new(); + let mut stream_name = String::from(""); + let mut stream_trigger_map: AHashMap = AHashMap::new(); + + let mut next_line_is_data = false; + let reader = BufReader::new(body.as_ref()); + for line in reader.lines() { + let line = line?; + if line.is_empty() { + continue; + } + let mut value: Value = json::from_slice(line.as_bytes())?; + if !next_line_is_data { + // check bulk operate + if value.get("delete").is_some() { + continue; // skip, we don't support delete + } + next_line_is_data = true; + stream_name = super::get_stream_name(&value); + + // Start Register Transfoms for stream + let key = format!("{}/{}/{}", &org_id, StreamType::Logs, &stream_name); + super::get_stream_transforms( + key, + stream_name.clone(), + &mut stream_tansform_map, + &mut stream_lua_map, + &lua, + //scope, + ) + .await; + // End Register Transfoms for index + + // Start get stream alerts + let key = format!("{}/{}", &org_id, &stream_name); + super::get_stream_alerts(key, &mut stream_alerts_map).await; + // End get stream alert + + if !stream_partition_keys_map.contains_key(&stream_name.clone()) { + let stream_schema = stream_schema_exists( + org_id, + &stream_name, + StreamType::Logs, + &mut stream_schema_map, + ) + .await; + let mut partition_keys: Vec = vec![]; + if stream_schema.has_partition_keys { + partition_keys = super::get_stream_partition_keys( + stream_name.clone(), + stream_schema_map.clone(), + ) + .await; + } + stream_partition_keys_map + .insert(stream_name.clone(), (stream_schema, partition_keys.clone())); + } + + stream_data_map + .entry(stream_name.clone()) + .or_insert(StreamData { + data: AHashMap::new(), + status: RecordStatus { + successful: 0, + failed: 0, + msg: "".to_string(), + }, + }); + + stream_file_map + .entry(stream_name.clone()) + .or_insert_with(|| String::from("")); + } else { + next_line_is_data = false; + + let stream_data = stream_data_map.get_mut(&stream_name).unwrap(); + let buf = &mut stream_data.data; + let status = &mut stream_data.status; + + //Start row based transform + let key = format!("{}/{}/{}", &org_id, StreamType::Logs, &stream_name); + if let Some(transforms) = stream_tansform_map.get(&key) { + for trans in transforms { + let func_key = format!("{}/{}", &stream_name, trans.name); + value = + super::lua_transform(&lua, &value, stream_lua_map.get(&func_key).unwrap()); + } + } + if value.is_null() || !value.is_object() { + status.failed += 1; // transform failed or dropped + continue; + } + //End row based transform + + //JSON Flattening + let mut value = json::flatten_json(&value); + // get json object + let local_val = value.as_object_mut().unwrap(); + + // Rename columns starting with @ Start + for (key, entry) in local_val.clone() { + if key.starts_with('@') { + local_val.remove(&key); + let new_key = key.replace('@', "_"); + local_val.insert(new_key, entry); + } + } + + // handle timestamp + let timestamp = match local_val.get(&CONFIG.common.time_stamp_col) { + Some(v) => match parse_timestamp_micro_from_value(v) { + Ok(t) => t, + Err(e) => { + status.failed += 1; + status.msg = e.to_string(); + continue; + } + }, + None => Utc::now().timestamp_micros(), + }; + // check ingestion time + let earlest_time = Utc::now() + Duration::hours(0 - CONFIG.limit.allowed_upto); + if timestamp < earlest_time.timestamp_micros() { + status.failed += 1; // to old data, just discard + continue; + } + if timestamp < min_ts { + min_ts = timestamp; + } + local_val.insert( + CONFIG.common.time_stamp_col.clone(), + Value::Number(timestamp.into()), + ); + let partition_keys: Vec = match stream_partition_keys_map.get(&stream_name) { + Some((_, partition_keys)) => partition_keys.to_vec(), + None => vec![], + }; + + let local_trigger = super::add_valid_record( + StreamMeta { + org_id: org_id.to_string(), + stream_name: stream_name.clone(), + partition_keys, + stream_alerts_map: stream_alerts_map.clone(), + }, + &mut stream_schema_map, + status, + buf, + local_val, + ) + .await; + if local_trigger.is_some() { + stream_trigger_map.insert(stream_name.clone(), local_trigger.unwrap()); + } + } + } + + let mut response_vec: Vec = Vec::new(); + for (stream_name, stream_data) in stream_data_map { + // write to file + let mut stream_file_name = "".to_string(); + let mut write_buf = BytesMut::new(); + for (key, entry) in stream_data.data { + if entry.is_empty() { + continue; + } + write_buf.clear(); + for row in &entry { + write_buf.put(row.as_bytes()); + write_buf.put("\n".as_bytes()); + } + let file = file_lock::get_or_create( + *thread_id.as_ref(), + org_id, + &stream_name, + StreamType::Logs, + &key, + ); + if stream_file_name.is_empty() { + stream_file_name = file.full_name(); + } + file.write(write_buf.as_ref()); + + // metrics + ingest_stats + .with_label_values(&[org_id, &stream_name, "records"]) + .add(entry.len() as f64); + ingest_stats + .with_label_values(&[org_id, &stream_name, "original_size"]) + .add(write_buf.len() as f64); + } + + // metrics + ingest_stats + .with_label_values(&[org_id, &stream_name, "req_num"]) + .inc(); + + response_vec.push(StreamStatus { + name: stream_name.to_string(), + status: stream_data.status, + }); + + let schema_exists = stream_partition_keys_map.get(&stream_name).unwrap(); + if !schema_exists.0.has_fields { + let file = OpenOptions::new() + .read(true) + .open(&stream_file_name) + .unwrap(); + add_stream_schema( + org_id, + &stream_name, + StreamType::Logs, + &file, + &mut stream_schema_map, + min_ts, + ) + .await; + } + } + + // only one trigger per request, as it updates etcd + for (_, entry) in &stream_trigger_map { + let mut alerts = stream_alerts_map + .get(&format!("{}/{}", entry.org, entry.stream)) + .unwrap() + .clone(); + + alerts.retain(|alert| alert.name.eq(&entry.alert_name)); + if !alerts.is_empty() { + super::send_ingest_notification(entry.clone(), alerts.first().unwrap().clone()).await; + } + } + + //dispose_v8(); + Ok(HttpResponse::Ok().json(IngestionResponse::new( + http::StatusCode::OK.into(), + response_vec, + ))) +} diff --git a/src/service/logs/json.rs b/src/service/logs/json.rs new file mode 100644 index 0000000000..ada1dd15da --- /dev/null +++ b/src/service/logs/json.rs @@ -0,0 +1,243 @@ +use actix_web::{http, web, HttpResponse}; +use ahash::AHashMap; +use bytes::{BufMut, BytesMut}; +use chrono::{Duration, Utc}; +use datafusion::arrow::datatypes::Schema; +use mlua::{Function, Lua}; +use prometheus::GaugeVec; +use serde_json::Value; +use std::{fs::OpenOptions, io::Error}; + +use super::StreamMeta; +use crate::common::json; +use crate::common::time::parse_timestamp_micro_from_value; +use crate::infra::cluster; +use crate::infra::config::{CONFIG, STREAM_TRANSFORMS}; +use crate::infra::file_lock; +use crate::meta::alert::{Alert, Trigger}; +use crate::meta::http::HttpResponse as MetaHttpResponse; +use crate::meta::ingestion::{IngestionResponse, RecordStatus, StreamStatus}; +use crate::meta::transform::Transform; +use crate::meta::StreamType; +use crate::service::schema::{add_stream_schema, stream_schema_exists}; + +pub async fn ingest( + org_id: &str, + stream_name: &str, + body: actix_web::web::Bytes, + thread_id: web::Data, + ingest_stats: web::Data, +) -> Result { + // let loc_span = info_span!("service:logs:json:ingest"); + // let _guard = loc_span.enter(); + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok( + HttpResponse::InternalServerError().json(MetaHttpResponse::error( + http::StatusCode::INTERNAL_SERVER_ERROR.into(), + Some("not an ingester".to_string()), + )), + ); + } + + let mut min_ts = (Utc::now() + Duration::hours(CONFIG.limit.allowed_upto)).timestamp_micros(); + let lua = Lua::new(); + let mut stream_schema_map: AHashMap = AHashMap::new(); + let mut stream_lua_map: AHashMap = AHashMap::new(); + let mut stream_alerts_map: AHashMap> = AHashMap::new(); + let mut stream_status = StreamStatus { + name: stream_name.to_owned(), + status: RecordStatus { + successful: 0, + failed: 0, + msg: "".to_string(), + }, + }; + + let mut trigger: Option = None; + // Start Register Transfoms for stream + let mut local_tans: Vec = vec![]; + let key = format!("{}/{}/{}", &org_id, StreamType::Logs, &stream_name); + if let Some(transforms) = STREAM_TRANSFORMS.get(&key) { + local_tans = (*transforms.list).to_vec(); + local_tans.sort_by(|a, b| a.order.cmp(&b.order)); + let mut func: Function; + for trans in &local_tans { + let func_key = format!("{}/{}", &stream_name, trans.name); + func = super::load_lua_transform(&lua, trans.function.clone()); + stream_lua_map.insert(func_key, func.to_owned()); + } + } + // End Register Transfoms for stream + + let stream_schema = stream_schema_exists( + org_id, + stream_name, + StreamType::Logs, + &mut stream_schema_map, + ) + .await; + let mut partition_keys: Vec = vec![]; + if stream_schema.has_partition_keys { + partition_keys = + super::get_stream_partition_keys(stream_name.to_string(), stream_schema_map.clone()) + .await; + } + + // Start get stream alerts + let key = format!("{}/{}", &org_id, &stream_name); + super::get_stream_alerts(key, &mut stream_alerts_map).await; + // End get stream alert + + let mut buf: AHashMap> = AHashMap::new(); + let body_vec = body.to_vec(); + let reader: Vec = json::from_slice(&body_vec)?; + for item in reader.iter() { + let mut value = item.to_owned(); + + //Start row based transform + for trans in &local_tans { + let func_key = format!("{}/{}", &stream_name, trans.name); + value = super::lua_transform(&lua, &value, stream_lua_map.get(&func_key).unwrap()); + } + if value.is_null() || !value.is_object() { + stream_status.status.failed += 1; // transform failed or dropped + continue; + } + //End row based transform + + //JSON Flattening + let mut value = json::flatten_json(&value); + // get json object + let local_val = value.as_object_mut().unwrap(); + + // Rename columns starting with @ Start + for (key, entry) in local_val.clone() { + if key.starts_with('@') { + local_val.remove(&key); + let new_key = key.replace('@', "_"); + local_val.insert(new_key, entry); + } + } + + // handle timestamp + let timestamp = match local_val.get(&CONFIG.common.time_stamp_col) { + Some(v) => match parse_timestamp_micro_from_value(v) { + Ok(t) => t, + Err(e) => { + stream_status.status.failed += 1; + stream_status.status.msg = e.to_string(); + continue; + } + }, + None => Utc::now().timestamp_micros(), + }; + // check ingestion time + let earlest_time = Utc::now() + Duration::hours(0 - CONFIG.limit.allowed_upto); + if timestamp < earlest_time.timestamp_micros() { + stream_status.status.failed += 1; // to old data, just discard + continue; + } + if timestamp < min_ts { + min_ts = timestamp; + } + local_val.insert( + CONFIG.common.time_stamp_col.clone(), + Value::Number(timestamp.into()), + ); + + let local_trigger = super::add_valid_record( + StreamMeta { + org_id: org_id.to_string(), + stream_name: stream_name.to_string(), + partition_keys: partition_keys.clone(), + stream_alerts_map: stream_alerts_map.clone(), + }, + &mut stream_schema_map, + &mut stream_status.status, + &mut buf, + local_val, + ) + .await; + + if local_trigger.is_some() { + trigger = Some(local_trigger.unwrap()); + } + } + + // write to file + let mut index_file_name = "".to_string(); + let mut write_buf = BytesMut::new(); + for (key, entry) in buf { + if entry.is_empty() { + continue; + } + write_buf.clear(); + for row in &entry { + write_buf.put(row.as_bytes()); + write_buf.put("\n".as_bytes()); + } + let file = file_lock::get_or_create( + *thread_id.as_ref(), + org_id, + stream_name, + StreamType::Logs, + &key, + ); + if index_file_name.is_empty() { + index_file_name = file.full_name(); + } + file.write(write_buf.as_ref()); + + // metrics + ingest_stats + .with_label_values(&[org_id, stream_name, "records"]) + .add(entry.len() as f64); + ingest_stats + .with_label_values(&[org_id, stream_name, "original_size"]) + .add(write_buf.len() as f64); + } + + if index_file_name.is_empty() { + return Ok(HttpResponse::Ok().json(IngestionResponse::new( + http::StatusCode::OK.into(), + vec![stream_status], + ))); + } + + // only one trigger per request, as it updates etcd + if trigger.is_some() { + let val = trigger.unwrap(); + let mut alerts = stream_alerts_map + .get(&format!("{}/{}", val.org, val.stream)) + .unwrap() + .clone(); + + alerts.retain(|alert| alert.name.eq(&val.alert_name)); + if !alerts.is_empty() { + super::send_ingest_notification(val.clone(), alerts.first().unwrap().clone()).await; + } + } + + ingest_stats + .with_label_values(&[org_id, stream_name, "req_num"]) + .inc(); + + if !stream_schema.has_fields { + let file = OpenOptions::new().read(true).open(index_file_name).unwrap(); + add_stream_schema( + org_id, + stream_name, + StreamType::Logs, + &file, + &mut stream_schema_map, + min_ts, + ) + .await; + } + + //Ok(HttpResponse::Ok().json(stream_status)) + Ok(HttpResponse::Ok().json(IngestionResponse::new( + http::StatusCode::OK.into(), + vec![stream_status], + ))) +} diff --git a/src/service/logs/mod.rs b/src/service/logs/mod.rs new file mode 100644 index 0000000000..fe3445dd16 --- /dev/null +++ b/src/service/logs/mod.rs @@ -0,0 +1,403 @@ +use super::triggers; +use crate::common; +use crate::common::notification::send_notification; +use crate::infra::config::{CONFIG, STREAM_ALERTS, STREAM_TRANSFORMS}; +use crate::meta::alert::{Alert, Evaluate, Trigger}; +use crate::meta::ingestion::RecordStatus; +use crate::meta::transform::Transform; +use crate::meta::StreamType; +use crate::service::schema::check_for_schema; +use ahash::AHashMap; +use arrow_schema::{DataType, Field}; +use chrono::{TimeZone, Utc}; +use datafusion::arrow::datatypes::Schema; +use mlua::{Function, Lua, LuaSerdeExt, Value as LuaValue}; +use serde_json::json; +use serde_json::{Map, Value}; + +pub mod bulk; +pub mod json; +pub mod multi; + +fn get_stream_name(v: &Value) -> String { + let local_val = v.as_object().unwrap(); + if local_val.contains_key("index") { + String::from( + local_val + .get("index") + .unwrap() + .as_object() + .unwrap() + .get("_index") + .unwrap() + .as_str() + .unwrap(), + ) + } else { + String::from( + local_val + .get("create") + .unwrap() + .as_object() + .unwrap() + .get("_index") + .unwrap() + .as_str() + .unwrap(), + ) + } +} + +fn load_lua_transform(lua: &Lua, js_func: String) -> Function { + lua.load(&js_func).eval().unwrap() +} + +fn lua_transform(lua: &Lua, row: &Value, func: &Function) -> Value { + let input = lua.to_value(&row).unwrap(); + let _res = func.call::<_, LuaValue>(input); + match _res { + Ok(res) => lua.from_value(res).unwrap(), + Err(err) => { + log::error!("Err from lua {:?}", err.to_string()); + row.clone() + } + } +} + +async fn get_stream_transforms<'a>( + key: String, + stream_name: String, + stream_tansform_map: &mut AHashMap>, + stream_lua_map: &mut AHashMap>, + lua: &'a Lua, +) { + if stream_tansform_map.contains_key(&key) { + return; + } + let transforms = STREAM_TRANSFORMS.get(&key); + if transforms.is_none() { + return; + } + + let mut func: Function; + let mut local_tans: Vec = (*transforms.unwrap().list).to_vec(); + local_tans.sort_by(|a, b| a.order.cmp(&b.order)); + for trans in &local_tans { + let func_key = format!("{}/{}", &stream_name, trans.name); + func = load_lua_transform(lua, trans.function.clone()); + stream_lua_map.insert(func_key, func.to_owned()); + } + stream_tansform_map.insert(key, local_tans.clone()); +} + +async fn get_stream_alerts<'a>(key: String, stream_alerts_map: &mut AHashMap>) { + if stream_alerts_map.contains_key(&key) { + return; + } + let alerts_list = STREAM_ALERTS.get(&key); + if alerts_list.is_none() { + return; + } + let mut alerts = alerts_list.unwrap().list.clone(); + alerts.retain(|alert| alert.is_ingest_time); + stream_alerts_map.insert(key, alerts); +} + +async fn get_stream_partition_keys( + index_name: String, + index_schema_map: AHashMap, +) -> Vec { + let mut keys: Vec = vec![]; + if index_schema_map.contains_key(&index_name) { + let schema = index_schema_map.get(&index_name).unwrap(); + let mut meta = schema.metadata().clone(); + meta.remove("created_at"); + let mut v: Vec<_> = meta.into_iter().collect(); + v.sort(); + for (_, value) in v { + keys.push(value); + } + } + keys +} + +// generate partition key for the record +pub fn get_partition_key_str(s: &str) -> String { + let s = s.replace(['/', '_'], "."); + if s.len() > 100 { + s[0..100].to_string() + } else { + s + } +} + +pub fn cast_to_type(mut value: Value, delta: Vec) -> Option { + let local_map = value.as_object_mut().unwrap(); + let mut parse_error = false; + for field in delta { + let field_map = local_map.get(field.name()); + if let Some(val) = field_map { + if val.is_null() { + local_map.insert(field.name().clone(), val.clone()); + continue; + } + let local_val = get_value(val); + match field.data_type() { + DataType::Boolean => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Int8 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Int16 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Int32 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Int64 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::UInt8 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::UInt16 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::UInt32 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::UInt64 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Float16 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Float32 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Float64 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + DataType::Utf8 => { + match local_val.parse::() { + Ok(val) => { + local_map.insert(field.name().clone(), val.into()); + } + Err(_) => parse_error = true, + }; + } + _ => println!("{:?}", local_val), + }; + } + } + if !parse_error { + Some(common::json::to_string(&local_map).unwrap()) + } else { + None + } +} + +pub fn get_value(value: &Value) -> String { + if value.is_boolean() { + value.as_bool().unwrap().to_string() + } else if value.is_f64() { + value.as_f64().unwrap().to_string() + } else if value.is_i64() { + value.as_i64().unwrap().to_string() + } else if value.is_u64() { + value.as_u64().unwrap().to_string() + } else if value.is_string() { + value.as_str().unwrap().to_string() + } else { + "".to_string() + } +} + +async fn add_valid_record( + stream_meta: StreamMeta, + stream_schema_map: &mut AHashMap, + status: &mut RecordStatus, + buf: &mut AHashMap>, + local_val: &mut Map, +) -> Option { + let mut trigger: Option = None; + let timestamp: i64 = local_val + .get(&CONFIG.common.time_stamp_col.clone()) + .unwrap() + .as_i64() + .unwrap(); + // get hour key + let hour_key = get_hour_key(timestamp, stream_meta.partition_keys, local_val); + let hour_buf = buf.entry(hour_key.clone()).or_default(); + + let mut value_str = common::json::to_string(&local_val).unwrap(); + // check schema + let (schema_conformance, delta_fields) = check_for_schema( + &stream_meta.org_id, + &stream_meta.stream_name, + StreamType::Logs, + &value_str, + stream_schema_map, + timestamp, + ) + .await; + + if schema_conformance { + let valid_record = if delta_fields.is_some() { + let delta = delta_fields.unwrap(); + let loc_value: Value = common::json::from_slice(value_str.as_bytes()).unwrap(); + let ret_val = cast_to_type(loc_value, delta); + if ret_val.is_some() { + value_str = ret_val.unwrap(); + true + } else { + status.failed += 1; + false + } + } else { + true + }; + + if valid_record { + if !stream_meta.stream_alerts_map.is_empty() { + // Start check for alert trigger + let key = format!("{}/{}", &stream_meta.org_id, &stream_meta.stream_name); + if let Some(alerts) = stream_meta.stream_alerts_map.get(&key) { + for alert in alerts { + if alert.is_ingest_time { + let set_trigger = alert.condition.evaluate(local_val.clone()); + if set_trigger { + // let _ = triggers::save_trigger(alert.name.clone(), trigger).await; + trigger = Some(Trigger { + timestamp, + is_valid: true, + alert_name: alert.name.clone(), + stream: stream_meta.stream_name.to_string(), + org: stream_meta.org_id.to_string(), + last_sent_at: 0, + count: 0, + is_ingest_time: true, + }); + } + } + } + } + // End check for alert trigger + } + hour_buf.push(value_str); + status.successful += 1; + }; + } else { + status.failed += 1; + } + trigger +} + +fn get_hour_key( + timestamp: i64, + partition_keys: Vec, + local_val: &mut Map, +) -> String { + // get hour file name + let mut hour_key = Utc + .timestamp_nanos(timestamp * 1000) + .format("%Y_%m_%d_%H") + .to_string(); + + for key in &partition_keys { + match local_val.get(key) { + Some(v) => { + let val = if v.is_string() { + format!("{}={}", key, v.as_str().unwrap()) + } else { + format!("{}={}", key, v) + }; + hour_key.push_str(&format!("_{}", get_partition_key_str(&val))); + } + None => continue, + }; + } + hour_key +} + +struct StreamMeta { + org_id: String, + stream_name: String, + partition_keys: Vec, + stream_alerts_map: AHashMap>, +} + +pub async fn send_ingest_notification(mut trigger: Trigger, alert: Alert) { + let msg = json!({ + "text": + format!( + "For stream {} of organization {} alert {} is active", + &trigger.stream, &trigger.org, &trigger.alert_name + ) + }); + let _ = send_notification(&alert.destination, msg).await; + trigger.last_sent_at = Utc::now().timestamp_micros(); + trigger.count += 1; + let _ = triggers::save_trigger(trigger.alert_name.clone(), trigger.clone()).await; +} diff --git a/src/service/logs/multi.rs b/src/service/logs/multi.rs new file mode 100644 index 0000000000..ad700bca73 --- /dev/null +++ b/src/service/logs/multi.rs @@ -0,0 +1,243 @@ +use actix_web::{http, web, HttpResponse}; +use ahash::AHashMap; +use bytes::{BufMut, BytesMut}; +use chrono::{Duration, Utc}; +use datafusion::arrow::datatypes::Schema; +use mlua::{Function, Lua}; +use prometheus::GaugeVec; +use serde_json::Value; +use std::fs::OpenOptions; +use std::io::{BufRead, BufReader, Error}; + +use crate::common::json; +use crate::common::time::parse_timestamp_micro_from_value; +use crate::infra::cluster; +use crate::infra::config::{CONFIG, STREAM_TRANSFORMS}; +use crate::infra::file_lock; +use crate::meta::alert::{Alert, Trigger}; +use crate::meta::http::HttpResponse as MetaHttpResponse; +use crate::meta::ingestion::{IngestionResponse, RecordStatus, StreamStatus}; +use crate::meta::transform::Transform; +use crate::meta::StreamType; +use crate::service::logs::StreamMeta; +use crate::service::schema::{add_stream_schema, stream_schema_exists}; + +pub async fn ingest( + org_id: &str, + stream_name: &str, + body: actix_web::web::Bytes, + thread_id: web::Data, + ingest_stats: web::Data, +) -> Result { + // let loc_span = info_span!("service:logs:multi:ingest"); + // let _guard = loc_span.enter(); + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok( + HttpResponse::InternalServerError().json(MetaHttpResponse::error( + http::StatusCode::INTERNAL_SERVER_ERROR.into(), + Some("not an ingester".to_string()), + )), + ); + } + + let mut min_ts = (Utc::now() + Duration::hours(CONFIG.limit.allowed_upto)).timestamp_micros(); + let lua = Lua::new(); + let mut stream_schema_map: AHashMap = AHashMap::new(); + let mut stream_lua_map: AHashMap = AHashMap::new(); + let mut stream_alerts_map: AHashMap> = AHashMap::new(); + let mut stream_status = StreamStatus { + name: stream_name.to_owned(), + status: RecordStatus { + successful: 0, + failed: 0, + msg: "".to_string(), + }, + }; + let mut trigger: Option = None; + + // Start Register Transfoms for stream + let mut local_tans: Vec = vec![]; + let key = format!("{}/{}/{}", &org_id, StreamType::Logs, &stream_name); + if let Some(transforms) = STREAM_TRANSFORMS.get(&key) { + local_tans = (*transforms.list).to_vec(); + local_tans.sort_by(|a, b| a.order.cmp(&b.order)); + let mut func: Function; + for trans in &local_tans { + let func_key = format!("{}/{}", &stream_name, trans.name); + func = super::load_lua_transform(&lua, trans.function.clone()); + stream_lua_map.insert(func_key, func.to_owned()); + } + } + // End Register Transfoms for stream + + let stream_schema = stream_schema_exists( + org_id, + stream_name, + StreamType::Logs, + &mut stream_schema_map, + ) + .await; + let mut partition_keys: Vec = vec![]; + if stream_schema.has_partition_keys { + partition_keys = + super::get_stream_partition_keys(stream_name.to_string(), stream_schema_map.clone()) + .await; + } + // Start get stream alerts + let key = format!("{}/{}", &org_id, &stream_name); + super::get_stream_alerts(key, &mut stream_alerts_map).await; + // End get stream alert + + let mut buf: AHashMap> = AHashMap::new(); + let reader = BufReader::new(body.as_ref()); + for line in reader.lines() { + let line = line?; + if line.is_empty() { + continue; + } + let mut value: Value = json::from_slice(line.as_bytes())?; + + // Start row based transform + for trans in &local_tans { + let func_key = format!("{}/{}", &stream_name, trans.name); + value = super::lua_transform(&lua, &value, stream_lua_map.get(&func_key).unwrap()); + } + if value.is_null() || !value.is_object() { + stream_status.status.failed += 1; // transform failed or dropped + continue; + } + // End row based transform + + // JSON Flattening + let mut value = json::flatten_json(&value); + // get json object + let local_val = value.as_object_mut().unwrap(); + + // Rename columns starting with @ Start + for (key, entry) in local_val.clone() { + if key.starts_with('@') { + local_val.remove(&key); + let new_key = key.replace('@', "_"); + local_val.insert(new_key, entry); + } + } + + // handle timestamp + let timestamp = match local_val.get(&CONFIG.common.time_stamp_col) { + Some(v) => match parse_timestamp_micro_from_value(v) { + Ok(t) => t, + Err(e) => { + stream_status.status.failed += 1; + stream_status.status.msg = e.to_string(); + continue; + } + }, + None => Utc::now().timestamp_micros(), + }; + // check ingestion time + let earlest_time = Utc::now() + Duration::hours(0 - CONFIG.limit.allowed_upto); + if timestamp < earlest_time.timestamp_micros() { + stream_status.status.failed += 1; // to old data, just discard + continue; + } + if timestamp < min_ts { + min_ts = timestamp; + } + local_val.insert( + CONFIG.common.time_stamp_col.clone(), + Value::Number(timestamp.into()), + ); + let local_trigger = super::add_valid_record( + StreamMeta { + org_id: org_id.to_string(), + stream_name: stream_name.to_string(), + partition_keys: partition_keys.clone(), + stream_alerts_map: stream_alerts_map.clone(), + }, + &mut stream_schema_map, + &mut stream_status.status, + &mut buf, + local_val, + ) + .await; + + if local_trigger.is_some() { + trigger = Some(local_trigger.unwrap()); + } + } + + // write to file + let mut index_file_name = "".to_string(); + let mut write_buf = BytesMut::new(); + for (key, entry) in buf { + if entry.is_empty() { + continue; + } + write_buf.clear(); + for row in &entry { + write_buf.put(row.as_bytes()); + write_buf.put("\n".as_bytes()); + } + let file = file_lock::get_or_create( + *thread_id.as_ref(), + org_id, + stream_name, + StreamType::Logs, + &key, + ); + if index_file_name.is_empty() { + index_file_name = file.full_name(); + } + file.write(write_buf.as_ref()); + + // metrics + ingest_stats + .with_label_values(&[org_id, stream_name, "records"]) + .add(entry.len() as f64); + ingest_stats + .with_label_values(&[org_id, stream_name, "original_size"]) + .add(write_buf.len() as f64); + } + + if index_file_name.is_empty() { + return Ok(HttpResponse::Ok().json(IngestionResponse::new( + http::StatusCode::OK.into(), + vec![stream_status], + ))); + } + + // only one trigger per request, as it updates etcd + if trigger.is_some() { + let val = trigger.unwrap(); + let mut alerts = stream_alerts_map + .get(&format!("{}/{}", val.org, val.stream)) + .unwrap() + .clone(); + + alerts.retain(|alert| alert.name.eq(&val.alert_name)); + if !alerts.is_empty() { + super::send_ingest_notification(val.clone(), alerts.first().unwrap().clone()).await; + } + } + + ingest_stats + .with_label_values(&[org_id, stream_name, "req_num"]) + .inc(); + + if !stream_schema.has_fields { + let file = OpenOptions::new().read(true).open(index_file_name).unwrap(); + add_stream_schema( + org_id, + stream_name, + StreamType::Logs, + &file, + &mut stream_schema_map, + min_ts, + ) + .await; + } + Ok(HttpResponse::Ok().json(IngestionResponse::new( + http::StatusCode::OK.into(), + vec![stream_status], + ))) +} diff --git a/src/service/metrics/mod.rs b/src/service/metrics/mod.rs new file mode 100644 index 0000000000..39261859ee --- /dev/null +++ b/src/service/metrics/mod.rs @@ -0,0 +1,336 @@ +use actix_web::{http, HttpResponse}; +use ahash::AHashMap; +use bytes::{BufMut, BytesMut}; +use chrono::{Duration, TimeZone, Utc}; +use datafusion::arrow::datatypes::Schema; +use prost::Message; +use std::{collections::HashMap, fs::OpenOptions, io::Error}; +use tracing::info_span; + +use crate::infra::file_lock; +use crate::{ + common::{json, time::parse_i64_to_timestamp_micros}, + infra::{ + cluster, + config::{CONFIG, METRIC_CLUSTER_LEADER, METRIC_CLUSTER_MAP}, + }, + meta::{ + self, + prom::{ClusterLeader, Metric}, + StreamType, + }, + service::{ + db, + metrics::prometheus::WriteRequest, + schema::{add_stream_schema, stream_schema_exists}, + }, +}; + +pub mod prometheus { + include!(concat!(env!("OUT_DIR"), "/prometheus.rs")); +} + +const COUNTER: &str = "Counter"; +const GAUGE: &str = "Gauge"; +const HISTOGRAM: &str = "Histogram"; +const TOTAL_SUFFIX: &str = "_total"; +const SUM_SUFFIX: &str = "_sum"; +const COUNT_SUFFIX: &str = "_count"; +const BUCKET_SUFFIX: &str = "_bucket"; +const MAIN_LABLE: &str = "__name__"; +const CLUSTER_LABEL: &str = "cluster"; +const REPLICA_LABEL: &str = "__replica__"; + +pub async fn prometheus_write_proto( + org_id: &str, + thread_id: actix_web::web::Data, + body: actix_web::web::Bytes, +) -> Result { + let loc_span = info_span!("service:prom:prometheus_write_proto"); + let _guard = loc_span.enter(); + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok( + HttpResponse::InternalServerError().json(meta::http::HttpResponse::error( + http::StatusCode::INTERNAL_SERVER_ERROR.into(), + Some("not an ingester".to_string()), + )), + ); + } + + let mut min_ts = (Utc::now() + Duration::hours(CONFIG.limit.allowed_upto)).timestamp_micros(); + let dedup_enabled = CONFIG.common.metrics_dedup_enabled; + let election_interval = CONFIG.limit.metrics_leader_election_interval * 1000000; + let mut last_received: i64 = 0; + let mut has_entry = false; + let mut accept_record = false; + let mut cluster_name: String = String::new(); + let mut metric_data_map: AHashMap>> = AHashMap::new(); + let mut metric_file_map: AHashMap = AHashMap::new(); + let mut metric_schema_map: AHashMap = AHashMap::new(); + + let decoded = snap::raw::Decoder::new() + .decompress_vec(&body) + .expect("Invalid snappy compressed data"); + let request = WriteRequest::decode(bytes::Bytes::from(decoded)).expect("Invalid protobuf"); + let mut i = 0; + for event in request.timeseries { + let mut replica_label = String::new(); + let mut main_lable = event.labels.clone(); + main_lable.retain(|x| x.name.eq(MAIN_LABLE)); + let buf = metric_data_map + .entry(main_lable[0].value.clone()) + .or_default(); + + metric_file_map + .entry(main_lable[0].value.clone()) + .or_insert_with(|| String::from("")); + + let mut optional_lables = event.labels; + optional_lables.retain(|x| !x.name.eq("MAIN_LABLE")); + + let mut map = AHashMap::new(); + let mut contains_le = false; + if optional_lables.len() > 1 { + for label in optional_lables.clone() { + if label.name.eq("le") { + contains_le = true; + } else if !has_entry && label.name.eq(REPLICA_LABEL) { + replica_label = label.value.clone(); + } else if !has_entry && label.name.eq(CLUSTER_LABEL) && cluster_name.is_empty() { + cluster_name = format!("{}/{}", org_id, label.value); + } + map.insert(label.name, label.value); + } + } + let metric_type = get_metric_type(main_lable[0].value.clone(), contains_le); + + for sample in event.samples { + let mut abnormal_val = false; + let mut sample_val = sample.value; + //revisit in future + if sample_val.is_infinite() { + if sample_val == f64::INFINITY || sample_val > f64::MAX { + sample_val = f64::MAX; + } else if sample_val == f64::NEG_INFINITY || sample_val < f64::MIN { + sample_val = f64::MIN; + } + } else if sample_val.is_nan() { + // skip the entry from adding to store + abnormal_val = true; + sample_val = 0.0; + } + let mut timestamp = parse_i64_to_timestamp_micros(sample.timestamp).unwrap(); + if timestamp == 0 { + timestamp = Utc::now().timestamp_micros(); + } + if timestamp < min_ts { + min_ts = timestamp; + } + let metric = Metric { + name: main_lable[0].value.clone(), + value: sample_val, + collection: map.clone(), + _timestamp: timestamp, + metric_type: metric_type.clone(), + }; + let value_str = json::to_string(&metric).unwrap(); + // get hour file name + let hour_key = Utc + .timestamp_nanos(timestamp * 1000) + .format("%Y_%m_%d_%H") + .to_string(); + let hour_buf = buf.entry(hour_key).or_default(); + if i == 0 && dedup_enabled { + let leader = METRIC_CLUSTER_LEADER.get(&cluster_name); + match leader { + Some(leader) => { + last_received = leader.last_received; + has_entry = true; + } + None => { + has_entry = false; + } + } + accept_record = prom_ha_handler( + has_entry, + cluster_name.clone(), + replica_label.clone(), + last_received, + election_interval, + ) + .await; + has_entry = true; + } + if !accept_record { + //do not accept any entried for request + return Ok(HttpResponse::Ok().into()); + } else if !abnormal_val { + hour_buf.push(value_str); + } + i += 1; + } + } + + /* for item in METRIC_CLUSTER_MAP.iter() { + log::info!( + "Cluster members for {:?} --> {:?}", + item.key(), + item.value() + ); + } + for item in METRIC_CLUSTER_LEADER.iter() { + log::info!("Cluster leader for {:?} --> {:?}", item.key(), item.value()); + } */ + + for (metric_name, metric_data) in metric_data_map { + // write to file + let mut metric_file_name = "".to_string(); + let mut write_buf = BytesMut::new(); + for (key, entry) in metric_data { + if entry.is_empty() { + continue; + } + write_buf.clear(); + for row in &entry { + write_buf.put(row.as_bytes()); + write_buf.put("\n".as_bytes()); + } + let file = file_lock::get_or_create( + *thread_id.as_ref(), + org_id, + &metric_name, + StreamType::Metrics, + &key, + ); + if metric_file_name.is_empty() { + metric_file_name = file.full_name(); + } + file.write(write_buf.as_ref()); + } + + let schema_exists = stream_schema_exists( + org_id, + &metric_name, + StreamType::Metrics, + &mut metric_schema_map, + ) + .await; + if !schema_exists.has_fields && !metric_file_name.is_empty() { + let file = OpenOptions::new() + .read(true) + .open(&metric_file_name) + .unwrap(); + add_stream_schema( + org_id, + &metric_name, + StreamType::Metrics, + &file, + &mut metric_schema_map, + min_ts, + ) + .await; + } + } + Ok(HttpResponse::Ok().into()) +} + +fn get_metric_type(main_lable: String, contains_le: bool) -> String { + if main_lable.ends_with(TOTAL_SUFFIX) + || main_lable.ends_with(SUM_SUFFIX) + || main_lable.ends_with(COUNT_SUFFIX) + { + COUNTER.to_string() + } else if main_lable.ends_with(BUCKET_SUFFIX) && contains_le { + HISTOGRAM.to_string() + } else { + GAUGE.to_string() + } +} + +async fn prom_ha_handler( + has_entry: bool, + cluster_name: String, + replica_label: String, + last_received: i64, + election_interval: i64, +) -> bool { + let mut _accept_record = false; + let curr_ts = Utc::now().timestamp_micros(); + if !has_entry { + METRIC_CLUSTER_MAP.insert(cluster_name.clone(), vec![]); + log::info!( + "Making {} leader for {} ", + replica_label.clone(), + cluster_name.clone(), + ); + METRIC_CLUSTER_LEADER.insert( + cluster_name.clone(), + ClusterLeader { + name: replica_label.clone(), + last_received: curr_ts, + }, + ); + _accept_record = true; + } else { + let mut leader = METRIC_CLUSTER_LEADER + .get_mut(&cluster_name.clone()) + .unwrap(); + if replica_label.eq(&leader.name) { + _accept_record = true; + leader.last_received = curr_ts; + log::info!( + "Updating last received data for {} to {} ", + &leader.name, + Utc.timestamp_nanos(last_received * 1000) + ); + } else if curr_ts - last_received > election_interval { + //elect new leader as didnt receive data for last 30 secs + log::info!( + "Electing {} new leader for {} as last received data from {} at {} ", + replica_label.clone(), + cluster_name, + &leader.name, + Utc.timestamp_nanos(last_received * 1000) + ); + leader.name = replica_label.clone(); + leader.last_received = curr_ts; + _accept_record = true; + } else { + log::info!( + "Rejecting entry from {} as leader is {}", + replica_label, + &leader.name, + ); + _accept_record = false; + } + } + let mut replica_list = vec![]; + if METRIC_CLUSTER_MAP.contains_key(&cluster_name) { + replica_list = METRIC_CLUSTER_MAP.get_mut(&cluster_name).unwrap().to_vec(); + if !replica_list.contains(&replica_label.clone()) { + replica_list.push(replica_label.clone()); + METRIC_CLUSTER_MAP.insert(cluster_name.clone(), replica_list.clone()); + let _ = db::set_prom_cluster_info(&cluster_name, replica_list.to_vec()).await; + } + } else { + replica_list.push(replica_label.clone()); + METRIC_CLUSTER_MAP.insert(cluster_name.clone(), replica_list.clone()); + let _ = db::set_prom_cluster_info(&cluster_name, replica_list.to_vec()).await; + } + + _accept_record +} + +#[cfg(test)] +mod test_utils { + use super::*; + #[test] + fn test_get_metric_type() { + let htype = get_metric_type( + "apiserver_admission_controller_admission_duration_seconds_bucket".to_string(), + true, + ); + + assert_eq!(htype.as_str(), HISTOGRAM); + } +} diff --git a/src/service/mod.rs b/src/service/mod.rs new file mode 100644 index 0000000000..0b8ad1ff2a --- /dev/null +++ b/src/service/mod.rs @@ -0,0 +1,16 @@ +pub mod alert_manager; +pub mod alerts; +pub mod compact; +pub mod dashboards; +pub mod db; +pub mod file_list; +pub mod logs; +pub mod metrics; +pub mod router; +pub mod schema; +pub mod search; +pub mod stream; +pub mod traces; +pub mod transform; +pub mod triggers; +pub mod users; diff --git a/src/service/router/mod.rs b/src/service/router/mod.rs new file mode 100644 index 0000000000..d9a28dbd28 --- /dev/null +++ b/src/service/router/mod.rs @@ -0,0 +1,78 @@ +use actix_web::http::Error; +use actix_web::{web, HttpRequest, HttpResponse}; +use awc::Client; +use rand::seq::SliceRandom; +use rand::thread_rng; + +use crate::infra::cluster; +use crate::infra::config::CONFIG; + +#[inline] +pub fn is_router() -> bool { + cluster::is_router(&cluster::load_local_node_role().to_vec()) +} + +#[inline] +fn check_search_route(path: &str) -> bool { + if path.contains("/_search") { + return true; + } + if path.eq("/api/cache/status") { + return true; + } + false +} + +pub async fn dispatch( + req: HttpRequest, + payload: web::Payload, + client: web::Data, +) -> actix_web::Result { + // get online nodes + let path = req.uri().path_and_query().map(|x| x.as_str()).unwrap_or(""); + let nodes = if check_search_route(path) { + cluster::get_cached_online_querier_nodes() + } else { + cluster::get_cached_online_ingester_nodes() + }; + if nodes.is_none() { + return Ok(HttpResponse::ServiceUnavailable().body("No online nodes")); + } + + // random nodes + let mut nodes = nodes.unwrap(); + let mut rng = thread_rng(); + nodes.shuffle(&mut rng); + + let node = nodes.first().unwrap(); + let new_url = format!("{}{}", node.http_addr, path); + + // send query + let resp = client + .request_from(new_url.clone(), req.head()) + .send_stream(payload) + .await; + if resp.is_err() { + let e = resp.unwrap_err(); + log::error!("{}: {}", new_url, e); + return Ok(HttpResponse::ServiceUnavailable().body(e.to_string())); + } + + // handle response + let mut resp = resp.unwrap(); + let mut new_resp = HttpResponse::build(resp.status()); + + // copy headers + for (key, value) in resp.headers() { + new_resp.insert_header((key.clone(), value.clone())); + } + // set body + let body = resp + .body() + .limit(CONFIG.limit.req_payload_limit) + .await + .unwrap(); + let new_resp = new_resp.body(body); + + Ok(new_resp) +} diff --git a/src/service/schema.rs b/src/service/schema.rs new file mode 100644 index 0000000000..a467ed00a6 --- /dev/null +++ b/src/service/schema.rs @@ -0,0 +1,357 @@ +use ahash::AHashMap; +use datafusion::arrow::datatypes::{DataType, Field, Schema}; +use datafusion::arrow::error::ArrowError; +use datafusion::arrow::json::reader::infer_json_schema; +use std::collections::{HashMap, HashSet}; +use std::fs::File; +use std::io::{BufReader, Seek, SeekFrom}; +use tracing::info_span; + +use crate::infra::config::CONFIG; +use crate::meta::{ingestion::StreamSchemaChk, StreamType}; +use crate::service::db; + +pub async fn schema_evolution( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + inferred_schema: Schema, + min_ts: i64, +) { + let loc_span = info_span!("service:schema:schema_evolution"); + let _guard = loc_span.enter(); + + let schema = db::schema::get(org_id, stream_name, Some(stream_type)) + .await + .unwrap(); + + if schema == Schema::empty() { + let mut metadata = HashMap::new(); + metadata.insert("created_at".to_string(), min_ts.to_string()); + log::info!("schema_evolution: setting schema for {:?}", stream_name); + db::schema::set( + org_id, + stream_name, + stream_type, + &inferred_schema.clone().with_metadata(metadata), + Some(min_ts), + ) + .await + .unwrap(); + } else if !inferred_schema.fields().eq(schema.fields()) { + let schema_fields: HashSet<_> = schema.fields().iter().collect(); + let field_datatype_delta: Vec<_> = inferred_schema + .clone() + .fields + .into_iter() + .filter(|item| !schema_fields.contains(item)) + .map(|v| format!("{}:[{}]", v.name(), v.data_type())) + .collect(); + if field_datatype_delta.is_empty() { + return; + } + log::info!( + "schema_evolution: updating schema for {:?} delta is {:?}", + stream_name, + field_datatype_delta + ); + match try_merge(vec![schema.clone(), inferred_schema.clone()]) { + Err(e) => { + log::error!( + "schema_evolution: schema merge failed for {:?} err: {:?}", + stream_name, + e + ); + } + Ok(merged) => { + db::schema::set(org_id, stream_name, stream_type, &merged, Some(min_ts)) + .await + .unwrap(); + } + }; + } +} + +// Hack to allow widening conversion , method overrides Schema::try_merge +fn try_merge(schemas: impl IntoIterator) -> Result { + let mut merged_metadata: HashMap = HashMap::new(); + let mut merged_fields: Vec = Vec::new(); + // TODO : this dummy initilization is to avoid compilar complaining for unintilized value + let mut temp_field = Field::new("dummy", DataType::Utf8, false); + + for schema in schemas { + for (key, value) in schema.metadata() { + // merge metadata + if let Some(old_val) = merged_metadata.get(key) { + if old_val != value { + return Err(ArrowError::SchemaError( + "Fail to merge schema due to conflicting metadata.".to_string(), + )); + } + } + merged_metadata.insert(key.to_string(), value.to_string()); + } + // merge fields + let mut found_at = 0; + for field in schema.fields().iter() { + let mut new_field = true; + let mut allowed = false; + for (stream, mut merged_field) in merged_fields.iter_mut().enumerate() { + if field.name() != merged_field.name() { + continue; + } + new_field = false; + if merged_field.data_type() != field.data_type() { + if !CONFIG.common.widening_schema_evoluation { + return Err(ArrowError::SchemaError(format!( + "Fail to merge schema due to conflicting data type[{}:{}].", + merged_field.data_type(), + field.data_type() + ))); + } + allowed = is_widening_conversion(merged_field.data_type(), field.data_type()); + if allowed { + temp_field = Field::new( + merged_field.name(), + field.data_type().to_owned(), + merged_field.is_nullable(), + ); + merged_field = &mut temp_field; + } + } + found_at = stream; + merged_field.try_merge(field)?; + } + // found a new field, add to field list + if new_field { + merged_fields.push(field.clone()); + } + if allowed { + let _ = std::mem::replace(&mut merged_fields[found_at], temp_field.to_owned()); + } + } + } + let merged = Schema::new_with_metadata(merged_fields, merged_metadata); + Ok(merged) +} + +fn is_widening_conversion(from: &DataType, to: &DataType) -> bool { + let allowed_type = match from { + DataType::Boolean => vec![DataType::Utf8], + DataType::Int8 => vec![ + DataType::Utf8, + DataType::Int16, + DataType::Int32, + DataType::Int64, + ], + DataType::Int16 => vec![DataType::Utf8, DataType::Int32, DataType::Int64], + DataType::Int32 => vec![DataType::Utf8, DataType::Int64], + DataType::Int64 => vec![DataType::Utf8], + DataType::UInt8 => vec![ + DataType::Utf8, + DataType::UInt16, + DataType::UInt32, + DataType::UInt64, + ], + DataType::UInt16 => vec![DataType::Utf8, DataType::UInt32, DataType::UInt64], + DataType::UInt32 => vec![DataType::Utf8, DataType::UInt64], + DataType::UInt64 => vec![DataType::Utf8], + DataType::Float16 => vec![DataType::Utf8, DataType::Float32, DataType::Float64], + DataType::Float32 => vec![DataType::Utf8, DataType::Float64], + DataType::Float64 => vec![DataType::Utf8], + _ => vec![DataType::Utf8], + }; + allowed_type.contains(to) +} + +pub async fn check_for_schema( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + val_str: &str, + stream_schema_map: &mut AHashMap, + record_ts: i64, +) -> (bool, Option>) { + let schema = if stream_schema_map.contains_key(stream_name) { + stream_schema_map.get(stream_name).unwrap().clone() + } else { + let schema = db::schema::get(org_id, stream_name, Some(stream_type)) + .await + .unwrap(); + stream_schema_map.insert(stream_name.to_string(), schema.clone()); + schema + }; + + if schema == Schema::empty() { + let mut schema_reader = BufReader::new(val_str.as_bytes()); + let inferred_schema = infer_json_schema(&mut schema_reader, Some(1)).unwrap(); + stream_schema_map.insert(stream_name.to_string(), inferred_schema); + return (true, None); + } + + let mut schema_reader = BufReader::new(val_str.as_bytes()); + let inferred_schema = infer_json_schema(&mut schema_reader, Some(1)).unwrap(); + if schema.fields.eq(&inferred_schema.fields) { + return (true, None); + } + + let inferred_fields: HashSet<_> = inferred_schema.fields().iter().collect(); + let field_datatype_delta: Vec<_> = schema + .clone() + .fields + .into_iter() + .filter(|item| !inferred_fields.contains(item)) + .collect(); + if !CONFIG.common.widening_schema_evoluation { + return (true, Some(field_datatype_delta)); + } + + match try_merge(vec![schema.clone(), inferred_schema.clone()]) { + Err(ref _e) => (true, Some(field_datatype_delta)), //return (false, None), + Ok(merged) => { + log::info!("Schema widening for stream {:?}", stream_name); + db::schema::set(org_id, stream_name, stream_type, &merged, Some(record_ts)) + .await + .unwrap(); + let item_set: HashSet<_> = schema.fields.iter().collect(); + let field_datatype_delta: Vec<_> = inferred_schema + .clone() + .fields + .into_iter() + .filter(|item| !item_set.contains(item)) + .collect(); + stream_schema_map.insert(stream_name.to_string(), merged); + (true, Some(field_datatype_delta)) + } + } +} + +pub async fn stream_schema_exists( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + stream_schema_map: &mut AHashMap, +) -> StreamSchemaChk { + let mut schema_chk = StreamSchemaChk { + conforms: true, + has_fields: false, + has_partition_keys: false, + }; + let schema; + if stream_schema_map.contains_key(stream_name) { + schema = stream_schema_map.get(stream_name).unwrap().clone(); + } else { + schema = db::schema::get(org_id, stream_name, Some(stream_type)) + .await + .unwrap(); + stream_schema_map.insert(stream_name.to_string(), schema.clone()); + } + let fields = schema.fields(); + let mut meta = schema.metadata().clone(); + + if !fields.is_empty() { + schema_chk.has_fields = true; + } + if !meta.is_empty() { + meta.remove("created_at"); + if !meta.is_empty() { + schema_chk.has_partition_keys = true; + } + } + schema_chk +} + +pub async fn add_stream_schema( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + file: &File, + stream_schema_map: &mut AHashMap, + min_ts: i64, +) { + let loc_span = info_span!("service:schema:add_stream_schema"); + let _guard = loc_span.enter(); + + let mut local_file = file; + local_file.seek(SeekFrom::Start(0)).unwrap(); + let mut schema_reader = BufReader::new(local_file); + let inferred_schema = infer_json_schema(&mut schema_reader, None).unwrap(); + + let existing_schema = stream_schema_map.get(&stream_name.to_string()); + let mut metadata = match existing_schema { + Some(schema) => schema.metadata().clone(), + None => HashMap::new(), + }; + metadata.insert("created_at".to_string(), min_ts.to_string()); + db::schema::set( + org_id, + stream_name, + stream_type, + &inferred_schema.clone().with_metadata(metadata), + Some(min_ts), + ) + .await + .unwrap(); + stream_schema_map.insert(stream_name.to_string(), inferred_schema.clone()); +} + +#[cfg(test)] +mod test { + use super::*; + use ahash::AHashMap; + use datafusion::arrow::datatypes::{DataType, Field, Schema}; + #[test] + fn test_is_widening_conversion() { + let res = is_widening_conversion(&DataType::Int8, &DataType::Int32); + assert_eq!(res, true); + } + #[test] + fn test_try_merge() { + // let merged = try_merge(vec![ + // Schema::new(vec![ + // Field::new("c1", DataType::Int64, false), + // Field::new("c2", DataType::Int64, false), + // ]), + // Schema::new(vec![ + // Field::new("c1", DataType::Int64, true), + // Field::new("c2", DataType::Utf8, false), + // Field::new("c3", DataType::Utf8, false), + // ]), + // ]) + // .unwrap(); + + // assert_eq!( + // merged, + // Schema::new(vec![ + // Field::new("c1", DataType::Int64, true), + // Field::new("c2", DataType::Utf8, false), + // Field::new("c3", DataType::Utf8, false), + // ]), + // ); + } + + #[actix_web::test] + async fn test_check_for_schema() { + let stream_name = "Sample"; + let org_name = "nexus"; + let record = r#"{"Year": 1896, "City": "Athens", "_timestamp": 1234234234234}"#; + + let schema = Schema::new(vec![ + Field::new("Year", DataType::Int64, false), + Field::new("City", DataType::Utf8, false), + Field::new("_timestamp", DataType::Int64, false), + ]); + let mut map: AHashMap = AHashMap::new(); + map.insert(stream_name.to_string(), schema); + let result = check_for_schema( + org_name, + stream_name, + StreamType::Logs, + record, + &mut map, + 1234234234234, + ) + .await; + assert_eq!(result.0, true); + } +} diff --git a/src/service/search.rs b/src/service/search.rs new file mode 100644 index 0000000000..6b8603b33f --- /dev/null +++ b/src/service/search.rs @@ -0,0 +1,538 @@ +use ::datafusion::arrow::{datatypes::Schema, ipc, json as arrow_json, record_batch::RecordBatch}; +use ahash::AHashMap as HashMap; +use http_auth_basic::Credentials; +use std::io::Cursor; +use std::sync::Arc; +use std::{cmp::min, time::Duration}; +use tonic::{codec::CompressionEncoding, metadata::MetadataValue, transport::Channel, Request}; +use tracing::{info_span, Instrument}; +use tracing_opentelemetry::OpenTelemetrySpanExt; +use uuid::Uuid; + +use crate::handler::grpc::cluster_rpc; +use crate::infra::cluster; +use crate::infra::config::{CONFIG, USERS}; +use crate::infra::db::etcd; +use crate::meta; +use crate::meta::search::Response; +use crate::meta::StreamType; +use crate::service::db; +use crate::service::file_list; + +mod cache; +pub mod datafusion; +pub mod exec; +pub mod sql; +mod storage; + +pub type SearchResult = Result<(HashMap>, usize, usize), anyhow::Error>; + +pub async fn search( + org_id: &str, + stream_type: StreamType, + req: &meta::search::Request, +) -> Result { + let root_span = info_span!("service:search:enter"); + + let mut req: cluster_rpc::SearchRequest = req.to_owned().into(); + req.org_id = org_id.to_string(); + req.stype = cluster_rpc::SearchType::User as i32; + req.stream_type = stream_type.to_string(); + + let result = std::thread::spawn(move || { + let rt = tokio::runtime::Builder::new_multi_thread() + .thread_name("zinc-search") + .thread_stack_size(3 * 1024 * 1024) + .enable_all() + .build() + .unwrap(); + rt.block_on(async move { + if CONFIG.common.local_mode { + search_in_local(req).instrument(root_span).await + } else { + search_in_cluster(req).instrument(root_span).await + } + }) + }) + .join(); + + if result.is_err() { + let err = result.err(); + log::error!("search error: {:?}", err); + return Err(anyhow::anyhow!("error: {:?}", err)); + } + match result.unwrap() { + Ok(res) => Ok(res), + Err(err) => { + log::error!("search error: {:?}", err); + Err(anyhow::anyhow!("error: {:?}", err)) + } + } +} + +#[tracing::instrument(name = "service:search:local:enter", skip(req))] +async fn search_in_local(req: cluster_rpc::SearchRequest) -> Result { + let resp = match exec::search(&req).await { + Ok(res) => res, + Err(err) => return Err(err), + }; + + let span2 = info_span!("service:search:local:convert").entered(); + + let mut response = Response::new(resp.from as usize, resp.size as usize); + + // convert hits + if !resp.hits.is_empty() { + let buf = Cursor::new(resp.hits); + let reader = ipc::reader::FileReader::try_new(buf, None).unwrap(); + log::info!( + "search_in_local: query num_batches: {:?}", + reader.num_batches() + ); + let batches = reader.into_iter().map(Result::unwrap).collect::>(); + let json_rows = arrow_json::writer::record_batches_to_json_rows(&batches[..])?; + let sources: Vec = json_rows + .into_iter() + .map(serde_json::Value::Object) + .collect(); + for source in sources { + response.add_hit(&source); + } + } + + // convert aggs + if !resp.aggs.is_empty() { + for agg in resp.aggs { + let buf = Cursor::new(agg.hits); + let reader = ipc::reader::FileReader::try_new(buf, None).unwrap(); + log::info!( + "search_in_local: aggs:{} num_batches: {:?}", + agg.name, + reader.num_batches() + ); + let batches = reader.into_iter().map(Result::unwrap).collect::>(); + let json_rows = arrow_json::writer::record_batches_to_json_rows(&batches[..])?; + let sources: Vec = json_rows + .into_iter() + .map(serde_json::Value::Object) + .collect(); + for source in sources { + response.add_agg(&agg.name, &source); + } + } + } + + span2.exit(); + let _span3 = info_span!("service:search:local:response").entered(); + + // handle count + let total = match response.aggs.get("_count") { + Some(v) => v.get(0).unwrap().get("num").unwrap().as_u64().unwrap() as usize, + None => 0, + }; + response.aggs.remove("_count"); + + response.set_total(total); + response.set_took(resp.took as usize); + response.set_file_count(resp.file_count as usize); + response.set_scan_size(resp.scan_size as usize); + + Ok(response) +} + +#[tracing::instrument(name = "service:search:cluster:enter", skip(req))] +async fn search_in_cluster(req: cluster_rpc::SearchRequest) -> Result { + // start time + let start = std::time::Instant::now(); + let stream_type: StreamType = StreamType::from(req.stream_type.as_str()); + + let span1 = info_span!("service:search:cluster:get_queue_lock").entered(); + + // get a cluster search queue lock + let mut locker = etcd::Locker::new("search/cluster_queue"); + match locker.lock(0).await { + Ok(res) => res, + Err(err) => { + log::error!("search in cluster get lock error: {}", err); + return Err(anyhow::anyhow!(err)); + } + }; + + span1.exit(); // drop span1 + let span2 = info_span!("service:search:cluster:prepare_base").entered(); + + // get nodes from cluster + let mut querier = Vec::new(); + let mut nodes = cluster::get_cached_online_query_nodes().unwrap(); + // sort nodes by node_id this will improve hit cache ratio + nodes.sort_by(|a, b| a.id.cmp(&b.id)); + for node in nodes.iter() { + log::info!("[TRACE] cluster->node: {:?}", node); + let role = node.role.clone(); + if cluster::is_querier(&role.to_vec()) { + querier.push(node.clone()); + continue; + } + } + + // handle request time range + let sub_req = req.clone(); + let meta = crate::service::search::sql::Sql::new(&sub_req).await; + if meta.is_err() { + // search done, release lock + if let Err(e) = locker.unlock().await { + log::error!("search in cluster unlock error: {}", e); + } + return Err(meta.err().unwrap()); + } + let meta = meta.unwrap(); + + let now = chrono::Utc::now().timestamp_micros(); + let (mut time_min, mut time_max) = meta.meta.time_range.unwrap(); + if time_min == 0 { + // get created_at from schema + let schema = match db::schema::get(&meta.org_id, &meta.stream_name, Some(stream_type)).await + { + Ok(schema) => schema, + Err(_) => Schema::empty(), + }; + if schema != Schema::empty() { + let def_val = String::from("0"); + time_min = schema + .metadata + .get("created_at") + .unwrap_or(&def_val) + .parse::() + .unwrap(); + } + } + if time_max == 0 { + time_max = now; + } + let querier_num = match querier.len() { + 0 => 1, + _ => querier.len(), + }; + + span2.exit(); // drop span2 + let span3 = info_span!("service:search:cluster:prepare_filelist").entered(); + + // partition by file_list + let mut file_list = match file_list::get_file_list( + &req.org_id, + &meta.stream_name, + Some(stream_type), + time_min, + time_max, + ) + .await + { + Ok(file_list) => match (time_max - time_min) >= 3600_1000_1000 { + true => { + // over than 1 hour, just filter by partition key + let mut files = Vec::with_capacity(file_list.len()); + for file in file_list { + if meta.filter_source_by_partition_key(&file).await { + files.push(file.clone()); + } + } + files + } + false => { + // less than 1 hour, use file meta reduce file list + let mut files = Vec::with_capacity(file_list.len()); + for file in file_list { + if meta.match_source(&file, false, stream_type).await { + files.push(file.clone()); + } + } + files + } + }, + Err(_) => Vec::new(), + }; + file_list.sort(); + let file_num = file_list.len(); + let offset = match querier_num >= file_num { + true => 1, + false => (file_num / querier_num) + 1, + }; + log::info!( + "[TRACE] cluster->file_list: num: {}, offset: {}", + file_num, + offset + ); + + // partition request, here plus 1 second, because division is integer, maybe lose some precision + let mut session_id = Uuid::new_v4().to_string(); + let job = cluster_rpc::Job { + session_id: session_id.clone(), + job: session_id.split_off(30), // take the last 6 characters as job id + stage: 0, + partition: 0, + }; + + span3.exit(); // drop span3 + let span4 = info_span!("service:search:cluster:do_search").entered(); + + // make grpc auth token + let user = USERS.get(&CONFIG.auth.username).unwrap(); + let credentials = Credentials::new(&CONFIG.auth.username, &user.password); + let credentials = credentials.as_http_header(); + + // make cluster request + let mut results = Vec::new(); + let mut tasks = Vec::new(); + let mut offset_start: usize = 0; + for (partition_no, node) in nodes.clone().into_iter().enumerate() { + let mut req = req.clone(); + let mut job = job.clone(); + job.partition = partition_no as i32; + req.job = Some(job); + req.stype = cluster_rpc::SearchType::CacheOnly as i32; + let is_querier = cluster::is_querier(&node.role); + if is_querier { + if offset_start < file_num { + req.stype = cluster_rpc::SearchType::Cluster as i32; + req.file_list = + file_list[offset_start..min(offset_start + offset, file_num)].to_vec(); + offset_start += offset; + } else if !cluster::is_ingester(&node.role) { + continue; // no need more querier + } + } + let mut req_file_list_start = 0; + let mut req_file_list_end = 0; + if !req.file_list.is_empty() { + req_file_list_start = offset_start - offset; + req_file_list_end = offset_start - offset + req.file_list.len(); + } + log::info!( + "[TRACE] cluster->partition: node: {}, is_querier: {}, file_range: {}-{}", + node.id, + is_querier, + req_file_list_start, + req_file_list_end, + ); + + let grpc_span = info_span!("service:search:cluster:grpc_search"); + + let node_addr = node.grpc_addr.clone(); + let credentials_str = credentials.clone(); + let task = tokio::task::spawn( + async move { + let org_id: MetadataValue<_> = req.org_id.parse()?; + let mut request = tonic::Request::new(req); + request.set_timeout(Duration::from_secs(CONFIG.grpc.timeout)); + + opentelemetry::global::get_text_map_propagator(|propagator| { + propagator.inject_context( + &tracing::Span::current().context(), + &mut MetadataMap(request.metadata_mut()), + ) + }); + + let token: MetadataValue<_> = credentials_str.parse()?; + let channel = Channel::from_shared(node_addr).unwrap().connect().await?; + let mut client = cluster_rpc::search_client::SearchClient::with_interceptor( + channel, + move |mut req: Request<()>| { + req.metadata_mut().insert("authorization", token.clone()); + req.metadata_mut() + .insert(CONFIG.grpc.org_header_key.as_str(), org_id.clone()); + Ok(req) + }, + ); + client = client + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + let response = match client.search(request).await { + Ok(response) => response.into_inner(), + Err(error) => { + return Err(anyhow::anyhow!( + "cluster search: node: {}, err: {:?}", + node.id, + error + )); + } + }; + + log::info!( + "[TRACE] cluster->search: node: {}, is_querier: {}, total: {}, took: {}, files: {}", + node.id, + is_querier, + response.total, + response.took, + response.file_count + ); + + Ok(response) + } + .instrument(grpc_span), + ); + tasks.push(task); + } + + for task in tasks { + let result = task.await.unwrap(); + match result { + Ok(res) => { + results.push(res); + } + Err(err) => { + // search done, release lock + if let Err(e) = locker.unlock().await { + log::error!("search in cluster unlock error: {}", e); + } + return Err(err); + } + } + } + + span4.exit(); // drop span4 + let span6 = info_span!("service:search:cluster:release_queue_lock").entered(); + + // search done, release lock + if let Err(e) = locker.unlock().await { + log::error!("search in cluster unlock error: {}", e); + } + + span6.exit(); // drop span6 + let span7 = info_span!("service:search:cluster:merge_result").entered(); + + // merge multiple instances data + let mut file_count = 0; + let mut scan_size = 0; + let mut batches: HashMap>> = HashMap::new(); + let sql = Arc::new(meta); + if !results.is_empty() { + for resp in results { + file_count += resp.file_count; + scan_size += resp.scan_size; + // handle hits + let value = batches.entry("query".to_string()).or_default(); + if !resp.hits.is_empty() { + let buf = Cursor::new(resp.hits); + let reader = ipc::reader::FileReader::try_new(buf, None).unwrap(); + log::info!( + "search_in_cluster: query num_batches: {:?}", + reader.num_batches() + ); + let batch = reader.into_iter().map(Result::unwrap).collect::>(); + value.push(batch); + } + // handle aggs + for agg in resp.aggs { + let value = batches.entry(format!("agg_{}", agg.name)).or_default(); + if !agg.hits.is_empty() { + let buf = Cursor::new(agg.hits); + let reader = ipc::reader::FileReader::try_new(buf, None).unwrap(); + log::info!( + "search_in_cluster: agg:{} num_batches: {:?}", + agg.name, + reader.num_batches() + ); + let batch = reader.into_iter().map(Result::unwrap).collect::>(); + value.push(batch); + } + } + } + + // merge all batches + for (name, batch) in batches.iter_mut() { + let merge_sql = if name.eq("query") { + sql.origin_sql.clone() + } else { + sql.aggs + .get(name.strip_prefix("agg_").unwrap()) + .unwrap() + .0 + .clone() + }; + *batch = match super::search::datafusion::exec::merge( + &sql.org_id, + sql.meta.offset, + sql.meta.limit, + &merge_sql, + batch, + ) + .await + { + Ok(res) => res, + Err(err) => return Err(anyhow::anyhow!(err)), + }; + } + } + + span7.exit(); // drop span7 + let _span8 = info_span!("service:search:cluster:response").entered(); + + // final result + let mut result = Response::new(sql.meta.offset, sql.meta.limit); + + // hits + let batches_query = match batches.get("query") { + Some(batches) => batches.to_owned(), + None => Vec::new(), + }; + if !batches_query.is_empty() { + let json_rows = arrow_json::writer::record_batches_to_json_rows(&batches_query[0][..])?; + let sources: Vec = json_rows + .into_iter() + .map(serde_json::Value::Object) + .collect(); + for source in sources { + result.add_hit(&source); + } + } + + // aggs + for (name, batch) in batches { + if name.eq("query") || batch.is_empty() { + continue; + } + let name = name.strip_prefix("agg_").unwrap().to_string(); + let json_rows = arrow_json::writer::record_batches_to_json_rows(&batch[0][..])?; + let sources: Vec = json_rows + .into_iter() + .map(serde_json::Value::Object) + .collect(); + for source in sources { + result.add_agg(&name, &source); + } + } + + // total + let total = match result.aggs.get("_count") { + Some(v) => v.get(0).unwrap().get("num").unwrap().as_u64().unwrap() as usize, + None => 0, + }; + result.aggs.remove("_count"); + + result.set_total(total); + result.set_took(start.elapsed().as_millis() as usize); + result.set_file_count(file_count as usize); + result.set_scan_size(scan_size as usize); + + log::info!( + "[TRACE] cluster->search: total: {}, took: {}, scan_size: {}", + result.total, + result.took, + result.scan_size, + ); + + Ok(result) +} + +struct MetadataMap<'a>(&'a mut tonic::metadata::MetadataMap); + +impl<'a> opentelemetry::propagation::Injector for MetadataMap<'a> { + /// Set a key and value in the MetadataMap. Does nothing if the key or value are not valid inputs + fn set(&mut self, key: &str, value: String) { + if let Ok(key) = tonic::metadata::MetadataKey::from_bytes(key.as_bytes()) { + if let Ok(val) = tonic::metadata::MetadataValue::try_from(&value) { + self.0.insert(key, val); + } + } + } +} diff --git a/src/service/search/cache.rs b/src/service/search/cache.rs new file mode 100644 index 0000000000..4739b1eb0e --- /dev/null +++ b/src/service/search/cache.rs @@ -0,0 +1,99 @@ +use ahash::AHashMap as HashMap; +use datafusion::datasource::file_format::file_type::FileType; +use std::path::Path; +use std::sync::Arc; +use tracing::info_span; + +use super::datafusion::storage::file_list::SessionType; +use super::sql::Sql; +use crate::common::file::scan_files; +use crate::infra::config::CONFIG; +use crate::meta; +use crate::service::file_list::calculate_local_files_size; + +/// search in local cache, which haven't been sync to object storage +#[tracing::instrument( + name = "service:search:cache:enter", + skip(session_id, sql, stream_type) +)] +pub async fn search( + session_id: &str, + sql: Arc, + stream_type: meta::StreamType, +) -> super::SearchResult { + let span1 = info_span!("service:search:cache:get_file_list"); + let guard1 = span1.enter(); + + // get file list + let files = get_file_list(&sql, stream_type).await?; + let file_count = files.len(); + drop(guard1); + + if file_count == 0 { + return Ok((HashMap::new(), 0, 0)); + } + + let span2 = info_span!("service:search:cache:calculate_files_size"); + let guard2 = span2.enter(); + let scan_size = calculate_local_files_size(&files).await?; + log::info!( + "[TRACE] cache->search: load files {}, scan_size {}", + file_count, + scan_size + ); + + drop(guard2); + let span3 = info_span!("service:search:cache:datafusion"); + let _guard3 = span3.enter(); + + let session = meta::search::Session { + id: session_id.to_string(), + data_type: SessionType::Cache, + }; + let result = super::datafusion::exec::sql( + &session, + stream_type, + None, + HashMap::new(), + &sql, + &files, + FileType::JSON, + ) + .await?; + + Ok((result, file_count, scan_size as usize)) +} + +/// get file list from local cache, no need match_source, each file will be searched +#[inline] +async fn get_file_list( + sql: &Sql, + stream_type: meta::StreamType, +) -> Result, anyhow::Error> { + let pattern = format!( + "{}/files/{}/{}/{}/*.json", + &CONFIG.common.data_wal_dir, &sql.org_id, stream_type, &sql.stream_name + ); + let files = scan_files(&pattern); + + let mut result = Vec::new(); + let data_dir = match Path::new(&CONFIG.common.data_wal_dir).canonicalize() { + Ok(path) => path, + Err(_) => { + return Ok(result); + } + }; + for file in files { + let file = Path::new(&file).canonicalize().unwrap(); + let file = file.strip_prefix(&data_dir).unwrap(); + let local_file = file.to_str().unwrap(); + let file_path = file.parent().unwrap().to_str().unwrap(); + let file_name = file.file_name().unwrap().to_str().unwrap(); + let file_name = file_name.replace('_', "/"); + let source_file = format!("{}/{}", file_path, file_name); + if sql.match_source(&source_file, false, stream_type).await { + result.push(format!("{}{}", &CONFIG.common.data_wal_dir, local_file)); + } + } + Ok(result) +} diff --git a/src/service/search/datafusion/exec.rs b/src/service/search/datafusion/exec.rs new file mode 100644 index 0000000000..b265121ff0 --- /dev/null +++ b/src/service/search/datafusion/exec.rs @@ -0,0 +1,717 @@ +use ahash::AHashMap as HashMap; +use datafusion::arrow::datatypes::{DataType, Schema}; +use datafusion::arrow::json as arrowJson; +use datafusion::arrow::record_batch::RecordBatch; +use datafusion::datasource::file_format::file_type::{FileType, GetExt}; +use datafusion::datasource::file_format::json::JsonFormat; +use datafusion::datasource::file_format::parquet::ParquetFormat; +use datafusion::datasource::listing::{ListingOptions, ListingTable}; +use datafusion::datasource::listing::{ListingTableConfig, ListingTableUrl}; +use datafusion::datasource::object_store::ObjectStoreRegistry; +use datafusion::error::Result; +use datafusion::execution::context::SessionConfig; +use datafusion::execution::runtime_env::{RuntimeConfig, RuntimeEnv}; +use datafusion::prelude::{cast, col, Expr, SessionContext}; +use datafusion_common::DataFusionError; +use object_store::limit::LimitStore; +use parquet::arrow::ArrowWriter; +use parquet::file::properties::WriterProperties; +use parquet::format::SortingColumn; +use regex::Regex; +use std::sync::Arc; +use std::time::Instant; +use uuid::Uuid; + +use super::storage::file_list; +use super::transform_udf::get_all_transform; +use crate::infra::cache::tmpfs; +use crate::infra::config::{get_parquet_compression, CONFIG}; +use crate::meta::common::FileMeta; +use crate::meta::{self, StreamType}; +use crate::service::search::sql::Sql; + +const AGGREGATE_UDF_LIST: [&str; 6] = ["min", "max", "count", "avg", "sum", "array_agg"]; + +#[tracing::instrument(name = "service:search:datafusion:exec:sql", skip_all)] +pub async fn sql( + session: &meta::search::Session, + stream_type: StreamType, + schema: Option>, + rules: HashMap, + sql: &Arc, + files: &Vec, + file_type: FileType, +) -> Result>> { + if files.is_empty() { + return Ok(HashMap::new()); + } + + let now = Instant::now(); + + let runtime_env = create_runtime_env()?; + let session_config = SessionConfig::new() + .with_information_schema(schema.is_none()) + .with_batch_size(4096); + let mut ctx = SessionContext::with_config_rt(session_config.clone(), Arc::new(runtime_env)); + + // Configure listing options + let listing_options = match file_type { + FileType::PARQUET => { + let file_format = ParquetFormat::default().with_enable_pruning(Some(false)); + ListingOptions::new(Arc::new(file_format)) + .with_file_extension(FileType::PARQUET.get_ext()) + .with_target_partitions(CONFIG.limit.cpu_num) + } + FileType::JSON => { + let file_format = JsonFormat::default(); + ListingOptions::new(Arc::new(file_format)) + .with_file_extension(FileType::JSON.get_ext()) + .with_target_partitions(CONFIG.limit.cpu_num) + } + _ => { + return Err(DataFusionError::Execution(format!( + "Unsupported file type scheme {:?}", + file_type, + ))); + } + }; + + let prefix = if session.data_type.eq(&file_list::SessionType::Cache) { + format!( + "{}files/{}/{}/{}/", + &CONFIG.common.data_wal_dir, sql.org_id, stream_type, sql.stream_name + ) + } else { + file_list::set(&session.id, files).await.unwrap(); + format!("mem:///{}/", session.id) + }; + let prefix = match ListingTableUrl::parse(prefix) { + Ok(url) => url, + Err(e) => { + return Err(datafusion::error::DataFusionError::Execution(format!( + "ListingTableUrl error: {}", + e + ))); + } + }; + let prefixes = vec![prefix]; + log::info!( + "Prepare table took {:.3} seconds.", + now.elapsed().as_secs_f64() + ); + + let mut config = + ListingTableConfig::new_with_multi_paths(prefixes).with_listing_options(listing_options); + if schema.is_none() { + config = config.infer_schema(&ctx.state()).await.unwrap(); + } else { + config = config.with_schema(schema.as_ref().unwrap().clone()); + } + log::info!( + "infer schema took {:.3} seconds.", + now.elapsed().as_secs_f64() + ); + + let table = ListingTable::try_new(config)?; + ctx.register_table("tbl", Arc::new(table))?; + + // register UDF + register_udf(&mut ctx, &sql.org_id).await; + log::info!( + "Register table took {:.3} seconds.", + now.elapsed().as_secs_f64() + ); + + // Debug SQL + log::info!("Query sql: {}", sql.origin_sql); + + let mut result: HashMap> = HashMap::new(); + // query + let mut df = ctx.sql(&sql.origin_sql).await?; + if !rules.is_empty() { + let fields = df.schema().fields(); + let mut exprs = Vec::with_capacity(fields.len()); + for field in fields { + if field.qualifier().is_none() { + exprs.push(col(field.name())); + continue; + } + exprs.push(match rules.get(field.name()) { + Some(rule) => Expr::Alias( + Box::new(cast(col(field.name()), rule.clone())), + field.name().to_string(), + ), + None => col(field.name()), + }); + } + df = df.select(exprs)?; + } + let batches = df.collect().await?; + result.insert("query".to_string(), batches); + log::info!("Query took {:.3} seconds.", now.elapsed().as_secs_f64()); + // aggs + for (name, sql) in sql.aggs.iter() { + // Debug SQL + // log::info!("Query agg sql: {}", sql.0); + let mut df = ctx.sql(&sql.0).await?; + if !rules.is_empty() { + let fields = df.schema().fields(); + let mut exprs = Vec::with_capacity(fields.len()); + for field in fields { + if field.qualifier().is_none() { + exprs.push(col(field.name())); + continue; + } + exprs.push(match rules.get(field.name()) { + Some(rule) => Expr::Alias( + Box::new(cast(col(field.name()), rule.clone())), + field.name().to_string(), + ), + None => col(field.name()), + }); + } + df = df.select(exprs)?; + } + let batches = df.collect().await?; + result.insert(format!("agg_{}", name), batches); + log::info!( + "Query agg:{} took {:.3} seconds.", + name, + now.elapsed().as_secs_f64() + ); + } + + // drop table + ctx.deregister_table("tbl")?; + log::info!("Query all took {:.3} seconds.", now.elapsed().as_secs_f64()); + + Ok(result) +} + +pub async fn merge( + org_id: &str, + offset: usize, + limit: usize, + sql: &str, + batches: &Vec>, +) -> Result>> { + if batches.is_empty() { + return Ok(vec![]); + } + if offset == 0 && batches.len() == 1 && batches[0].len() <= 1 { + return Ok(batches.to_owned()); + } + + let now = Instant::now(); + + // write temp file + let work_dir = merge_write_recordbatch(batches)?; + log::info!( + "merge_write_recordbatch took {:.3} seconds.", + now.elapsed().as_secs_f64() + ); + + // rewrite sql + let schema = batches[0][0].schema(); + let query_sql = match merge_rewrite_sql(sql, schema) { + Ok(sql) => { + if offset > 0 + && sql.to_uppercase().contains(" LIMIT ") + && !sql.to_uppercase().contains(" OFFSET ") + { + sql.replace( + &format!(" LIMIT {}", limit + offset), + &format!(" LIMIT {} OFFSET {}", limit, offset), + ) + } else { + sql + } + } + Err(e) => { + return Err(e); + } + }; + log::info!( + "merge_rewrite_sql took {:.3} seconds.", + now.elapsed().as_secs_f64() + ); + + // query data + let runtime_env = create_runtime_env()?; + let session_config = SessionConfig::new() + .with_information_schema(true) + .with_batch_size(4096); + let mut ctx = SessionContext::with_config_rt(session_config.clone(), Arc::new(runtime_env)); + + // Configure listing options + let file_format = ParquetFormat::default().with_enable_pruning(Some(false)); + let listing_options = ListingOptions::new(Arc::new(file_format)) + .with_file_extension(FileType::PARQUET.get_ext()) + .with_target_partitions(CONFIG.limit.cpu_num); + + let prefix = match ListingTableUrl::parse(format!("tmpfs://{}", work_dir)) { + Ok(url) => url, + Err(e) => { + return Err(datafusion::error::DataFusionError::Execution(format!( + "ListingTableUrl error: {}", + e + ))); + } + }; + let prefixes = vec![prefix]; + + let mut config = + ListingTableConfig::new_with_multi_paths(prefixes).with_listing_options(listing_options); + config = config.infer_schema(&ctx.state()).await.unwrap(); + + let table = ListingTable::try_new(config)?; + ctx.register_table("tbl", Arc::new(table))?; + + // register UDF + register_udf(&mut ctx, org_id).await; + + // Debug SQL + // log::info!("Merge sql: {}", query_sql); + + let df = ctx.sql(&query_sql).await?; + let batches = df.collect().await?; + ctx.deregister_table("tbl")?; + + log::info!("Merge took {:.3} seconds.", now.elapsed().as_secs_f64()); + + // clear temp file + tmpfs::remove_dir_all(work_dir).unwrap(); + + Ok(vec![batches]) +} + +fn merge_write_recordbatch(batches: &[Vec]) -> Result { + let work_dir = format!( + "/tmp/zinc_oxide_merge/{}/", + chrono::Utc::now().timestamp_micros() + ); + tmpfs::create_dir_all(&work_dir).unwrap(); + for (i, item) in batches.iter().enumerate() { + let file_name = format!("{}{}.parquet", &work_dir, i); + let f = tmpfs::create_file(file_name).unwrap(); + let mut writer = ArrowWriter::try_new(f, item[0].schema().clone(), None)?; + for row in item.iter() { + writer.write(row)?; + } + writer.close().unwrap(); + } + + Ok(work_dir) +} + +fn merge_rewrite_sql(sql: &str, schema: Arc) -> Result { + let mut sql = sql.to_string(); + let mut fields = Vec::new(); + let mut from_pos = 0; + let sql_chars = sql.chars().collect::>(); + let sql_chars_len = sql_chars.len(); + let mut start_pos = 0; + let mut in_word = false; + let mut bracket = 0; + for i in 0..sql_chars_len { + let c = sql_chars.get(i).unwrap(); + if *c == '(' { + bracket += 1; + continue; + } + if *c == ')' { + bracket -= 1; + continue; + } + if *c == ',' || *c == ' ' { + if bracket > 0 { + continue; + } + if in_word { + let field = sql[start_pos..i].to_string(); + if field.to_lowercase().eq("from") { + from_pos = i; + break; + } + fields.push(field); + } + in_word = false; + continue; + } + if in_word { + continue; + } + start_pos = i; + in_word = true; + } + // println!("fields: {:?}", fields); + + let mut new_fields = Vec::new(); + let mut sel_fields_name = Vec::new(); + let mut sel_fields_has_star = false; + let mut last_is_as = false; + for (i, field) in fields.iter().enumerate() { + let field = field.trim(); + if field.to_lowercase().eq("select") { + continue; + } + if field.to_lowercase().eq("as") { + last_is_as = true; + continue; + } + if last_is_as { + new_fields.remove(new_fields.len() - 1); + new_fields.push(format!("{} AS {}", fields[i - 2], field)); + sel_fields_name.remove(sel_fields_name.len() - 1); + sel_fields_name.push(field.to_string().replace('"', "").replace(", ", ",")); + last_is_as = false; + continue; + } + if field.eq("*") { + sel_fields_has_star = true; + } + new_fields.push(field.to_string()); + sel_fields_name.push(field.to_string().replace('"', "").replace(", ", ",")); + } + // println!("new fields: {:?}", new_fields); + // println!("sel_fields_name: {:?}", sel_fields_name); + // println!("schema fields: {:?}", schema.fields()); + + // handle select * + let mut fields = new_fields; + if fields.len() == 1 && sel_fields_has_star { + return Ok(sql); + } + if sel_fields_has_star { + let mut new_fields = Vec::with_capacity(fields.len()); + for field in fields.iter() { + if field.eq("*") { + for f in schema.fields() { + let f_name = f.name().replace("tbl.", ""); + if sel_fields_name.contains(&f_name) { + continue; + } + let field_name = if f.name().contains('@') { + "_PLACEHOLDER_" + } else { + f.name() + }; + new_fields.push(format!("\"{}\"", field_name)); + } + } else { + new_fields.push(field.to_string()); + } + } + fields = new_fields; + } + if fields.len() != schema.fields().len() { + log::error!( + "in sql fields: {:?}", + fields + .iter() + .map(|f| f.trim_matches('"').to_string()) + .collect::>() + ); + log::error!( + "schema fields: {:?}", + schema + .fields() + .iter() + .map(|f| f.name().clone()) + .collect::>() + ); + return Err(datafusion::error::DataFusionError::Execution( + "merge arrow files error: schema and SQL fields mismatch".to_string(), + )); + } + + let mut need_rewrite = false; + let re_field_fn = Regex::new(r##"(?i)([a-zA-Z0-9_]+)\((['"a-zA-Z0-9_*]+)"##).unwrap(); + for i in 0..fields.len() { + let field = fields.get(i).unwrap(); + if !field.contains('(') { + if field.contains(" AS ") { + need_rewrite = true; + fields[i] = format!("\"{}\"", schema.field(i).name()); + } + continue; + } + need_rewrite = true; + let cap = re_field_fn.captures(field).unwrap(); + let mut fn_name = cap.get(1).unwrap().as_str().to_lowercase(); + if !AGGREGATE_UDF_LIST.contains(&fn_name.as_str()) { + fields[i] = format!("\"{}\"", schema.field(i).name()); + continue; + } + if fn_name == "count" { + fn_name = "sum".to_string(); + } + fields[i] = format!( + "{}(\"{}\") as \"{}\"", + fn_name, + schema.field(i).name(), + schema.field(i).name() + ); + } + if need_rewrite { + // println!("merge_rewrite_sql A: {}", sql); + sql = format!("SELECT {} FROM {}", &fields.join(", "), &sql[from_pos..]); + // println!("merge_rewrite_sql B: {}", sql); + if sql.contains("_PLACEHOLDER_") { + sql = sql.replace(r##""_PLACEHOLDER_", "##, ""); + sql = sql.replace(r##", "_PLACEHOLDER_""##, ""); + } + // println!("merge_rewrite_sql C: {}", sql); + } + + // delete where from sql + let re_where = Regex::new(r"(?i) where (.*)").unwrap(); + let mut where_str = match re_where.captures(&sql) { + Some(caps) => caps[0].to_string(), + None => "".to_string(), + }; + if !where_str.is_empty() { + let mut where_str_lower = where_str.to_lowercase(); + for key in [" order by", " group by", " offset", " limit"].iter() { + if let Some(pos) = where_str_lower.find(key) { + where_str = where_str[..pos].to_string(); + where_str_lower = where_str.to_lowercase(); + } + } + sql = sql.replace(&where_str, " "); + } + + Ok(sql) +} + +pub async fn convert_parquet_file( + buf: &mut Vec, + schema: Arc, + rules: HashMap, + file: &str, +) -> Result<()> { + let now = Instant::now(); + + // query data + let runtime_env = create_runtime_env()?; + let session_config = SessionConfig::new() + .with_information_schema(false) + .with_batch_size(4096); + let ctx = SessionContext::with_config_rt(session_config.clone(), Arc::new(runtime_env)); + + // Configure listing options + let file_format = ParquetFormat::default().with_enable_pruning(Some(false)); + let listing_options = ListingOptions::new(Arc::new(file_format)) + .with_file_extension(FileType::PARQUET.get_ext()) + .with_target_partitions(CONFIG.limit.cpu_num); + + let session_id = Uuid::new_v4().to_string(); + file_list::set(&session_id, &[file.to_string()]) + .await + .unwrap(); + + let prefix = match ListingTableUrl::parse(format!("mem:///{}/", session_id)) { + Ok(url) => url, + Err(e) => { + return Err(datafusion::error::DataFusionError::Execution(format!( + "ListingTableUrl error: {}", + e + ))); + } + }; + let prefixes = vec![prefix]; + + let config = ListingTableConfig::new_with_multi_paths(prefixes) + .with_listing_options(listing_options) + .with_schema(schema.clone()); + + let table = ListingTable::try_new(config)?; + ctx.register_table("tbl", Arc::new(table))?; + + // get all sorted data + let query_sql = format!( + "SELECT * FROM tbl ORDER BY {} DESC", + CONFIG.common.time_stamp_col + ); + let mut df = ctx.sql(&query_sql).await?; + if !rules.is_empty() { + let fields = df.schema().fields(); + let mut exprs = Vec::with_capacity(fields.len()); + for field in fields { + if field.qualifier().is_none() { + exprs.push(col(field.name())); + continue; + } + exprs.push(match rules.get(field.name()) { + Some(rule) => Expr::Alias( + Box::new(cast(col(field.name()), rule.clone())), + field.name().to_string(), + ), + None => col(field.name()), + }); + } + df = df.select(exprs)?; + } + let schema: Schema = df.schema().into(); + let batches = df.collect().await?; + let props = WriterProperties::builder() + .set_compression(get_parquet_compression()) + .set_write_batch_size(4096) + .set_data_pagesize_limit(1024 * 512) + .set_max_row_group_size(1024 * 1024 * 256); + let writer_props = props.build(); + let mut writer = ArrowWriter::try_new(buf, Arc::new(schema), Some(writer_props)).unwrap(); + for batch in batches { + writer.write(&batch)?; + } + writer.close().unwrap(); + ctx.deregister_table("tbl")?; + + // clear session + file_list::clear(&session_id).await.unwrap(); + + log::info!( + "convert_parquet_file took {:.3} seconds.", + now.elapsed().as_secs_f64() + ); + + Ok(()) +} + +pub async fn merge_parquet_files( + buf: &mut Vec, + schema: Arc, + files: &[String], +) -> Result { + let now = Instant::now(); + + // query data + let runtime_env = create_runtime_env()?; + let session_config = SessionConfig::new() + .with_information_schema(false) + .with_batch_size(4096); + let ctx = SessionContext::with_config_rt(session_config.clone(), Arc::new(runtime_env)); + + // Configure listing options + let file_format = ParquetFormat::default().with_enable_pruning(Some(false)); + let listing_options = ListingOptions::new(Arc::new(file_format)) + .with_file_extension(FileType::PARQUET.get_ext()) + .with_target_partitions(CONFIG.limit.cpu_num); + + let session_id = Uuid::new_v4().to_string(); + file_list::set(&session_id, files).await.unwrap(); + + let prefix = match ListingTableUrl::parse(format!("mem:///{}/", session_id)) { + Ok(url) => url, + Err(e) => { + return Err(datafusion::error::DataFusionError::Execution(format!( + "ListingTableUrl error: {}", + e + ))); + } + }; + let prefixes = vec![prefix]; + + let config = ListingTableConfig::new_with_multi_paths(prefixes) + .with_listing_options(listing_options) + .with_schema(schema.clone()); + + let table = ListingTable::try_new(config)?; + ctx.register_table("tbl", Arc::new(table))?; + + // get meta data + let meta_sql = format!( + "SELECT MIN({}) as min_ts, MAX({}) as max_ts, COUNT(1) as num_records FROM tbl", + CONFIG.common.time_stamp_col, CONFIG.common.time_stamp_col + ); + let df = ctx.sql(&meta_sql).await?; + let batches = df.collect().await.unwrap(); + let json_rows = arrowJson::writer::record_batches_to_json_rows(&batches[..]).unwrap(); + let mut result: Vec = json_rows + .into_iter() + .map(serde_json::Value::Object) + .collect(); + let record = result.pop().unwrap(); + let file_meta = FileMeta { + min_ts: record["min_ts"].as_i64().unwrap(), + max_ts: record["max_ts"].as_i64().unwrap(), + records: record["num_records"].as_u64().unwrap(), + original_size: 0, + compressed_size: 0, + }; + + // get all sorted data + let query_sql = format!( + "SELECT * FROM tbl ORDER BY {} DESC", + CONFIG.common.time_stamp_col + ); + let df = ctx.sql(&query_sql).await?; + let schema: Schema = df.schema().into(); + let batches = df.collect().await?; + let sort_column_id = schema.index_of(&CONFIG.common.time_stamp_col).unwrap(); + let props = WriterProperties::builder() + .set_compression(get_parquet_compression()) + .set_write_batch_size(4096) + .set_data_pagesize_limit(1024 * 512) + .set_max_row_group_size(1024 * 1024 * 256) + .set_sorting_columns(Some( + [SortingColumn::new(sort_column_id as i32, true, false)].to_vec(), + )); + let writer_props = props.build(); + let mut writer = ArrowWriter::try_new(buf, Arc::new(schema), Some(writer_props)).unwrap(); + for batch in batches { + writer.write(&batch)?; + } + writer.close().unwrap(); + ctx.deregister_table("tbl")?; + + // clear session + file_list::clear(&session_id).await.unwrap(); + + log::info!( + "merge_parquet_files took {:.3} seconds.", + now.elapsed().as_secs_f64() + ); + + Ok(file_meta) +} + +fn create_runtime_env() -> Result { + let object_store_registry = ObjectStoreRegistry::new(); + + let mem = super::storage::memory::InMemory::new(); + let mem = LimitStore::new(mem, CONFIG.limit.query_thread_num); + object_store_registry.register_store("mem", "", Arc::new(mem)); + + let tmpfs = super::storage::tmpfs::InMemory::new(); + let tmpfs = LimitStore::new(tmpfs, CONFIG.limit.query_thread_num); + object_store_registry.register_store("tmpfs", "", Arc::new(tmpfs)); + + let rn_config = + RuntimeConfig::new().with_object_store_registry(Arc::new(object_store_registry)); + RuntimeEnv::new(rn_config) +} + +async fn register_udf(ctx: &mut SessionContext, org_id: &str) { + ctx.register_udf(super::match_udf::MATCH_UDF.clone()); + ctx.register_udf(super::match_udf::MATCH_NO_CASE_UDF.clone()); + ctx.register_udf(super::regexp_udf::REGEX_MATCH_UDF.clone()); + ctx.register_udf(super::regexp_udf::REGEX_NOT_MATCH_UDF.clone()); + ctx.register_udf(super::time_range_udf::TIME_RANGE_UDF.clone()); + + let udf_list = get_all_transform(org_id).await; + for udf in udf_list { + ctx.register_udf(udf.clone()); + } +} + +#[cfg(test)] +mod test { + use super::*; + #[actix_web::test] + async fn test_register_udf() { + let mut ctx = SessionContext::new(); + let _ = register_udf(&mut ctx, "nexus").await; + //assert!(res) + } +} diff --git a/src/service/search/datafusion/match_udf.rs b/src/service/search/datafusion/match_udf.rs new file mode 100644 index 0000000000..21920edac6 --- /dev/null +++ b/src/service/search/datafusion/match_udf.rs @@ -0,0 +1,144 @@ +use datafusion::{ + arrow::{ + array::{ArrayRef, BooleanArray, StringArray}, + datatypes::DataType, + }, + error::DataFusionError, + logical_expr::{ScalarFunctionImplementation, ScalarUDF, Volatility}, + physical_plan::functions::make_scalar_function, + prelude::create_udf, + sql::sqlparser::parser::ParserError, +}; +use once_cell::sync::Lazy; +use std::sync::Arc; + +use crate::common::str; + +/// The name of the match UDF given to DataFusion. +pub const MATCH_UDF_NAME: &str = "str_match"; + +/// The name of the match_no_case UDF given to DataFusion. +pub const MATCH_UDF_NO_CASE_NAME: &str = "str_match_no_case"; + +/// Implementation of match_range +pub(crate) static MATCH_UDF: Lazy = Lazy::new(|| { + create_udf( + MATCH_UDF_NAME, + // expects two string + vec![DataType::Utf8, DataType::Utf8], + // returns boolean + Arc::new(DataType::Boolean), + Volatility::Stable, + match_expr_impl(false), + ) +}); + +/// Implementation of match_no_case +pub(crate) static MATCH_NO_CASE_UDF: Lazy = Lazy::new(|| { + create_udf( + MATCH_UDF_NO_CASE_NAME, + // expects two string + vec![DataType::Utf8, DataType::Utf8], + // returns boolean + Arc::new(DataType::Boolean), + Volatility::Stable, + match_expr_impl(true), + ) +}); + +/// match function for datafusion +pub fn match_expr_impl(case_insensitive: bool) -> ScalarFunctionImplementation { + let func = move |args: &[ArrayRef]| -> datafusion::error::Result { + if args.len() != 2 { + return Err(DataFusionError::SQL(ParserError::ParserError( + "match UDF expects two string".to_string(), + ))); + } + + // 1. cast both arguments to string. These casts MUST be aligned with the signature or this function panics! + let haystack = &args[0] + .as_any() + .downcast_ref::() + .expect("cast failed"); + let needle = &args[1] + .as_any() + .downcast_ref::() + .expect("cast failed"); + + // 2. perform the computation + let array = haystack + .iter() + .zip(needle.iter()) + .map(|(haystack, needle)| { + match (haystack, needle) { + // in arrow, any value can be null. + // Here we decide to make our UDF to return null when either haystack or needle is null. + (Some(haystack), Some(needle)) => match case_insensitive { + true => Some(str::find( + haystack.to_lowercase().as_str(), + needle.to_lowercase().as_str(), + )), + false => Some(str::find(haystack, needle)), + }, + _ => None, + } + }) + .collect::(); + + // `Ok` because no error occurred during the calculation + // `Arc` because arrays are immutable, thread-safe, trait objects. + Ok(Arc::new(array) as ArrayRef) + }; + + make_scalar_function(func) +} + +#[cfg(test)] +mod tests { + use super::*; + + use datafusion::arrow::array::{Int64Array, StringArray}; + use datafusion::arrow::datatypes::{DataType, Field, Schema}; + use datafusion::arrow::record_batch::RecordBatch; + use datafusion::datasource::MemTable; + use datafusion::from_slice::FromSlice; + use datafusion::prelude::SessionContext; + use std::sync::Arc; + + #[tokio::test] + async fn test_match_udf() { + let sql = "select * from t where str_match(log, 'a') and str_match_no_case(city, 'ny')"; + + // define a schema. + let schema = Arc::new(Schema::new(vec![ + Field::new("log", DataType::Utf8, false), + Field::new("id", DataType::Int64, false), + Field::new("city", DataType::Utf8, false), + ])); + + // define data. + let batch = RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(StringArray::from_slice(&["a", "b", "c", "d"])), + Arc::new(Int64Array::from_slice(&[1, 2, 3, 4])), + Arc::new(StringArray::from_slice(&["NY", "Pune", "SF", "Beijing"])), + ], + ) + .unwrap(); + + // declare a new context. In spark API, this corresponds to a new spark SQLsession + let ctx = SessionContext::new(); + ctx.register_udf(MATCH_UDF.clone()); + ctx.register_udf(MATCH_NO_CASE_UDF.clone()); + + // declare a table in memory. In spark API, this corresponds to createDataFrame(...). + let provider = MemTable::try_new(schema, vec![vec![batch]]).unwrap(); + ctx.register_table("t", Arc::new(provider)).unwrap(); + + let df = ctx.sql(sql).await.unwrap(); + let result = df.collect().await.unwrap(); + let count = result.iter().map(|batch| batch.num_rows()).sum::(); + assert_eq!(count, 1); + } +} diff --git a/src/service/search/datafusion/mod.rs b/src/service/search/datafusion/mod.rs new file mode 100644 index 0000000000..616f91a291 --- /dev/null +++ b/src/service/search/datafusion/mod.rs @@ -0,0 +1,6 @@ +pub mod exec; +mod match_udf; +mod regexp_udf; +pub mod storage; +mod time_range_udf; +mod transform_udf; diff --git a/src/service/search/datafusion/regexp_udf.rs b/src/service/search/datafusion/regexp_udf.rs new file mode 100644 index 0000000000..a5d46e246e --- /dev/null +++ b/src/service/search/datafusion/regexp_udf.rs @@ -0,0 +1,250 @@ +use datafusion::{ + arrow::{ + array::{as_string_array, ArrayRef, BooleanArray}, + datatypes::DataType, + }, + error::DataFusionError, + logical_expr::{ScalarFunctionImplementation, ScalarUDF, Volatility}, + physical_plan::ColumnarValue, + prelude::create_udf, + scalar::ScalarValue, +}; +use once_cell::sync::Lazy; +use std::sync::Arc; + +/// The name of the regex_match UDF given to DataFusion. +pub const REGEX_MATCH_UDF_NAME: &str = "re_match"; + +/// The name of the not_regex_match UDF given to DataFusion. +pub const REGEX_NOT_MATCH_UDF_NAME: &str = "re_not_match"; + +/// Implementation of regexp_match +pub(crate) static REGEX_MATCH_UDF: Lazy = Lazy::new(|| { + create_udf( + REGEX_MATCH_UDF_NAME, + // takes two arguments: regex, pattern + vec![DataType::Utf8, DataType::Utf8], + Arc::new(DataType::Boolean), + Volatility::Stable, + regex_match_expr_impl(true), + ) +}); + +/// Implementation of regexp_not_match +pub(crate) static REGEX_NOT_MATCH_UDF: Lazy = Lazy::new(|| { + create_udf( + REGEX_NOT_MATCH_UDF_NAME, + // takes two arguments: regex, pattern + vec![DataType::Utf8, DataType::Utf8], + Arc::new(DataType::Boolean), + Volatility::Stable, + regex_match_expr_impl(false), + ) +}); + +/// Given a column containing string values and a single regex pattern, +/// `regex_match_expr` determines which values satisfy the pattern and which do +/// not. +/// +/// If `matches` is true then this expression will filter values that do not +/// satisfy the regex (equivalent to `col ~= /pattern/`). If `matches` is `false` +/// then the expression will filter values that *do* match the regex, which is +/// equivalent to `col !~ /pattern/`. +/// +/// This UDF is designed to support the regex operator that can be pushed down +/// via the InfluxRPC API. +/// +pub fn regex_match_expr_impl(matches: bool) -> ScalarFunctionImplementation { + // N.B., this function does not utilise the Arrow regexp compute + // kernel because in order to act as a filter it needs to return a + // boolean array of comparison results, not an array of strings as + // the regex compute kernel does and it needs to implement the + // regexp syntax for influxrpc. + + let func = move |args: &[ColumnarValue]| { + assert_eq!(args.len(), 2); // only works over a single column and pattern at a time. + + let pattern = match &args[1] { + // second arg was array (not constant) + ColumnarValue::Array(_) => { + return Err(DataFusionError::NotImplemented(format!( + "regex_match({}) with non scalar patterns not yet implemented", + matches + ))) + } + ColumnarValue::Scalar(ScalarValue::Utf8(pattern)) => pattern, + ColumnarValue::Scalar(arg) => { + return Err(DataFusionError::Internal(format!( + "Expected string pattern to regex match({}), got: {:?}", + matches, arg + ))) + } + }; + + let pattern = pattern.as_ref().ok_or_else(|| { + DataFusionError::NotImplemented( + "NULL patterns not supported in regex match".to_string(), + ) + })?; + + // Attempt to make the pattern compatible with what is accepted by + // the golang regexp library which is different than Rust's regexp + let pattern = clean_non_meta_escapes(pattern); + + let pattern = regex::Regex::new(&pattern).map_err(|e| { + DataFusionError::Internal(format!("error compiling regex pattern: {}", e)) + })?; + + match &args[0] { + ColumnarValue::Array(arr) => { + let results = as_string_array(arr) + .iter() + .map(|row| { + // in arrow, any value can be null. + // Here we decide to make our UDF to return null when either base or exponent is null. + row.map(|v| pattern.is_match(v) == matches) + }) + .collect::(); + + Ok(ColumnarValue::Array(Arc::new(results) as ArrayRef)) + } + ColumnarValue::Scalar(ScalarValue::Utf8(row)) => { + let res = row.as_ref().map(|v| pattern.is_match(v) == matches); + Ok(ColumnarValue::Scalar(ScalarValue::Boolean(res))) + } + ColumnarValue::Scalar(v) => Err(DataFusionError::Internal(format!( + "regex_match({}) expected first argument to be utf8, got ('{}')", + matches, v + ))), + } + }; + + Arc::new(func) +} + +fn is_valid_character_after_escape(c: char) -> bool { + // same list as https://docs.rs/regex-syntax/0.6.25/src/regex_syntax/ast/parse.rs.html#1445-1538 + match c { + '0'..='7' => true, + '8'..='9' => true, + 'x' | 'u' | 'U' => true, + 'p' | 'P' => true, + 'd' | 's' | 'w' | 'D' | 'S' | 'W' => true, + _ => regex_syntax::is_meta_character(c), + } +} + +/// Removes all `/` patterns that the rust regex library would reject +/// and rewrites them to their unescaped form. +/// +/// For example, `\:` is rewritten to `:` as `\:` is not a valid +/// escape sequence in the `regexp` crate but is valid in golang's +/// regexp implementation. +/// +/// This is done for compatibility purposes so that the regular +/// expression matching in Rust more closely follows the matching in +/// golang, used by the influx storage rpc. +/// +/// See for more details +fn clean_non_meta_escapes(pattern: &str) -> String { + if pattern.is_empty() { + return pattern.to_string(); + } + + #[derive(Clone, Copy, Debug)] + enum SlashState { + No, + Single, + Double, + } + + let mut next_state = SlashState::No; + + let next_chars = pattern + .chars() + .map(Some) + .skip(1) + .chain(std::iter::once(None)); + + // emit char based on previous + let new_pattern: String = pattern + .chars() + .zip(next_chars) + .filter_map(|(c, next_char)| { + let cur_state = next_state; + next_state = match (c, cur_state) { + ('\\', SlashState::No) => SlashState::Single, + ('\\', SlashState::Single) => SlashState::Double, + ('\\', SlashState::Double) => SlashState::Single, + _ => SlashState::No, + }; + + // Decide to emit `c` or not + match (cur_state, c, next_char) { + (SlashState::No, '\\', Some(next_char)) + | (SlashState::Double, '\\', Some(next_char)) + if !is_valid_character_after_escape(next_char) => + { + None + } + _ => Some(c), + } + }) + .collect(); + + new_pattern +} + +#[cfg(test)] +mod tests { + use super::*; + + use datafusion::arrow::array::{Int64Array, StringArray}; + use datafusion::arrow::datatypes::{DataType, Field, Schema}; + use datafusion::arrow::record_batch::RecordBatch; + use datafusion::datasource::MemTable; + use datafusion::from_slice::FromSlice; + use datafusion::prelude::SessionContext; + use std::sync::Arc; + + #[tokio::test] + async fn test_regex_udf() { + let sql = "select * from t where re_match(log, '(err|panic)') and re_not_match(data_center, '(SF|Beijing)')"; + // define a schema. + let schema = Arc::new(Schema::new(vec![ + Field::new("log", DataType::Utf8, false), + Field::new("id", DataType::Int64, false), + Field::new("data_center", DataType::Utf8, false), + ])); + + // define data. + let batch = RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(StringArray::from_slice(&[ + "2010-03-14 - err", + "2014-10-14, panic", + "c", + "d", + ])), + Arc::new(Int64Array::from_slice(&[1, 2, 3, 4])), + Arc::new(StringArray::from_slice(&["NY", "Pune", "SF", "Beijing"])), + ], + ) + .unwrap(); + + // declare a new context. In spark API, this corresponds to a new spark SQLsession + let ctx = SessionContext::new(); + ctx.register_udf(REGEX_MATCH_UDF.clone()); + ctx.register_udf(REGEX_NOT_MATCH_UDF.clone()); + + // declare a table in memory. In spark API, this corresponds to createDataFrame(...). + let provider = MemTable::try_new(schema, vec![vec![batch]]).unwrap(); + ctx.register_table("t", Arc::new(provider)).unwrap(); + + let df = ctx.sql(sql).await.unwrap(); + let result = df.collect().await.unwrap(); + let count = result.iter().map(|batch| batch.num_rows()).sum::(); + assert_eq!(count, 2); + } +} diff --git a/src/service/search/datafusion/storage/file_list.rs b/src/service/search/datafusion/storage/file_list.rs new file mode 100644 index 0000000000..e82e9c97d6 --- /dev/null +++ b/src/service/search/datafusion/storage/file_list.rs @@ -0,0 +1,44 @@ +use chrono::{TimeZone, Utc}; +use dashmap::DashMap; +use object_store::ObjectMeta; + +use crate::service::file_list; + +lazy_static! { + pub static ref FILES: DashMap> = DashMap::new(); +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum SessionType { + Cache, + Local, + Remote, +} + +pub async fn get(session_id: &str) -> Result, anyhow::Error> { + let data = match FILES.get(session_id) { + Some(data) => data, + None => return Err(anyhow::anyhow!("session_id not found")), + }; + Ok(data.value().clone()) +} + +pub async fn set(session_id: &str, files: &[String]) -> Result<(), anyhow::Error> { + let mut values = Vec::with_capacity(files.len()); + for file in files { + let meta = file_list::get_file_meta(file).await.unwrap(); + let modified = Utc.timestamp_nanos(meta.max_ts * 1000); + values.push(ObjectMeta { + location: file.clone().into(), + last_modified: modified, + size: meta.compressed_size as usize, + }); + } + FILES.insert(session_id.to_string(), values); + Ok(()) +} + +pub async fn clear(session_id: &str) -> Result<(), anyhow::Error> { + FILES.remove(session_id); + Ok(()) +} diff --git a/src/service/search/datafusion/storage/memory.rs b/src/service/search/datafusion/storage/memory.rs new file mode 100644 index 0000000000..c0619547cc --- /dev/null +++ b/src/service/search/datafusion/storage/memory.rs @@ -0,0 +1,182 @@ +use async_trait::async_trait; +use bytes::Bytes; +use chrono::Utc; +use futures::{stream::BoxStream, StreamExt}; +use object_store::MultipartId; +use object_store::{path::Path, GetResult, ListResult, ObjectMeta, ObjectStore, Result}; +use std::ops::Range; +use thiserror::Error as ThisError; +use tokio::io::AsyncWrite; + +use crate::infra::cache::file_data; + +/// A specialized `Error` for in-memory object store-related errors +#[derive(ThisError, Debug)] +#[allow(missing_docs)] +enum Error { + #[error("Out of range")] + OutOfRange, + + #[error("Bad range")] + BadRange, +} + +impl From for object_store::Error { + fn from(source: Error) -> Self { + Self::Generic { + store: "InMemory", + source: Box::new(source), + } + } +} + +/// In-memory storage suitable for testing or for opting out of using a cloud +/// storage provider. +#[derive(Debug, Default)] +pub struct InMemory {} + +impl std::fmt::Display for InMemory { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "InMemory") + } +} + +#[async_trait] +impl ObjectStore for InMemory { + async fn get(&self, location: &Path) -> Result { + log::info!("get: {}", location); + let data = self.get_bytes(location).await?; + + Ok(GetResult::Stream( + futures::stream::once(async move { Ok(data) }).boxed(), + )) + } + + async fn get_range(&self, location: &Path, range: Range) -> Result { + // log::info!("get_range: {}, {:?}", location, range); + let data = self.get_bytes(location).await?; + if range.end > data.len() { + return Err(Error::OutOfRange.into()); + } + if range.start > range.end { + return Err(Error::BadRange.into()); + } + Ok(data.slice(range)) + } + + async fn get_ranges(&self, location: &Path, ranges: &[Range]) -> Result> { + // log::info!("get_ranges: {}, {:?}", location, ranges); + let data = self.get_bytes(location).await?; + ranges + .iter() + .map(|range| { + if range.end > data.len() { + return Err(Error::OutOfRange.into()); + } + if range.start > range.end { + return Err(Error::BadRange.into()); + } + Ok(data.slice(range.clone())) + }) + .collect() + } + + async fn head(&self, location: &Path) -> Result { + log::info!("head: {}", location); + let last_modified = Utc::now(); + let bytes = self.get_bytes(location).await?; + Ok(ObjectMeta { + location: location.clone(), + last_modified, + size: bytes.len(), + }) + } + + #[tracing::instrument(name = "service:search:datafusion:storage:memory:list", skip(self))] + async fn list(&self, prefix: Option<&Path>) -> Result>> { + // log::info!("list: {:?}", prefix); + let key = prefix.unwrap().to_string(); + let objects = super::file_list::get(&key).await.unwrap(); + let values = objects + .iter() + .map(|file| Ok(file.to_owned())) + .collect::>>(); + Ok(futures::stream::iter(values).boxed()) + } + + /// The memory implementation returns all results, as opposed to the cloud + /// versions which limit their results to 1k or more because of API + /// limitations. + async fn list_with_delimiter(&self, prefix: Option<&Path>) -> Result { + log::info!("list_with_delimiter: {:?}", prefix); + let key = prefix.unwrap().to_string(); + let objects = super::file_list::get(&key).await.unwrap(); + Ok(ListResult { + objects, + common_prefixes: vec![prefix.unwrap().clone()], + }) + } + + async fn put(&self, location: &Path, _bytes: Bytes) -> Result<()> { + log::error!("NotImplemented put: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn put_multipart( + &self, + location: &Path, + ) -> Result<(MultipartId, Box)> { + log::error!("NotImplemented put_multipart: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn abort_multipart(&self, location: &Path, _multipart_id: &MultipartId) -> Result<()> { + log::error!("NotImplemented abort_multipart: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn delete(&self, location: &Path) -> Result<()> { + log::error!("NotImplemented delete: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn copy(&self, from: &Path, to: &Path) -> Result<()> { + log::error!("NotImplemented copy: from {} to {}", from, to); + Err(object_store::Error::NotImplemented {}) + } + + async fn copy_if_not_exists(&self, from: &Path, to: &Path) -> Result<()> { + log::error!("NotImplemented copy_if_not_exists: from {} to {}", from, to); + Err(object_store::Error::NotImplemented {}) + } +} + +impl InMemory { + /// Create new in-memory storage. + pub fn new() -> Self { + Self::default() + } + + async fn get_bytes(&self, location: &Path) -> Result { + let file = location.to_string(); + let data = file_data::get(&file); + tokio::task::yield_now().await; + if data.is_ok() { + return Ok(data.unwrap()); + } + + // log::info!("get_bytes from storage: {:?}", location); + let data = match file_data::download(&file).await { + Ok(data) => data, + Err(e) => { + log::info!("get_bytes from storage error: {:?}", e); + return Err(object_store::Error::NotFound { + path: location.to_string(), + source: e.into(), + }); + } + }; + + Ok(data) + } +} diff --git a/src/service/search/datafusion/storage/mod.rs b/src/service/search/datafusion/storage/mod.rs new file mode 100644 index 0000000000..ba4aa114fc --- /dev/null +++ b/src/service/search/datafusion/storage/mod.rs @@ -0,0 +1,3 @@ +pub mod file_list; +pub mod memory; +pub mod tmpfs; diff --git a/src/service/search/datafusion/storage/tmpfs.rs b/src/service/search/datafusion/storage/tmpfs.rs new file mode 100644 index 0000000000..f007074669 --- /dev/null +++ b/src/service/search/datafusion/storage/tmpfs.rs @@ -0,0 +1,189 @@ +use async_trait::async_trait; +use bytes::Bytes; +use chrono::Utc; +use futures::{stream::BoxStream, StreamExt}; +use object_store::{path::Path, MultipartId}; +use object_store::{GetResult, ListResult, ObjectMeta, ObjectStore, Result}; +use rsfs::{DirEntry, Metadata}; +use std::ops::Range; +use thiserror::Error as ThisError; +use tokio::io::AsyncWrite; + +use crate::infra::cache::tmpfs; + +/// A specialized `Error` for in-memory object store-related errors +#[derive(ThisError, Debug)] +#[allow(missing_docs)] +enum Error { + #[error("Out of range")] + OutOfRange, + + #[error("Bad range")] + BadRange, +} + +impl From for object_store::Error { + fn from(source: Error) -> Self { + Self::Generic { + store: "InMemory", + source: Box::new(source), + } + } +} + +/// In-memory storage suitable for testing or for opting out of using a cloud +/// storage provider. +#[derive(Debug, Default)] +pub struct InMemory {} + +impl std::fmt::Display for InMemory { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "InMemory") + } +} + +#[async_trait] +impl ObjectStore for InMemory { + async fn get(&self, location: &Path) -> Result { + log::info!("get: {}", location); + let data = self.get_bytes(location).await?; + + Ok(GetResult::Stream( + futures::stream::once(async move { Ok(data) }).boxed(), + )) + } + + async fn get_range(&self, location: &Path, range: Range) -> Result { + // log::info!("get_range: {}, {:?}", location, range); + let data = self.get_bytes(location).await?; + if range.end > data.len() { + return Err(Error::OutOfRange.into()); + } + if range.start > range.end { + return Err(Error::BadRange.into()); + } + Ok(data.slice(range)) + } + + async fn get_ranges(&self, location: &Path, ranges: &[Range]) -> Result> { + // log::info!("get_ranges: {}, {:?}", location, ranges); + let data = self.get_bytes(location).await?; + ranges + .iter() + .map(|range| { + if range.end > data.len() { + return Err(Error::OutOfRange.into()); + } + if range.start > range.end { + return Err(Error::BadRange.into()); + } + Ok(data.slice(range.clone())) + }) + .collect() + } + + async fn head(&self, location: &Path) -> Result { + log::info!("head: {}", location); + let last_modified = Utc::now(); + let bytes = self.get_bytes(location).await?; + Ok(ObjectMeta { + location: location.clone(), + last_modified, + size: bytes.len(), + }) + } + + async fn list(&self, prefix: Option<&Path>) -> Result>> { + // log::info!("list: {:?}", prefix); + let mut values = Vec::new(); + let key = prefix.unwrap().to_string(); + let objects = tmpfs::read_dir(key).unwrap(); + for file in objects { + let file = file.unwrap(); + let file_path = file.path(); + let file_metadata = file.metadata().unwrap(); + values.push(Ok(ObjectMeta { + location: file_path.to_str().unwrap().into(), + last_modified: file_metadata.modified().unwrap().into(), + size: file_metadata.len() as usize, + })); + } + Ok(futures::stream::iter(values).boxed()) + } + + /// The memory implementation returns all results, as opposed to the cloud + /// versions which limit their results to 1k or more because of API + /// limitations. + async fn list_with_delimiter(&self, prefix: Option<&Path>) -> Result { + log::info!("list_with_delimiter: {:?}", prefix); + let mut values = Vec::new(); + let key = prefix.unwrap().to_string(); + let objects = tmpfs::read_dir(key).unwrap(); + for file in objects { + let file = file.unwrap(); + let file_path = file.path(); + let file_metadata = file.metadata().unwrap(); + values.push(ObjectMeta { + location: file_path.to_str().unwrap().into(), + last_modified: file_metadata.modified().unwrap().into(), + size: file_metadata.len() as usize, + }); + } + Ok(ListResult { + objects: values, + common_prefixes: vec![prefix.unwrap().clone()], + }) + } + + async fn put(&self, location: &Path, _bytes: Bytes) -> Result<()> { + log::error!("NotImplemented put: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn put_multipart( + &self, + location: &Path, + ) -> Result<(MultipartId, Box)> { + log::error!("NotImplemented put_multipart: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn abort_multipart(&self, location: &Path, _multipart_id: &MultipartId) -> Result<()> { + log::error!("NotImplemented abort_multipart: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn delete(&self, location: &Path) -> Result<()> { + log::error!("NotImplemented delete: {}", location); + Err(object_store::Error::NotImplemented {}) + } + + async fn copy(&self, from: &Path, to: &Path) -> Result<()> { + log::error!("NotImplemented copy: from {} to {}", from, to); + Err(object_store::Error::NotImplemented {}) + } + + async fn copy_if_not_exists(&self, from: &Path, to: &Path) -> Result<()> { + log::error!("NotImplemented copy_if_not_exists: from {} to {}", from, to); + Err(object_store::Error::NotImplemented {}) + } +} + +impl InMemory { + /// Create new in-memory storage. + pub fn new() -> Self { + Self::default() + } + + async fn get_bytes(&self, location: &Path) -> Result { + let file = location.to_string(); + // log::info!("get_bytes: {}", &file); + match tmpfs::read_file(file) { + Ok(data) => Ok(Bytes::from(data)), + Err(e) => Err(object_store::Error::NotFound { + path: location.to_string(), + source: e.into(), + }), + } + } +} diff --git a/src/service/search/datafusion/time_range_udf.rs b/src/service/search/datafusion/time_range_udf.rs new file mode 100644 index 0000000000..a8875fa1b7 --- /dev/null +++ b/src/service/search/datafusion/time_range_udf.rs @@ -0,0 +1,149 @@ +use datafusion::{ + arrow::{ + array::{ArrayRef, BooleanArray, Int64Array, StringArray}, + datatypes::DataType, + }, + error::DataFusionError, + logical_expr::{ScalarFunctionImplementation, ScalarUDF, Volatility}, + physical_plan::functions::make_scalar_function, + prelude::create_udf, + sql::sqlparser::parser::ParserError, +}; +use once_cell::sync::Lazy; +use std::iter::zip; +use std::sync::Arc; + +use crate::common::str; +use crate::common::time; + +/// The name of the time_range UDF given to DataFusion. +pub const TIME_RANGE_UDF_NAME: &str = "time_range"; + +/// Implementation of time_range +pub(crate) static TIME_RANGE_UDF: Lazy = Lazy::new(|| { + create_udf( + TIME_RANGE_UDF_NAME, + // expects three string + vec![DataType::Int64, DataType::Utf8, DataType::Utf8], + // returns boolean + Arc::new(DataType::Boolean), + Volatility::Immutable, + time_range_expr_impl(), + ) +}); + +/// time_range function for datafusion +pub fn time_range_expr_impl() -> ScalarFunctionImplementation { + let func = move |args: &[ArrayRef]| -> datafusion::error::Result { + if args.len() != 3 { + return Err(DataFusionError::SQL(ParserError::ParserError( + "time_range UDF expects three string".to_string(), + ))); + } + + // 1. cast both arguments to Union. These casts MUST be aligned with the signature or this function panics! + let base = &args[0] + .as_any() + .downcast_ref::() + .expect("cast failed"); + let min = &args[1] + .as_any() + .downcast_ref::() + .expect("cast failed"); + let max = &args[2] + .as_any() + .downcast_ref::() + .expect("cast failed"); + + // 2. perform the computation + let array = zip(base.iter(), zip(min.iter(), max.iter())) + .map(|(base, val)| { + match (base, val) { + // in arrow, any value can be null. + // Here we decide to make our UDF to return null when either argument is null. + (Some(base), (Some(min), Some(max))) => { + let min = match time::parse_str_to_timestamp_micros(min) { + Ok(v) => v, + Err(_) => return None, + }; + let max = match time::parse_str_to_timestamp_micros(max) { + Ok(v) => v, + Err(_) => return None, + }; + let result: bool; + if min > 0 && max > 0 { + result = base >= min && base < max; + } else if min > 0 { + result = base >= min; + } else if max > 0 { + result = base < max; + } else { + result = true; + } + Some(result) + } + _ => None, + } + }) + .collect::(); + + // `Ok` because no error occurred during the calculation + // `Arc` because arrays are immutable, thread-safe, trait objects. + Ok(Arc::new(array) as ArrayRef) + }; + + make_scalar_function(func) +} + +#[cfg(test)] +mod tests { + use super::*; + + use datafusion::arrow::array::{Int64Array, StringArray}; + use datafusion::arrow::datatypes::{DataType, Field, Schema}; + use datafusion::arrow::record_batch::RecordBatch; + use datafusion::datasource::MemTable; + use datafusion::from_slice::FromSlice; + use datafusion::prelude::SessionContext; + use std::sync::Arc; + + #[tokio::test] + async fn time_range() { + let data_time = time::parse_str_to_timestamp_micros("2021-01-01T00:00:00.000Z").unwrap(); + let sql = "select * from t where time_range(time, '2021-01-01T00:00:00.000Z', '2021-01-02T00:00:00.000Z')"; + + // define a schema. + let schema = Arc::new(Schema::new(vec![ + Field::new("log", DataType::Utf8, false), + Field::new("time", DataType::Int64, false), + ])); + + // define data. + let batch = RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(StringArray::from_slice(&["a", "b", "c", "d"])), + Arc::new(Int64Array::from_slice(&[ + data_time - 1, + data_time, + data_time + 1, + data_time + 2, + ])), + ], + ) + .unwrap(); + + // declare a new context. In spark API, this corresponds to a new spark SQLsession + let ctx = SessionContext::new(); + ctx.register_udf(TIME_RANGE_UDF.clone()); + + // declare a table in memory. In spark API, this corresponds to createDataFrame(...). + let provider = MemTable::try_new(schema, vec![vec![batch]]).unwrap(); + ctx.register_table("t", Arc::new(provider)).unwrap(); + + let df = ctx.sql(sql).await.unwrap(); + let result = df.collect().await.unwrap(); + let count = result.iter().map(|batch| batch.num_rows()).sum::(); + assert_eq!(count, 3); + } +} diff --git a/src/service/search/datafusion/transform_udf.rs b/src/service/search/datafusion/transform_udf.rs new file mode 100644 index 0000000000..7464110503 --- /dev/null +++ b/src/service/search/datafusion/transform_udf.rs @@ -0,0 +1,275 @@ +use datafusion::{ + arrow::{ + array::{Array, ArrayRef, StringArray}, + datatypes::DataType, + }, + logical_expr::{ScalarFunctionImplementation, ScalarUDF, Volatility}, + physical_plan::functions::make_scalar_function, + prelude::create_udf, +}; +use mlua::{Function, Lua, LuaSerdeExt, MultiValue}; +use std::sync::Arc; + +use crate::infra::config::QUERY_TRANSFORMS; + +fn create_user_df( + fn_name: &str, + num_args: u8, + pow_scalar: ScalarFunctionImplementation, +) -> ScalarUDF { + let mut input_vec = vec![]; + for _i in 0..num_args { + input_vec.push(DataType::Utf8); + } + + create_udf( + fn_name, + input_vec, + Arc::new(DataType::Utf8), + Volatility::Immutable, + pow_scalar, + ) +} + +/* fn get_udf(fn_name: String, js_func: &str, num_args: u8) -> datafusion::logical_expr::ScalarUDF { + let local_fn_name = fn_name.to_owned(); + let local_js_func = js_func.to_owned(); + + let pow_calc = move |args: &[ArrayRef]| { + // Create a new Isolate and make it the current one. + let isolate = &mut v8::Isolate::new(v8::CreateParams::default()); + // Create a stack-allocated handle scope. + let handle_scope = &mut v8::HandleScope::new(isolate); + // Create a new context. + let context = v8::Context::new(handle_scope); + // Enter the context for compiling and running the hello world script. + let mut scope = v8::ContextScope::new(handle_scope, context); + + let len = args[0].len(); + + let mut data_vec = vec![]; + + for i in 0..len { + data_vec.insert( + i, + eval_user_fn( + &mut scope, + args, + i, + fn_name.to_owned().as_str(), + local_js_func.to_owned().as_str(), + ), + ); + } + let result = StringArray::from(data_vec); + + // `Ok` because no error occurred during the calculation (we should add one if exponent was [0, 1[ and the base < 0 because that panics!) + // `Arc` because arrays are immutable, thread-safe, trait objects. + Ok(Arc::new(result) as ArrayRef) + }; + // the function above expects an `ArrayRef`, but DataFusion may pass a scalar to a UDF. + // thus, we use `make_scalar_function` to decorare the closure so that it can handle both Arrays and Scalar values. + let pow_scalar = make_scalar_function(pow_calc); + + // Next: + // * give it a name so that it shows nicely when the plan is printed + // * declare what input it expects + // * declare its return type + let pow_udf = create_user_df(local_fn_name.as_str(), num_args, pow_scalar); + pow_udf +} + +fn eval_user_fn( + scope: &mut ContextScope, + args: &[Arc], + stream: usize, + fn_name: &str, + js_func: &str, +) -> String { + let mut js_fn_arg = String::new(); + js_fn_arg.push_str(fn_name); + js_fn_arg.push('('); + + for (_i, arg) in args.iter().enumerate() { + let col = arg + .as_any() + .downcast_ref::() + .expect("cast failed"); + if col.data_type().equals_datatype(&DataType::Utf8) { + js_fn_arg.push_str(&format!("'{}'", col.value(stream))); + } else { + js_fn_arg.push_str(&col.value(stream)); + } + js_fn_arg.push(','); + } + js_fn_arg.pop(); + js_fn_arg.push(')'); + + let js_fn_str = format!(r#"{};{};"#, js_func, js_fn_arg); + let source_reg = v8::String::new(scope, &js_fn_str).unwrap(); + // scope.add_context_data(context, source_log); + let script = v8::Script::compile(scope, source_reg, None).unwrap(); + // Run the script to get the result. + let result = script.run(scope); + match result { + Some(ret) => { + let _result = ret.to_string(scope).unwrap(); + _result.to_rust_string_lossy(scope) + } + None => "".to_owned(), + } +} */ + +pub async fn get_all_transform(org_id: &str) -> Vec { + let mut udf; + let mut udf_list = Vec::new(); + for trnasform in QUERY_TRANSFORMS.iter() { + let key = trnasform.key(); + //do not register ingest_time transforms + if trnasform.stream_name.is_empty() && key.contains(org_id) { + //if transform.trans_type == 1 { + udf = get_udf_lua( + trnasform.name.to_owned(), + trnasform.function.to_owned().as_str(), + trnasform.num_args, + ); + /* } else { + + udf = get_udf( + transform.name.to_owned(), + transform.function.to_owned().as_str(), + transform.num_args, + ); + } */ + + udf_list.push(udf); + } + } + udf_list +} + +fn get_udf_lua( + fn_name: String, + js_func: &str, + num_args: u8, +) -> datafusion::logical_expr::ScalarUDF { + let local_fn_name = fn_name; + let local_js_func = js_func.to_owned(); + let pow_calc = move |args: &[ArrayRef]| { + //Lua + let lua = Lua::new(); + //Register Lua Function + let func = load_tarnsform(&lua, local_js_func.to_string()); + let len = args[0].len(); + + let mut data_vec = vec![]; + + for i in 0..len { + data_vec.insert(i, lua_transform(&lua, &func, args, i)); + } + let result = StringArray::from(data_vec); + + // `Ok` because no error occurred during the calculation (we should add one if exponent was [0, 1[ and the base < 0 because that panics!) + // `Arc` because arrays are immutable, thread-safe, trait objects. + Ok(Arc::new(result) as ArrayRef) + }; + // the function above expects an `ArrayRef`, but DataFusion may pass a scalar to a UDF. + // thus, we use `make_scalar_function` to decorare the closure so that it can handle both Arrays and Scalar values. + let pow_scalar = make_scalar_function(pow_calc); + + // Next: + // * give it a name so that it shows nicely when the plan is printed + // * declare what input it expects + // * declare its return type + let pow_udf = create_user_df(local_fn_name.as_str(), num_args, pow_scalar); + pow_udf +} + +fn load_tarnsform(lua: &Lua, js_func: String) -> Function { + lua.load(&js_func).eval().unwrap() +} + +fn lua_transform(lua: &Lua, func: &Function, args: &[ArrayRef], stream: usize) -> String { + let mut input = MultiValue::new(); + + for (_i, arg) in args.iter().enumerate() { + let col = arg + .as_any() + .downcast_ref::() + .expect("cast failed"); + + input.push_front(lua.to_value(&col.value(stream)).unwrap()); + } + + let _res = func.call::<_, String>(input); + match _res { + Ok(res) => res, + Err(err) => { + log::error!("lua_transform execute error: {}", err); + "".to_string() + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + use datafusion::arrow::array::{Int64Array, StringArray}; + use datafusion::arrow::datatypes::{DataType, Field, Schema}; + use datafusion::arrow::record_batch::RecordBatch; + use datafusion::datasource::MemTable; + use datafusion::from_slice::FromSlice; + use datafusion::prelude::SessionContext; + use std::sync::Arc; + + #[tokio::test] + async fn time_range() { + //let data_time = parse_time("2021-01-01T00:00:00.000Z").unwrap(); + let sql = "select * ,luaconcat(log,pod_id) as c from t "; + + // define a schema. + let schema = Arc::new(Schema::new(vec![ + Field::new("log", DataType::Utf8, false), + Field::new("pod_id", DataType::Int64, false), + ])); + + // define data. + let batch = RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(StringArray::from_slice(&["a", "b", "c", "d"])), + Arc::new(Int64Array::from_slice(&[1, 2, 1, 2])), + ], + ) + .unwrap(); + + // declare a new context. In spark API, this corresponds to a new spark SQLsession + let ctx = SessionContext::new(); + + let udf = get_udf_lua("luaconcat".to_string(), "function(a, b) return a..b end", 2); + ctx.register_udf(udf.clone()); + + // declare a table in memory. In spark API, this corresponds to createDataFrame(...). + let provider = MemTable::try_new(schema, vec![vec![batch]]).unwrap(); + ctx.register_table("t", Arc::new(provider)).unwrap(); + + let df = ctx.sql(sql).await.unwrap(); + let result = df.collect().await.unwrap(); + /* datafusion::assert_batches_sorted_eq!( + vec![ + "+-----+--------+----+", + "| log | pod_id | c |", + "+-----+--------+----+", + "| a | 1 | 1a |", + "| b | 2 | 2b |", + "| c | 1 | 1c |", + "| d | 2 | 2d |", + "+-----+--------+----+", + ], + &df + ); */ + let count = result.iter().map(|batch| batch.num_rows()).sum::(); + assert_eq!(count, 4); + } +} diff --git a/src/service/search/exec.rs b/src/service/search/exec.rs new file mode 100644 index 0000000000..8a18d0def7 --- /dev/null +++ b/src/service/search/exec.rs @@ -0,0 +1,209 @@ +use ::datafusion::arrow::ipc; +use ahash::AHashMap as HashMap; +use std::sync::Arc; +use tracing::{info_span, Instrument}; + +use crate::handler::grpc::cluster_rpc; +use crate::infra::config::CONFIG; +use crate::meta::StreamType; + +#[tracing::instrument(name = "service:search:exec", skip(req))] +pub async fn search( + req: &cluster_rpc::SearchRequest, +) -> Result { + let start = std::time::Instant::now(); + + let sql = super::sql::Sql::new(req).await; + if sql.is_err() { + return Err(sql.err().unwrap()); + } + let sql = Arc::new(sql.unwrap()); + let stream_type: StreamType = StreamType::from(req.stream_type.as_str()); + let session_id = req.job.as_ref().unwrap().session_id.to_string(); + let session_id = Arc::new(session_id); + + // result + let mut results = HashMap::new(); + let mut file_count = 0; + let mut scan_size = 0; + + let span1 = info_span!("service:search:exec:in_cache"); + + // search in cache + let session_id1 = session_id.clone(); + let sql1 = sql.clone(); + let task1 = tokio::task::spawn( + async move { + match super::cache::search(&session_id1, sql1, stream_type).await { + Ok(res) => Ok(res), + Err(err) => Err(err), + } + } + .instrument(span1), + ); + + let span2 = info_span!("service:search:exec:in_storage"); + + // search in object storage + let req_stype = req.stype; + let session_id2 = session_id.clone(); + let sql2 = sql.clone(); + let file_list = req.file_list.to_owned(); + let task2 = tokio::task::spawn( + async move { + if req_stype == cluster_rpc::SearchType::CacheOnly as i32 { + Ok((HashMap::new(), 0, 0)) + } else { + match super::storage::search(&session_id2, sql2, file_list.as_slice(), stream_type) + .await + { + Ok(res) => Ok(res), + Err(err) => Err(err), + } + } + } + .instrument(span2), + ); + + // merge local cache + let (batches1, file_count1, scan_size1) = match task1.await { + Ok(result) => match result { + Ok((search_result, file_count, scan_size)) => (search_result, file_count, scan_size), + Err(err) => return Err(err), + }, + Err(err) => return Err(anyhow::anyhow!(err)), + }; + + if !batches1.is_empty() { + for (key, batch) in batches1 { + if !batch.is_empty() { + let value = results.entry(key).or_insert_with(Vec::new); + value.push(batch); + } + } + } + file_count += file_count1; + scan_size += scan_size1; + + // merge object storage search + let (batches2, file_count2, scan_size2) = match task2.await { + Ok(result) => match result { + Ok((search_result, file_count, scan_size)) => (search_result, file_count, scan_size), + Err(err) => return Err(err), + }, + Err(err) => return Err(anyhow::anyhow!(err)), + }; + + if !batches2.is_empty() { + for (key, batch) in batches2 { + if !batch.is_empty() { + let value = results.entry(key).or_insert_with(Vec::new); + value.push(batch); + } + } + } + file_count += file_count2; + scan_size += scan_size2; + + let span3 = info_span!("service:search:exec:merge"); + let guard3 = span3.enter(); + + // merge all batches + let (offset, limit) = if CONFIG.common.local_mode { + (sql.meta.offset, sql.meta.limit) + } else { + (0, sql.meta.offset + sql.meta.limit) + }; + for (name, batches) in results.iter_mut() { + let merge_sql = if name.eq("query") { + sql.origin_sql.clone() + } else { + sql.aggs + .get(name.strip_prefix("agg_").unwrap()) + .unwrap() + .0 + .clone() + }; + *batches = + match super::datafusion::exec::merge(&sql.org_id, offset, limit, &merge_sql, batches) + .await + { + Ok(res) => res, + Err(err) => return Err(anyhow::anyhow!(err)), + }; + } + + // clear session data + super::datafusion::storage::file_list::clear(&session_id) + .await + .unwrap(); + + drop(guard3); + let span4 = info_span!("service:search:exec:response"); + let _guard4 = span4.enter(); + + // final result + let mut hits_buf = Vec::new(); + let result_query = match results.get("query") { + Some(batches) => batches.to_owned(), + None => Vec::new(), + }; + if !result_query.is_empty() { + let schema = result_query[0][0].schema(); + let ipc_options = ipc::writer::IpcWriteOptions::default(); + let ipc_options = ipc_options + .try_with_compression(Some(ipc::CompressionType::ZSTD)) + .unwrap(); + let mut writer = + ipc::writer::FileWriter::try_new_with_options(hits_buf, &schema, ipc_options).unwrap(); + for batch in result_query { + for item in batch { + writer.write(&item).unwrap(); + } + } + writer.finish().unwrap(); + hits_buf = writer.into_inner().unwrap(); + } + + // finally aggs result + let mut aggs_buf = Vec::new(); + for (key, batches) in results { + if key.eq("query") || batches.is_empty() { + continue; + } + let mut buf = Vec::new(); + let schema = batches[0][0].schema(); + let ipc_options = ipc::writer::IpcWriteOptions::default(); + let ipc_options = ipc_options + .try_with_compression(Some(ipc::CompressionType::ZSTD)) + .unwrap(); + let mut writer = + ipc::writer::FileWriter::try_new_with_options(buf, &schema, ipc_options).unwrap(); + for batch in batches { + for item in batch { + writer.write(&item).unwrap(); + } + } + writer.finish().unwrap(); + buf = writer.into_inner().unwrap(); + aggs_buf.push(cluster_rpc::SearchAggResponse { + name: key.strip_prefix("agg_").unwrap().to_string(), + hits: buf, + }); + } + + let scan_size = scan_size / 1024 / 1024; // MB + let result = cluster_rpc::SearchResponse { + job: req.job.clone(), + took: start.elapsed().as_millis() as i32, + from: sql.meta.offset as i32, + size: sql.meta.limit as i32, + total: 0, + file_count: file_count as i32, + scan_size: scan_size as i32, + hits: hits_buf, + aggs: aggs_buf, + }; + + Ok(result) +} diff --git a/src/service/search/sql.rs b/src/service/search/sql.rs new file mode 100644 index 0000000000..39b12bd9df --- /dev/null +++ b/src/service/search/sql.rs @@ -0,0 +1,600 @@ +use ahash::AHashMap; +use chrono::Duration; +use datafusion::arrow::datatypes::{DataType, Schema}; +use regex::Regex; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::fmt::{Display, Formatter}; + +use crate::common::str; +use crate::handler::grpc::cluster_rpc; +use crate::infra::config::CONFIG; +use crate::meta::sql::Sql as MetaSql; +use crate::meta::StreamType; +use crate::service::stream::get_stream_setting_fts_fields; +use crate::service::{db, file_list, logs}; + +const SQL_KEYWORDS: [&str; 31] = [ + "SELECT", "FROM", "WHERE", "TABLE", "LIMIT", "OFFSET", "AND", "OR", "NOT", "IN", "ANY", "IS", + "NULL", "CASE", "AS", "HAVING", "GROUP", "BY", "ORDER", "ASC", "DESC", "BETWEEN", "LIKE", + "DISTINCT", "UNION", "JOIN", "INNER", "OUTER", "INDEX", "LEFT", "RIGHT", +]; +const SQL_FULL_TEXT_SEARCH_FIELDS: [&str; 4] = ["log", "message", "content", "data"]; +const SQL_PUNCTUATION: [char; 2] = ['"', '\'']; + +#[derive(Clone, Debug, Serialize)] +pub struct Sql { + pub origin_sql: String, + pub org_id: String, + pub stream_name: String, + pub meta: MetaSql, + pub fulltext: Vec<(String, String)>, + pub aggs: AHashMap, + pub fields: Vec, + pub sql_mode: SqlMode, + pub schema: Schema, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub enum SqlMode { + Context, + Full, +} + +impl From<&str> for SqlMode { + fn from(mode: &str) -> Self { + match mode.to_lowercase().as_str() { + "full" => SqlMode::Full, + "context" => SqlMode::Context, + _ => SqlMode::Context, + } + } +} + +impl Display for SqlMode { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + SqlMode::Context => write!(f, "context"), + SqlMode::Full => write!(f, "full"), + } + } +} + +impl Sql { + #[tracing::instrument(name = "service:search:sql:new", skip(req))] + pub async fn new(req: &cluster_rpc::SearchRequest) -> Result { + let req_query = req.query.as_ref().unwrap(); + let req_time_range = (req_query.start_time, req_query.end_time); + let org_id = req.org_id.clone(); + let stream_type: StreamType = StreamType::from(req.stream_type.as_str()); + + let mut origin_sql = req_query.sql.clone(); + + // Hack for quote + origin_sql = add_quote_for_sql(&origin_sql); + // log::info!("[TRACE] origin_sql: {:?}", origin_sql); + + // check sql_mode + let sql_mode: SqlMode = req_query.sql_mode.as_str().into(); + let mut track_total_hits = if sql_mode.eq(&SqlMode::Full) { + false + } else { + req_query.track_total_hits + }; + + // check SQL + let re1 = Regex::new(r"(?i) (limit|offset|group|having|join|union) ").unwrap(); + let re2 = Regex::new(r"(?i) (join|union) ").unwrap(); + if sql_mode.eq(&SqlMode::Context) && re1.is_match(&origin_sql) { + return Err(anyhow::anyhow!( + "sql_mode=context, Query SQL is not supported [limit|offset|group by|having|join|union]", + )); + } + if sql_mode.eq(&SqlMode::Full) && re2.is_match(&origin_sql) { + return Err(anyhow::anyhow!( + "sql_mode=full, Query SQL is not supported [join|union]", + )); + } + + // check time_range + if req_time_range.0 > 0 + && req_time_range.0 < Duration::seconds(1).num_microseconds().unwrap() + { + return Err(anyhow::anyhow!( + "Query SQL time_range start_time should be microseconds", + )); + } + if req_time_range.1 > 0 + && req_time_range.1 < Duration::seconds(1).num_microseconds().unwrap() + { + return Err(anyhow::anyhow!( + "Query SQL time_range start_time should be microseconds", + )); + } + if req_time_range.0 > 0 && req_time_range.1 > 0 && req_time_range.1 < req_time_range.0 { + return Err(anyhow::anyhow!( + "Query SQL time_range start_time should be less than end_time", + )); + } + + // check full sql_mode limit + if sql_mode.eq(&SqlMode::Full) { + let origin_sql = origin_sql.to_lowercase(); + if !origin_sql.contains(" limit ") + && !origin_sql.contains(" group ") + && !origin_sql.contains(" count(") + { + return Err(anyhow::anyhow!("sql_mode=full, Query SQL must limit rows")); + } + } + + // check Agg SQL + // 1. must from query + // 2. disallow select * + // 3. must select group by field + let re1 = Regex::new(r"(?i) from[ ]+query").unwrap(); + let re2 = Regex::new(r"(?i)select \*").unwrap(); + let re3 = Regex::new(r##"(?i) group[ ]+by[ ]+([a-zA-Z0-9'"._-]+)"##).unwrap(); + let re4 = Regex::new(r"(?i)select (.*) from[ ]+query").unwrap(); + let mut req_aggs = HashMap::new(); + for agg in req.aggs.iter() { + req_aggs.insert(agg.name.to_string(), agg.sql.to_string()); + } + if sql_mode.eq(&SqlMode::Full) && !req_aggs.is_empty() { + return Err(anyhow::anyhow!("sql_mode=full, Query not supported aggs")); + } + + // check aggs + if !req_aggs.is_empty() { + track_total_hits = true; + } + for sql in req_aggs.values() { + if !re1.is_match(sql.as_str()) { + return Err(anyhow::anyhow!( + "Aggregation SQL only support 'from query' as context", + )); + } + if re2.is_match(sql.as_str()) { + return Err(anyhow::anyhow!( + "Aggregation SQL is not supportted 'select *' please specify the fields", + )); + } + if re3.is_match(sql.as_str()) { + let caps = re3.captures(sql.as_str()).unwrap(); + let group_by = caps + .get(1) + .unwrap() + .as_str() + .trim_matches(|v| v == '\'' || v == '"'); + let select_caps = match re4.captures(sql.as_str()) { + Some(caps) => caps, + None => { + return Err(anyhow::anyhow!( + "Aggregation SQL should start with 'select'", + )) + } + }; + if !select_caps.get(1).unwrap().as_str().contains(group_by) { + return Err(anyhow::anyhow!( + "Aggregation SQL used [group by] you should select the field [{}]", + group_by + )); + } + } + } + + // parse sql + let meta = MetaSql::new(&origin_sql); + if meta.is_err() { + return Err(anyhow::anyhow!(meta.err().unwrap())); + } + let mut meta = meta.unwrap(); + + // fetch schema + let schema = match db::schema::get(&org_id, &meta.source, Some(stream_type)).await { + Ok(schema) => schema, + Err(_) => Schema::empty(), + }; + let schema_fields = schema.fields().to_vec(); + + // Hack for DataFusion + // DataFusion disallow use `k8s-logs-2022.09.11` as table name + let stream_name = meta.source.clone(); + let re = Regex::new(&format!(r##"(?i) from[ '"]+{}[ '"]?"##, stream_name)).unwrap(); + let caps = match re.captures(origin_sql.as_str()) { + Some(caps) => caps, + None => return Err(anyhow::anyhow!("SQL should likes [select * from table]")), + }; + origin_sql = origin_sql.replace(caps.get(0).unwrap().as_str(), " FROM tbl "); + + // Hack _timestamp + if !sql_mode.eq(&SqlMode::Full) + && meta.order_by.is_empty() + && !origin_sql.contains('*') + && !origin_sql.contains(&CONFIG.common.time_stamp_col) + { + let re = Regex::new(r"(?i)SELECT (.*) FROM").unwrap(); + let caps = re.captures(origin_sql.as_str()).unwrap(); + let cap_str = caps.get(1).unwrap().as_str(); + origin_sql = origin_sql.replace( + cap_str, + &format!("{}, {}", &CONFIG.common.time_stamp_col, cap_str), + ); + } + + // Hack time range + if req_time_range.0 > 0 || req_time_range.1 > 0 { + meta.time_range = Some(req_time_range); + } + if req.partition.is_some() { + let partition = req.partition.as_ref().unwrap(); + meta.time_range = Some((partition.time_min, partition.time_max)); + } + if let Some(time_range) = meta.time_range { + let time_range_sql = if req_time_range.0 > 0 && req_time_range.1 > 0 { + format!( + "({} >= {} AND {} < {})", + CONFIG.common.time_stamp_col, + time_range.0, + CONFIG.common.time_stamp_col, + time_range.1 + ) + } else if req_time_range.0 > 0 { + format!("{} >= {}", CONFIG.common.time_stamp_col, time_range.0) + } else if req_time_range.1 > 0 { + format!("{} < {}", CONFIG.common.time_stamp_col, time_range.1) + } else { + "".to_string() + }; + if !time_range_sql.is_empty() { + let re = Regex::new(r"(?i) WHERE (.*)").unwrap(); + match re.captures(origin_sql.as_str()) { + Some(caps) => { + let mut where_str = caps.get(1).unwrap().as_str().to_string(); + if where_str.to_lowercase().contains(" order ") { + where_str = where_str + [0..where_str.to_lowercase().find(" order ").unwrap()] + .to_string(); + } + if !where_str.contains(&CONFIG.common.time_stamp_col) { + origin_sql = origin_sql.replace( + where_str.as_str(), + &format!("{} AND {}", time_range_sql, where_str), + ); + } + } + None => { + origin_sql = origin_sql + .replace(" FROM tbl", &format!(" FROM tbl WHERE {}", time_range_sql)); + } + }; + } + } + + // Hack offset limit + meta.offset = req_query.from as usize; + meta.limit = req_query.size as usize; + if !sql_mode.eq(&SqlMode::Full) && !origin_sql.to_lowercase().contains(" limit ") { + origin_sql = if meta.order_by.is_empty() { + format!( + "{} ORDER BY {} DESC LIMIT {}", + origin_sql, + CONFIG.common.time_stamp_col, + meta.offset + meta.limit + ) + } else { + format!("{} LIMIT {}", origin_sql, meta.offset + meta.limit) + }; + } + + // HACK full text search + let mut fulltext = Vec::new(); + let re1 = Regex::new(r"(?i)match_all\('([^']*)'\)").unwrap(); + let re2 = Regex::new(r"(?i)match_all_no_case\('([^']*)'\)").unwrap(); + for cap in re1.captures_iter(&origin_sql) { + // println!("match_all: {}, {}", &cap[0], &cap[1]); + fulltext.push((cap[0].to_string(), cap[1].to_string())); + } + for cap in re2.captures_iter(&origin_sql) { + // println!("match_all_no_case: {}, {}", &cap[0], &cap[1]); + fulltext.push((cap[0].to_string(), cap[1].to_lowercase())); + } + // fetch fts fields + let fts_fiels = get_stream_setting_fts_fields(&schema).unwrap(); + let match_all_fields = if !fts_fiels.is_empty() { + fts_fiels.iter().map(|v| v.to_lowercase()).collect() + } else { + SQL_FULL_TEXT_SEARCH_FIELDS + .iter() + .map(|v| v.to_string()) + .collect::() + }; + for item in fulltext.iter() { + let mut fulltext_search = Vec::new(); + for field in &schema_fields { + if !CONFIG.common.feature_fulltext_on_all_fields + && !match_all_fields.contains(&field.name().to_lowercase()) + { + continue; + } + if !field.data_type().eq(&DataType::Utf8) || field.name().starts_with('@') { + continue; + } + let mut func = "STR_MATCH"; + if item.0.to_lowercase().contains("_no_case") { + func = "STR_MATCH_NO_CASE"; + } + fulltext_search.push(format!("{}(\"{}\", '{}')", func, field.name(), item.1)); + } + if fulltext_search.is_empty() { + return Err(anyhow::anyhow!("No full text search field found")); + } + let fulltext_search = format!("({})", fulltext_search.join(" OR ")); + origin_sql = origin_sql.replace(item.0.as_str(), &fulltext_search); + } + + // query support histogram + let re_histogram = Regex::new(r"(?i)histogram\(([^\)]*)\)").unwrap(); + for cap in re_histogram.captures_iter(origin_sql.clone().as_str()) { + let attrs = cap + .get(1) + .unwrap() + .as_str() + .split(',') + .map(|v| v.trim().trim_matches(|v| v == '\'' || v == '"')) + .collect::>(); + let field = attrs.first().unwrap(); + let interval = attrs.get(1).unwrap(); + origin_sql = origin_sql.replace( + cap.get(0).unwrap().as_str(), + format!( + "date_bin(interval '{}', to_timestamp_micros(\"{}\"), to_timestamp('2001-01-01T00:00:00'))", + interval, + field, + ) + .as_str(), + ); + } + + // pickup where + let re_where = Regex::new(r"(?i) where (.*)").unwrap(); + let mut where_str = match re_where.captures(&origin_sql) { + Some(caps) => caps[1].to_string(), + None => "".to_string(), + }; + if !where_str.is_empty() { + let mut where_str_lower = where_str.to_lowercase(); + for key in [" order by", " group by", " offset", " limit"].iter() { + if let Some(pos) = where_str_lower.find(key) { + where_str = where_str[..pos].to_string(); + where_str_lower = where_str.to_lowercase(); + } + } + } + + // Hack aggregation + if track_total_hits { + req_aggs.insert( + "_count".to_string(), + String::from("SELECT COUNT(*) as num from query"), + ); + } + let mut aggs = AHashMap::new(); + let re_where = Regex::new(r"(?i) where ").unwrap(); + let re_from = Regex::new(r"(?i) from[ ]+query").unwrap(); + for (key, sql) in &req_aggs { + let mut sql = sql.to_string(); + if let Some(caps) = re_from.captures(&sql) { + sql = sql.replace(&caps[0].to_string(), " FROM tbl "); + } + if !where_str.is_empty() { + match re_where.captures(&sql) { + Some(caps) => { + sql = sql.replace( + &caps[0].to_string(), + &format!(" WHERE ({}) AND ", where_str), + ); + } + None => { + sql = sql.replace( + &" FROM tbl ".to_string(), + &format!(" FROM tbl WHERE ({}) ", where_str), + ); + } + } + } + let sql_meta = MetaSql::new(sql.clone().as_str()); + if sql_meta.is_err() { + return Err(sql_meta.err().unwrap()); + } + for cap in re_histogram.captures_iter(sql.clone().as_str()) { + let attrs = cap + .get(1) + .unwrap() + .as_str() + .split(',') + .map(|v| v.trim().trim_matches(|v| v == '\'' || v == '"')) + .collect::>(); + let field = attrs.first().unwrap(); + let interval = attrs.get(1).unwrap(); + sql = sql.replace( + cap.get(0).unwrap().as_str(), + format!( + "date_bin(interval '{}', to_timestamp_micros(\"{}\"), to_timestamp('2001-01-01T00:00:00'))", + interval, + field, + ) + .as_str(), + ); + } + + // Hack for quote + sql = add_quote_for_sql(sql.as_str()); + + aggs.insert(key.clone(), (sql, sql_meta.unwrap())); + } + + let mut sql = Sql { + origin_sql, + org_id, + stream_name, + meta, + fulltext, + aggs, + fields: vec![], + sql_mode, + schema, + }; + + // calculate all needs fields + for field in schema_fields { + if check_field_in_use(&sql, field.name()) { + sql.fields.push(field.name().to_string()); + } + } + + log::info!( + "[TRACE] sqlparser: stream_name -> {:?}, fields -> {:?}, partition_key -> {:?}, full_text -> {:?}, time_range -> {:?}, order_by -> {:?}, limit -> {:?},{:?}", + sql.stream_name, + sql.meta.fields, + sql.meta.quick_text, + sql.fulltext, + sql.meta.time_range, + sql.meta.order_by, + sql.meta.offset, + sql.meta.limit, + ); + + Ok(sql) + } + + /// match a source is a valid file or not + pub async fn match_source( + &self, + source: &str, + match_min_ts_only: bool, + stream_type: StreamType, + ) -> bool { + // match org_id & table + if !source.starts_with( + format!( + "files/{}/{}/{}/", + &self.org_id, stream_type, &self.stream_name + ) + .as_str(), + ) { + return false; + } + + // check partition key + if !self.filter_source_by_partition_key(source).await { + return false; + } + + // check time range + let file_meta = file_list::get_file_meta(source).await.unwrap_or_default(); + if file_meta.min_ts == 0 || file_meta.max_ts == 0 { + return true; + } + log::trace!( + "time range: {:?}, file time: {}-{}, {}", + self.meta.time_range, + file_meta.min_ts, + file_meta.max_ts, + source + ); + + // match partation clause + if self.meta.time_range.is_some() { + let (time_min, time_max) = self.meta.time_range.unwrap(); + if match_min_ts_only && time_min > 0 { + return file_meta.min_ts >= time_min && file_meta.min_ts < time_max; + } + if time_min > 0 && time_min > file_meta.max_ts { + return false; + } + if time_max > 0 && time_max < file_meta.min_ts { + return false; + } + } + true + } + + /// filter source by partition key + pub async fn filter_source_by_partition_key(&self, source: &str) -> bool { + // check partition key + for key in &self.meta.quick_text { + let field = logs::get_partition_key_str(format!("{}=", key.0).as_str()); + let value = logs::get_partition_key_str(format!("{}={}", key.0, key.1).as_str()); + if str::find(source, format!("/{}", field).as_str()) + && !str::find(source, format!("/{}/", value).as_str()) + { + return false; + } + // println!("source: {}", source); + // println!("field: {}, value: {}", field, value); + } + true + } +} + +// Hack for double quote +fn add_quote_for_sql(text: &str) -> String { + let text_len = text.len(); + let mut new_text = Vec::new(); + + let re = Regex::new(r##"\b[a-zA-Z0-9\._/:@-]+\b"##).unwrap(); + let re_lower = Regex::new(r##"^[a-z0-9_]+$"##).unwrap(); + let mut caps = Vec::new(); + for cap in re.captures_iter(text) { + caps.push(cap.get(0).unwrap()); + } + let mut append_num = 0; + for i in 0..caps.len() { + let cap = caps[i]; + let cap_str = cap.as_str(); + let cap_str_upper = cap_str.to_uppercase(); + let cap_str_upper = cap_str_upper.as_str(); + if SQL_KEYWORDS.contains(&cap_str_upper) { + continue; + } + if SQL_PUNCTUATION.contains(&text.chars().nth(cap.start() - 1).unwrap()) + || (text_len > cap.end() + && SQL_PUNCTUATION.contains(&text.chars().nth(cap.end()).unwrap())) + { + continue; + } + if text_len > cap.end() && text.chars().nth(cap.end()).unwrap() == '(' { + continue; + } + if i > 0 && caps[i - 1].as_str().to_uppercase() == "FROM" { + continue; + } + // level is a special field (keyword for SQL: SET TRANSACTION ISOLATION LEVEL) + if cap_str_upper != "LEVEL" && re_lower.is_match(cap_str) { + continue; + } + new_text.push(text[append_num..cap.start()].to_string()); + new_text.push(format!("\"{}\"", cap_str)); + append_num = cap.end(); + } + + if append_num < text_len { + new_text.push(text[append_num..].to_string()); + } + + new_text.join("") +} + +fn check_field_in_use(sql: &Sql, field: &str) -> bool { + let re = Regex::new(&format!(r"\b{}\b", field)).unwrap(); + if str::find(sql.origin_sql.as_str(), field) && re.is_match(sql.origin_sql.as_str()) { + return true; + } + for (_, sql) in sql.aggs.iter() { + if str::find(sql.0.as_str(), field) && re.is_match(sql.0.as_str()) { + return true; + } + } + false +} diff --git a/src/service/search/storage.rs b/src/service/search/storage.rs new file mode 100644 index 0000000000..2a8a175212 --- /dev/null +++ b/src/service/search/storage.rs @@ -0,0 +1,214 @@ +use ahash::AHashMap as HashMap; +use datafusion::arrow::record_batch::RecordBatch; +use datafusion::datasource::file_format::file_type::FileType; +use std::sync::Arc; +use tokio::sync::Semaphore; +use tracing::{info_span, Instrument}; + +use super::datafusion::storage::file_list::SessionType; +use super::sql::Sql; +use crate::infra::cache::file_data; +use crate::infra::config::CONFIG; +use crate::meta; +use crate::service::{db, file_list}; + +/// search in remote object storage +#[tracing::instrument( + name = "service:search:storage:enter", + skip(session_id, sql, file_list, stream_type) +)] +pub async fn search( + session_id: &str, + sql: Arc, + file_list: &[String], + stream_type: meta::StreamType, +) -> super::SearchResult { + let span1 = info_span!("service:search:storage:get_file_list"); + let guard1 = span1.enter(); + + // get file list + let files = match file_list.is_empty() { + true => get_file_list(&sql, stream_type).await?, + false => file_list.to_vec(), + }; + let file_count = files.len(); + drop(guard1); + + if file_count == 0 { + return Ok((HashMap::new(), 0, 0)); + } + + // load files to local cache + let mut tasks = Vec::new(); + let semaphore = std::sync::Arc::new(Semaphore::new(CONFIG.limit.query_thread_num)); + for file in files.iter() { + let span = info_span!("service:search:storage:load_files"); + let file = file.clone(); + let permit = semaphore.clone().acquire_owned().await.unwrap(); + let task: tokio::task::JoinHandle> = tokio::task::spawn( + async move { + if !file_data::exist(&file).unwrap_or_default() { + if let Err(e) = file_data::download(&file).await { + log::error!("storage->search: load file {}, err: {}", &file, e); + } + }; + drop(permit); + Ok(()) + } + .instrument(span), + ); + tasks.push(task); + } + + for task in tasks { + match task.await { + Ok(ret) => { + if let Err(e) = ret { + return Err(anyhow::anyhow!(e)); + } + } + Err(e) => { + return Err(anyhow::anyhow!(e)); + } + }; + } + log::info!("[TRACE] storage->search: load files {} done", file_count); + + let span3 = info_span!("service:search:storage:group_and_calc_files_size"); + let guard3 = span3.enter(); + + // fetch all schema versions, group files by version + let schema_versions = + db::schema::get_versions(&sql.org_id, &sql.stream_name, Some(stream_type)).await?; + let schema_latest = schema_versions.last().unwrap(); + let schema_latest_id = schema_versions.len() - 1; + let mut files_group: HashMap> = + HashMap::with_capacity(schema_versions.len()); + let mut scan_size = 0; + if !CONFIG.common.widening_schema_evoluation || schema_versions.len() == 1 { + scan_size = file_list::calculate_files_size(&files.to_vec()).await?; + files_group.insert(schema_latest_id, files); + } else { + for file in files { + let file_meta = file_list::get_file_meta(&file).await.unwrap_or_default(); + // calculate scan size + scan_size += file_meta.original_size; + // check schema version + let schema_ver_id = match db::schema::filter_schema_version_id( + &schema_versions, + file_meta.min_ts, + file_meta.max_ts, + ) { + Some(id) => id, + None => { + log::error!( + "storage->search: file {} schema version not found, will use the latest schema, min_ts: {}, max_ts: {}", + &file, + file_meta.min_ts, + file_meta.max_ts + ); + // HACK: use the latest verion if not found in schema versions + schema_latest_id + } + }; + let group = files_group.entry(schema_ver_id).or_insert_with(Vec::new); + group.push(file); + } + } + + log::info!( + "[TRACE] storage->search: load files {}, scan_size {}", + file_count, + scan_size + ); + drop(guard3); + + let mut tasks = Vec::new(); + for (ver, files) in files_group { + let span = info_span!("service:search:storage:datafusion"); + let schema = Arc::new( + schema_versions[ver] + .clone() + .with_metadata(std::collections::HashMap::new()), + ); + let sql = sql.clone(); + let session = meta::search::Session { + id: format!("{}-{}", session_id, ver), + data_type: SessionType::Remote, + }; + // cacluate the diff between latest schema and group schema + let mut diff_fields = HashMap::new(); + if CONFIG.common.widening_schema_evoluation && ver != schema_latest_id { + let group_fields = schema.fields(); + for field in group_fields { + if let Ok(v) = schema_latest.field_with_name(field.name()) { + if v.data_type() != field.data_type() { + diff_fields.insert(v.name().clone(), v.data_type().clone()); + } + } + } + } + let task = tokio::task::spawn( + async move { + super::datafusion::exec::sql( + &session, + stream_type, + Some(schema), + diff_fields, + &sql, + &files, + FileType::PARQUET, + ) + .await + } + .instrument(span), + ); + tasks.push(task); + } + + let mut results: HashMap> = HashMap::new(); + for task in tasks { + match task.await { + Ok(ret) => match ret { + Ok(ret) => { + for (k, v) in ret { + let group = results.entry(k).or_insert_with(Vec::new); + group.extend(v); + } + } + Err(e) => { + return Err(anyhow::anyhow!(e)); + } + }, + Err(e) => { + return Err(anyhow::anyhow!(e)); + } + }; + } + + Ok((results, file_count, scan_size as usize)) +} + +#[inline] +async fn get_file_list( + sql: &Sql, + stream_type: meta::StreamType, +) -> Result, anyhow::Error> { + let (time_min, time_max) = sql.meta.time_range.unwrap(); + let results = file_list::get_file_list( + &sql.org_id, + &sql.stream_name, + Some(stream_type), + time_min, + time_max, + ) + .await?; + + let mut files = Vec::new(); + for file in results { + if sql.match_source(&file, false, stream_type).await { + files.push(file.clone()); + } + } + Ok(files) +} diff --git a/src/service/stream.rs b/src/service/stream.rs new file mode 100644 index 0000000000..24b9fb7750 --- /dev/null +++ b/src/service/stream.rs @@ -0,0 +1,219 @@ +use actix_web::http; +use actix_web::{http::StatusCode, HttpResponse}; +use datafusion::arrow::datatypes::Schema; +use serde_json::Value; +use std::io::Error; +use tracing::info_span; + +use crate::common::json; +use crate::common::utils::is_local_disk_storage; +use crate::meta::http::HttpResponse as MetaHttpResponse; +use crate::meta::stream::{ListStream, Stats, Stream, StreamProperty, StreamSettings}; +use crate::meta::StreamType; +use crate::service::db; + +const SIZE_IN_MB: f64 = 1024.0 * 1024.0; +const LOCAL: &str = "disk"; +const S3: &str = "s3"; + +pub async fn get_stream( + org_id: &str, + stream_name: &str, + stream_type: StreamType, +) -> Result { + let loc_span = info_span!("service:streams:get_stream"); + let _guard = loc_span.enter(); + let schema = db::schema::get(org_id, stream_name, Some(stream_type)) + .await + .unwrap(); + let mut stats = db::get_stream_stats(org_id, stream_name, &stream_type.to_string()) + .await + .unwrap(); + stats = transform_stats(&mut stats); + if schema != Schema::empty() { + let stream = stream_res(stream_name, stream_type, schema, Some(stats)); + Ok(HttpResponse::Ok().json(stream)) + } else { + Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some("stream not found".to_owned()), + ))) + } +} + +pub async fn list_streams( + org_id: &str, + stream_type: Option, + fetch_schema: bool, +) -> Result { + let loc_span = info_span!("service:streams:list_streams"); + let _guard = loc_span.enter(); + let indices = db::schema::list(org_id, stream_type, fetch_schema) + .await + .unwrap(); + let mut indices_res = Vec::new(); + for stream_loc in indices { + let mut stats = db::get_stream_stats( + org_id, + stream_loc.stream_name.as_str(), + &stream_loc.stream_type.to_string(), + ) + .await + .unwrap(); + if stats.eq(&Stats::default()) { + indices_res.push(stream_res( + stream_loc.stream_name.as_str(), + stream_loc.stream_type, + stream_loc.schema, + None, + )); + } else { + stats = transform_stats(&mut stats); + indices_res.push(stream_res( + stream_loc.stream_name.as_str(), + stream_loc.stream_type, + stream_loc.schema, + Some(stats), + )); + } + } + Ok(HttpResponse::Ok().json(ListStream { list: indices_res })) +} + +fn stream_res( + stream_name: &str, + stream_type: StreamType, + schema: Schema, + stats: Option, +) -> Stream { + let fields = schema.fields(); + let mut meta = schema.metadata().clone(); + let mut mappings = Vec::new(); + for field in fields { + let stream_prop = StreamProperty { + prop_type: field.data_type().to_string(), + name: field.name().to_string(), + }; + mappings.push(stream_prop); + } + meta.remove("created_at"); + let mut partition_keys = Vec::new(); + let mut full_text_search_keys = vec![]; + let stream_settings = meta.get("settings"); + + if let Some(value) = stream_settings { + let settings: Value = json::from_slice(value.as_bytes()).unwrap(); + let keys = settings.get("partition_keys"); + + if let Some(value) = keys { + let mut v: Vec<_> = value.as_object().unwrap().into_iter().collect(); + v.sort_by(|a, b| a.0.cmp(b.0)); + for (_, value) in v { + partition_keys.push(value.as_str().unwrap().to_string()); + } + } + let fts = settings.get("full_text_search_keys"); + if let Some(value) = fts { + let v: Vec<_> = value.as_array().unwrap().iter().collect(); + for item in v { + full_text_search_keys.push(item.as_str().unwrap().to_string()) + } + } + } + + let storage_type = if is_local_disk_storage() { LOCAL } else { S3 }; + let stats = match stats { + Some(v) => v, + None => Stats::default(), + }; + + Stream { + name: stream_name.to_string(), + stream_type, + storage_type: storage_type.to_string(), + schema: mappings, + stats, + settings: StreamSettings { + partition_keys, + full_text_search_keys, + }, + } +} + +pub async fn save_stream_settings( + org_id: &str, + stream_name: &str, + stream_type: StreamType, + setting: StreamSettings, +) -> Result { + let loc_span = info_span!("service:streams:set_partition_keys"); + let _guard = loc_span.enter(); + let schema = db::schema::get(org_id, stream_name, Some(stream_type)) + .await + .unwrap(); + + let mut meta = schema.metadata.clone(); + + meta.insert("settings".to_string(), json::to_string(&setting).unwrap()); + log::info!("Saving setting for schema {:?}", stream_name); + db::schema::set( + org_id, + stream_name, + stream_type, + &schema.clone().with_metadata(meta), + None, + ) + .await + .unwrap(); + + Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "".to_string(), + ))) +} + +pub fn get_stream_setting_fts_fields(schema: &Schema) -> Result, anyhow::Error> { + let mut full_text_search_keys = vec![]; + let settings = schema.metadata.get("settings"); + if settings.is_none() { + return Ok(full_text_search_keys); + } + let settings = settings.unwrap(); + let settings: Value = json::from_slice(settings.as_bytes()).unwrap(); + let fts = settings.get("full_text_search_keys"); + if fts.is_none() { + return Ok(full_text_search_keys); + } + let v: Vec<_> = fts.unwrap().as_array().unwrap().iter().collect(); + for item in v { + full_text_search_keys.push(item.as_str().unwrap().to_string()) + } + Ok(full_text_search_keys) +} + +fn transform_stats(stats: &mut Stats) -> Stats { + stats.storage_size /= SIZE_IN_MB; + stats.compressed_size /= SIZE_IN_MB; + stats.storage_size = (stats.storage_size * 100.0).round() / 100.0; + stats.compressed_size = (stats.compressed_size * 100.0).round() / 100.0; + *stats +} + +#[cfg(test)] +mod test { + use super::*; + use datafusion::arrow::datatypes::{DataType, Field, Schema}; + #[test] + fn test_transform_stats() { + let mut stats = Stats::default(); + let res = transform_stats(&mut stats); + assert_eq!(stats, res); + } + #[test] + fn test_stream_res() { + let stats = Stats::default(); + let schema = Schema::new(vec![Field::new("f.c", DataType::Int32, false)]); + let res = stream_res("Test", StreamType::Logs, schema, Some(stats)); + assert_eq!(res.stats, stats); + } +} diff --git a/src/service/traces/metadata.rs b/src/service/traces/metadata.rs new file mode 100644 index 0000000000..9f66327c9b --- /dev/null +++ b/src/service/traces/metadata.rs @@ -0,0 +1,81 @@ +use ahash::AHashMap; +use bytes::{BufMut, BytesMut}; +use chrono::{TimeZone, Utc}; +use serde_json::Value; +use tracing::info_span; + +use crate::infra::file_lock; +use crate::{ + common::{ + json::{self, flatten_json}, + time::parse_timestamp_micro_from_value, + }, + infra::{cluster, config::CONFIG}, + meta::StreamType, +}; + +pub async fn ingest( + org_id: &str, + stream_name: &str, + thread_id: usize, + records: Vec>, +) { + let mut buf: AHashMap> = AHashMap::new(); + let loc_span = info_span!("service:metadata:ingest"); + let _guard = loc_span.enter(); + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return; + } + for item in records.iter() { + let value = serde_json::to_value(item).unwrap(); + //JSON Flattening + let mut value = flatten_json(&value); + // get json object + let local_val = value.as_object_mut().unwrap(); + // handle timestamp + let timestamp = match local_val.get(&CONFIG.common.time_stamp_col) { + Some(v) => match parse_timestamp_micro_from_value(v) { + Ok(t) => t, + Err(_) => Utc::now().timestamp_micros(), + }, + None => Utc::now().timestamp_micros(), + }; + local_val.insert( + CONFIG.common.time_stamp_col.clone(), + Value::Number(timestamp.into()), + ); + let trace_id = local_val.get("trace_id").unwrap().as_str().unwrap(); + let value_str = json::to_string(&local_val).unwrap(); + + // get hour file name + let hour_key = Utc + .timestamp_nanos(timestamp * 1000) + .format("%Y") + .to_string(); + + let key = format!("{}_00_00_00_tpre={}", hour_key, &trace_id[0..2]); + + let hour_buf = buf.entry(key).or_default(); + hour_buf.push(value_str.to_string()); + } + + // write to file + let mut meta_file_name = "".to_string(); + let mut write_buf = BytesMut::new(); + for (key, entry) in buf { + if entry.is_empty() { + continue; + } + write_buf.clear(); + for row in &entry { + write_buf.put(row.as_bytes()); + write_buf.put("\n".as_bytes()); + } + let file = + file_lock::get_or_create(thread_id, org_id, stream_name, StreamType::Metadata, &key); + if meta_file_name.is_empty() { + meta_file_name = file.full_name(); + } + file.write(write_buf.as_ref()); + } +} diff --git a/src/service/traces/mod.rs b/src/service/traces/mod.rs new file mode 100644 index 0000000000..1f68b04ffd --- /dev/null +++ b/src/service/traces/mod.rs @@ -0,0 +1,327 @@ +use actix_web::{http, HttpResponse}; +use ahash::AHashMap; +use bytes::{BufMut, BytesMut}; +use chrono::{Duration, TimeZone, Utc}; +use datafusion::arrow::datatypes::Schema; +use opentelemetry::trace::{SpanId, TraceId}; +use opentelemetry_proto::tonic::common::v1::AnyValue; +use opentelemetry_proto::tonic::{ + collector::trace::v1::ExportTraceServiceRequest, + collector::trace::v1::ExportTraceServiceResponse, +}; +use prost::Message; +use serde_json::{json, Map, Value}; +use std::fs::OpenOptions; +use std::io::Error; +use tracing::info_span; + +use crate::infra::config::CONFIG; +use crate::infra::file_lock; +use crate::infra::storage::generate_partioned_file_key; +use crate::meta::traces::Event; +use crate::service::schema::{add_stream_schema, stream_schema_exists}; +use crate::{ + common::json, + infra::cluster, + meta::{ + self, + traces::{Span, SpanRefType}, + StreamType, + }, +}; + +pub mod metadata; +pub mod otlp_http; + +const PARENT_SPAN_ID: &str = "reference.parent_span_id"; +const PARENT_TRACE_ID: &str = "reference.parent_trace_id"; +const REF_TYPE: &str = "reference.ref_type"; +const SERVICE_NAME: &str = "service.name"; +const SERVICE: &str = "service"; + +pub async fn handle_trace_request( + org_id: &str, + thread_id: std::sync::Arc, + request: ExportTraceServiceRequest, +) -> Result { + let loc_span = info_span!("service:mod:handle_trace_request"); + let _guard = loc_span.enter(); + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok( + HttpResponse::InternalServerError().json(meta::http::HttpResponse::error( + http::StatusCode::INTERNAL_SERVER_ERROR.into(), + Some("not an ingester".to_string()), + )), + ); + } + let traces_stream_name = "default"; + + let mut trace_meta_coll: AHashMap>> = + AHashMap::new(); + + let mut data_buf: AHashMap> = AHashMap::new(); + let mut traces_schema_map: AHashMap = AHashMap::new(); + let mut min_ts = (Utc::now() + Duration::hours(CONFIG.limit.allowed_upto)).timestamp_micros(); + let mut service_name: String = traces_stream_name.to_string(); + let res_spans = request.resource_spans; + for res_span in res_spans { + let mut service_att_map: AHashMap = AHashMap::new(); + let resource = res_span.resource.unwrap(); + + for res_attr in resource.attributes { + if res_attr.key.eq(SERVICE_NAME) { + let loc_service_name = get_val(res_attr.value); + if !loc_service_name.eq(&Value::Null) { + service_name = loc_service_name.as_str().unwrap().to_string(); + service_att_map.insert(res_attr.key, loc_service_name); + } + } else { + service_att_map.insert( + format!("{}.{}", SERVICE, res_attr.key), + get_val(res_attr.value), + ); + } + } + let inst_resources = res_span.instrumentation_library_spans; + for inst_span in inst_resources { + let spans = inst_span.spans; + for span in spans { + let span_id: String = SpanId::from_bytes( + span.span_id + .as_slice() + .try_into() + .expect("slice with incorrect length"), + ) + .to_string(); + let trace_id: String = TraceId::from_bytes( + span.trace_id + .as_slice() + .try_into() + .expect("slice with incorrect length"), + ) + .to_string(); + let mut span_ref = AHashMap::new(); + if !span.parent_span_id.is_empty() { + span_ref.insert(PARENT_TRACE_ID.to_string(), trace_id.clone()); + span_ref.insert( + PARENT_SPAN_ID.to_string(), + SpanId::from_bytes( + span.parent_span_id + .as_slice() + .try_into() + .expect("slice with incorrect length"), + ) + .to_string(), + ); + span_ref.insert(REF_TYPE.to_string(), format!("{:?}", SpanRefType::ChildOf)); + } + let start_time: u64 = span.start_time_unix_nano; + let end_time: u64 = span.end_time_unix_nano; + let mut span_att_map: AHashMap = AHashMap::new(); + for span_att in span.attributes { + span_att_map.insert(span_att.key, get_val(span_att.value)); + } + + let mut events = vec![]; + let mut event_att_map: AHashMap = AHashMap::new(); + for event in span.events { + for event_att in event.attributes { + event_att_map.insert(event_att.key, get_val(event_att.value)); + } + events.push(Event { + name: event.name, + _timestamp: event.time_unix_nano, + attributes: event_att_map.clone(), + }) + } + + // get hour file name + let mut hour_key = Utc + .timestamp_nanos(start_time.try_into().unwrap()) + .format("%Y_%m_%d_%H") + .to_string(); + + hour_key.push_str(&format!("_service={}", service_name.clone())); + + let hour_buf = data_buf.entry(hour_key.clone()).or_default(); + let timestamp = start_time / 1000; + let local_val = Span { + trace_id: trace_id.clone(), + span_id, + span_kind: span.kind.to_string(), + operation_name: span.name.clone(), + start_time, + end_time, + duration: end_time - start_time, + reference: span_ref, + service_name: service_name.clone(), + attributes: span_att_map, + service: service_att_map.clone(), + flags: 1, //TODO add appropriate value + _timestamp: timestamp, + events: serde_json::to_string(&events).unwrap(), + }; + let value_str = json::to_string(&local_val).unwrap(); + hour_buf.push(value_str); + + if timestamp < min_ts.try_into().unwrap() { + min_ts = timestamp as i64; + } + + //Trace Metadata + let mut trace_meta = Map::new(); + trace_meta.insert( + "trace_id".to_owned(), + serde_json::Value::String(trace_id.clone()), + ); + trace_meta.insert("_timestamp".to_owned(), start_time.into()); + + let hour_meta_buf = trace_meta_coll.entry(hour_key.clone()).or_default(); + hour_meta_buf.push(trace_meta); + } + } + } + + let mut write_buf = BytesMut::new(); + for (key, entry) in data_buf { + if entry.is_empty() { + continue; + } + + write_buf.clear(); + for row in &entry { + write_buf.put(row.as_bytes()); + write_buf.put("\n".as_bytes()); + } + let file = file_lock::get_or_create( + *thread_id.as_ref(), + org_id, + traces_stream_name, + StreamType::Traces, + &key, + ); + let traces_file_name = file.full_name(); + + file.write(write_buf.as_ref()); + + let schema_exists = stream_schema_exists( + org_id, + traces_stream_name, + StreamType::Traces, + &mut traces_schema_map, + ) + .await; + if !schema_exists.has_fields && !traces_file_name.is_empty() { + let file = OpenOptions::new() + .read(true) + .open(&traces_file_name) + .unwrap(); + add_stream_schema( + org_id, + traces_stream_name, + StreamType::Traces, + &file, + &mut traces_schema_map, + min_ts, + ) + .await; + } + let mut hour_meta_buf: Vec> = + trace_meta_coll.get(&key).unwrap().to_vec(); + + let dest_file = get_storage_file_name(&traces_file_name); + for item in hour_meta_buf.iter_mut() { + item.insert( + "file_name".to_owned(), + serde_json::Value::String(dest_file.clone()), + ); + } + + //metadata::ingest(org_id, traces_stream_name, 0, hour_meta_buf.clone()).await; + } + + let res = ExportTraceServiceResponse {}; + let mut out = BytesMut::with_capacity(res.encoded_len()); + res.encode(&mut out).expect("Out of memory"); + + return Ok(HttpResponse::Ok() + .status(http::StatusCode::OK) + .content_type("application/x-protobuf") + .body(out)); +} + +fn get_val(attr_val: Option) -> Value { + match attr_val { + Some(local_val) => match local_val.value { + Some(val) => match val { + opentelemetry_proto::tonic::common::v1::any_value::Value::StringValue( + inner_val, + ) => json!(inner_val.as_str()), + opentelemetry_proto::tonic::common::v1::any_value::Value::BoolValue(inner_val) => { + json!(inner_val) + } + opentelemetry_proto::tonic::common::v1::any_value::Value::IntValue(inner_val) => { + json!(inner_val) + } + opentelemetry_proto::tonic::common::v1::any_value::Value::DoubleValue( + inner_val, + ) => json!(inner_val), + opentelemetry_proto::tonic::common::v1::any_value::Value::ArrayValue(inner_val) => { + let mut vals = vec![]; + for item in inner_val.values.iter().cloned() { + vals.push(get_val(Some(item))) + } + json!(vals) + } + opentelemetry_proto::tonic::common::v1::any_value::Value::KvlistValue( + inner_val, + ) => { + let mut vals = Map::new(); + for item in inner_val.values.iter().cloned() { + vals.insert(item.key, get_val(item.value)); + } + json!(vals) + } + opentelemetry_proto::tonic::common::v1::any_value::Value::BytesValue(inner_val) => { + json!(inner_val) + } + }, + None => Value::Null, + }, + None => Value::Null, + } +} + +fn get_storage_file_name(local_path: &str) -> String { + let file_path = local_path + .strip_prefix(&CONFIG.common.data_wal_dir) + .unwrap(); + let columns = file_path.split('/').collect::>(); + let _ = columns[0].to_string(); + let org_id = columns[1].to_string(); + let stream_type: StreamType = StreamType::from(columns[2]); + let stream_name = columns[3].to_string(); + let file_name = columns[4].to_string(); + + let new_file = generate_partioned_file_key( + &org_id, + &stream_name, + stream_type, + Utc::now().timestamp_micros(), + &CONFIG.common.file_ext_parquet, + ); + + let mut partitions = file_name.split('_').collect::>(); + partitions.retain(|&x| x.contains('=')); + let mut partition_key = String::from(""); + for key in partitions { + partition_key.push_str(key); + partition_key.push('/'); + } + + if partition_key.eq("") { + format!("{}{}", new_file.0, new_file.1) + } else { + format!("{}{}{}", new_file.0, partition_key, new_file.1) + } +} diff --git a/src/service/traces/otlp_http.rs b/src/service/traces/otlp_http.rs new file mode 100644 index 0000000000..31fb5d0cdd --- /dev/null +++ b/src/service/traces/otlp_http.rs @@ -0,0 +1,337 @@ +use actix_web::{http, HttpResponse}; +use ahash::AHashMap; +use bytes::{BufMut, BytesMut}; +use chrono::{Duration, TimeZone, Utc}; +use datafusion::arrow::datatypes::Schema; +use opentelemetry_proto::tonic::collector::trace::v1::ExportTraceServiceRequest; +use prost::Message; +use serde_json::{Map, Value}; +use std::fs::OpenOptions; +use std::io::{BufRead, BufReader, Error}; +use tracing::info_span; + +use super::get_storage_file_name; +use crate::infra::config::CONFIG; +use crate::infra::file_lock; +use crate::meta::traces::Event; +use crate::service::schema::{add_stream_schema, stream_schema_exists}; +use crate::{ + common::json, + infra::cluster, + meta::{ + self, + traces::{Span, SpanRefType}, + StreamType, + }, +}; + +const PARENT_SPAN_ID: &str = "reference.parent_span_id"; +const PARENT_TRACE_ID: &str = "reference.parent_trace_id"; +const REF_TYPE: &str = "reference.ref_type"; +const SERVICE_NAME: &str = "service.name"; +const SERVICE: &str = "service"; + +pub async fn traces_proto( + org_id: &str, + thread_id: std::sync::Arc, + body: actix_web::web::Bytes, +) -> Result { + let loc_span = info_span!("service:otlp_http:traces_proto"); + let _guard = loc_span.enter(); + //let thread = thread_id.into_inner(); + + let request = ExportTraceServiceRequest::decode(body).expect("Invalid protobuf"); + super::handle_trace_request(org_id, thread_id, request).await +} + +pub async fn traces_json( + org_id: &str, + thread_id: std::sync::Arc, + body: actix_web::web::Bytes, +) -> Result { + let loc_span = info_span!("service:otlp_http:traces_json"); + let _guard = loc_span.enter(); + if !cluster::is_ingester(&cluster::LOCAL_NODE_ROLE) { + return Ok( + HttpResponse::InternalServerError().json(meta::http::HttpResponse::error( + http::StatusCode::INTERNAL_SERVER_ERROR.into(), + Some("not an ingester".to_string()), + )), + ); + } + let traces_stream_name = "default"; + + let mut trace_meta_coll: AHashMap>> = + AHashMap::new(); + let mut min_ts = (Utc::now() + Duration::hours(CONFIG.limit.allowed_upto)).timestamp_micros(); + let mut data_buf: AHashMap> = AHashMap::new(); + let mut traces_schema_map: AHashMap = AHashMap::new(); + let mut service_name: String = traces_stream_name.to_string(); + let reader = BufReader::new(body.as_ref()); + for line in reader.lines() { + let line = line?; + if line.is_empty() { + continue; + } + + let traces: Value = serde_json::from_slice(line.as_bytes()).unwrap(); + if traces.get("resourceSpans").is_some() { + let res_spans = traces.get("resourceSpans").unwrap().as_array().unwrap(); + for res_span in res_spans { + let mut service_att_map: AHashMap = AHashMap::new(); + if res_span.get("resource").is_some() { + let resource = res_span.get("resource").unwrap().as_object().unwrap(); + if resource.get("attributes").is_some() { + let attributes = resource.get("attributes").unwrap().as_array().unwrap(); + for res_attr in attributes { + let local_attr = res_attr.as_object().unwrap(); + if local_attr + .get("key") + .unwrap() + .as_str() + .unwrap() + .eq(SERVICE_NAME) + { + let loc_service_name = + local_attr.get("value").unwrap().as_object().unwrap(); + for item in loc_service_name { + service_name = item.1.as_str().unwrap().to_string(); + service_att_map + .insert(SERVICE_NAME.to_string(), item.1.clone()); + } + } else { + service_att_map.insert( + format!( + "{}.{}", + SERVICE, + local_attr.get("key").unwrap().as_str().unwrap() + ), + get_val_for_attr(local_attr.get("value").unwrap().clone()), + ); + } + } + } + } + let scope_resources = res_span.get("scopeSpans"); + let inst_resources = if scope_resources.is_some() { + scope_resources.unwrap().as_array().unwrap() + } else { + res_span + .get("instrumentationLibrarySpans") + .unwrap() + .as_array() + .unwrap() + }; + for inst_span in inst_resources { + if inst_span.get("spans").is_some() { + let spans = inst_span.get("spans").unwrap().as_array().unwrap(); + for span in spans { + let span_id: String = + span.get("spanId").unwrap().as_str().unwrap().to_string(); + let trace_id: String = + span.get("traceId").unwrap().as_str().unwrap().to_string(); + + let mut span_ref = AHashMap::new(); + if span.get("parentSpanId").is_some() { + span_ref.insert( + PARENT_SPAN_ID.to_string(), + span.get("parentSpanId") + .unwrap() + .as_str() + .unwrap() + .to_string(), + ); + span_ref.insert(PARENT_TRACE_ID.to_string(), trace_id.clone()); + span_ref.insert( + REF_TYPE.to_string(), + format!("{:?}", SpanRefType::ChildOf), + ); + } + + let start_time: u64 = + span.get("startTimeUnixNano").unwrap().as_u64().unwrap(); + let end_time: u64 = + span.get("endTimeUnixNano").unwrap().as_u64().unwrap(); + let mut span_att_map: AHashMap = AHashMap::new(); + let attributes = span.get("attributes").unwrap().as_array().unwrap(); + for span_att in attributes { + span_att_map.insert( + span_att.get("key").unwrap().as_str().unwrap().to_string(), + get_val_for_attr(span_att.get("value").unwrap().clone()), + ); + } + + let mut events = vec![]; + let mut event_att_map: AHashMap = AHashMap::new(); + + let span_events = span.get("events").unwrap().as_array().unwrap(); + for event in span_events { + let attributes = + event.get("attributes").unwrap().as_array().unwrap(); + for event_att in attributes { + event_att_map.insert( + event_att.get("key").unwrap().as_str().unwrap().to_string(), + get_val_for_attr(event_att.get("value").unwrap().clone()), + ); + } + events.push(Event { + name: event.get("name").unwrap().as_str().unwrap().to_string(), + _timestamp: event + .get("timeUnixNano") + .unwrap() + .as_u64() + .unwrap(), + attributes: event_att_map.clone(), + }) + } + // get hour file name + let mut hour_key = Utc + .timestamp_nanos(start_time.try_into().unwrap()) + .format("%Y_%m_%d_%H") + .to_string(); + + hour_key.push_str(&format!("_service={}", service_name.clone())); + + let hour_buf = data_buf.entry(hour_key.clone()).or_default(); + let timestamp = start_time / 1000; + let local_val = Span { + trace_id: trace_id.clone(), + span_id, + span_kind: span.get("kind").unwrap().to_string(), + operation_name: span + .get("name") + .unwrap() + .as_str() + .unwrap() + .to_string(), + start_time, + end_time, + duration: end_time - start_time, + reference: span_ref, + service_name: service_name.clone(), + attributes: span_att_map, + service: service_att_map.clone(), + flags: 1, //TODO add appropriate value + _timestamp: timestamp, + events: serde_json::to_string(&events).unwrap(), + }; + if timestamp < min_ts.try_into().unwrap() { + min_ts = timestamp as i64; + } + let value_str = json::to_string(&local_val).unwrap(); + hour_buf.push(value_str); + //Trace Metadata + let mut trace_meta = Map::new(); + trace_meta.insert( + "trace_id".to_owned(), + serde_json::Value::String(trace_id.clone()), + ); + trace_meta.insert("_timestamp".to_owned(), start_time.into()); + + let hour_meta_buf = + trace_meta_coll.entry(hour_key.clone()).or_default(); + hour_meta_buf.push(trace_meta); + } + } + } + } + } else { + return Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some("Bad Request".to_string()), + )), + ); + } + } + let mut write_buf = BytesMut::new(); + for (key, entry) in data_buf { + if entry.is_empty() { + continue; + } + + write_buf.clear(); + for row in &entry { + write_buf.put(row.as_bytes()); + write_buf.put("\n".as_bytes()); + } + let file = file_lock::get_or_create( + *thread_id.as_ref(), + org_id, + traces_stream_name, + StreamType::Traces, + &key, + ); + let traces_file_name = file.full_name(); + + file.write(write_buf.as_ref()); + + let schema_exists = stream_schema_exists( + org_id, + traces_stream_name, + StreamType::Traces, + &mut traces_schema_map, + ) + .await; + if !schema_exists.has_fields && !traces_file_name.is_empty() { + let file = OpenOptions::new() + .read(true) + .open(&traces_file_name) + .unwrap(); + add_stream_schema( + org_id, + traces_stream_name, + StreamType::Traces, + &file, + &mut traces_schema_map, + min_ts, + ) + .await; + } + let mut hour_meta_buf: Vec> = + trace_meta_coll.get(&key).unwrap().to_vec(); + + let dest_file = get_storage_file_name(&traces_file_name); + for item in hour_meta_buf.iter_mut() { + item.insert( + "file_name".to_owned(), + serde_json::Value::String(dest_file.clone()), + ); + } + //metadata::ingest(org_id, traces_stream_name, 0, hour_meta_buf.clone()).await; + } + + Ok(HttpResponse::Ok().json(meta::http::HttpResponse::message( + http::StatusCode::OK.into(), + "request processed".to_string(), + ))) + + //Ok(HttpResponse::Ok().into()) +} + +/* fn _rename_keys(json: &mut serde_json::Value) { + match json { + serde_json::Value::Array(a) => a.iter_mut().for_each(_rename_keys), + serde_json::Value::Object(o) => { + let mut replace = serde_json::Map::with_capacity(o.len()); + o.retain(|k, v| { + _rename_keys(v); + replace.insert( + k.as_str().to_case(Case::Snake), + std::mem::replace(v, serde_json::Value::Null), + ); + true + }); + *o = replace; + } + _ => (), + } +} */ + +fn get_val_for_attr(attr_val: Value) -> Value { + let local_val = attr_val.as_object().unwrap(); + if let Some((_key, value)) = local_val.into_iter().next() { + return value.clone(); + }; + ().into() +} diff --git a/src/service/transform.rs b/src/service/transform.rs new file mode 100644 index 0000000000..04e52aee15 --- /dev/null +++ b/src/service/transform.rs @@ -0,0 +1,160 @@ +use actix_web::{ + http::{self, StatusCode}, + HttpResponse, +}; +use std::io::Error; +use tracing::info_span; + +use crate::meta::transform::Transform; +use crate::meta::transform::TransformList; +use crate::meta::{self, http::HttpResponse as MetaHttpResponse}; +use crate::service::db; + +const SUCESS: &str = "Transform saved successfully"; +const SPECIFY: &str = "Please specify "; +const STREAM: &str = "stream name "; +const ORDER: &str = "transform order "; +const DELETED: &str = "Transform deleted"; + +pub async fn register_transform( + org_id: String, + stream_name: Option, + name: String, + mut trans: Transform, +) -> Result { + let loc_span = info_span!("service:transform:register"); + let _guard = loc_span.enter(); + match stream_name { + Some(stream_name) => { + let mut is_err = false; + let mut msg: String = String::from(SPECIFY); + let stream_name = stream_name.trim(); + + if stream_name.is_empty() { + msg.push_str(STREAM); + is_err = true; + } + if trans.order == 0 { + msg.push_str(ORDER); + is_err = true; + } + let js_func = trans.function.to_owned(); + if !js_func.contains('(') && !js_func.contains(')') { + msg.push_str(" not valid function"); + is_err = true; + } + if is_err { + Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some(msg.to_string()), + )), + ) + } else { + trans.stream_name = stream_name.to_string(); + trans.name = name.to_string(); + extract_num_args(&mut trans); + db::udf::set( + org_id.as_str(), + Some(stream_name.to_string()), + name.as_str(), + trans, + ) + .await + .unwrap(); + Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + SUCESS.to_string(), + ))) + } + } + None => { + let mut is_err = false; + trans.name = name.to_string(); + let js_func = trans.function.to_owned(); + if !js_func.contains('(') && !js_func.contains(')') { + is_err = true; + } + if !is_err { + extract_num_args(&mut trans); + db::udf::set(org_id.as_str(), None, name.as_str(), trans) + .await + .unwrap(); + Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + SUCESS.to_string(), + ))) + } else { + Ok( + HttpResponse::BadRequest().json(meta::http::HttpResponse::error( + http::StatusCode::BAD_REQUEST.into(), + Some("Not valid function".to_string()), + )), + ) + } + } + } +} + +pub async fn list_transform( + org_id: String, + stream_name: Option, +) -> Result { + let loc_span = info_span!("service:transform:list"); + let _guard = loc_span.enter(); + let udf_list = db::udf::list(org_id.as_str(), stream_name).await.unwrap(); + Ok(HttpResponse::Ok().json(TransformList { list: udf_list })) +} + +pub async fn delete_transform( + org_id: String, + stream_name: Option, + name: String, +) -> Result { + let loc_span = info_span!("service:transform:delete"); + let _guard = loc_span.enter(); + let result = db::udf::delete(org_id.as_str(), stream_name, name.as_str()).await; + match result { + Ok(_) => Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + DELETED.to_string(), + ))), + Err(err) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some(err.to_string()), + ))), + } +} + +fn extract_num_args(trans: &mut Transform) { + let js_func = trans.function.to_owned(); + let start_stream = js_func.find('(').unwrap(); + let end_stream = js_func.find(')').unwrap(); + let args = &js_func[start_stream + 1..end_stream].trim(); + if args.is_empty() { + trans.num_args = 0; + } else { + let args_vec = args.split(','); + trans.num_args = args_vec.into_iter().count() as u8; + + /* let args_vec: Vec<_> = args.split(',').collect(); + trans.num_args = args_vec.len() as u8; */ + } +} + +/* #[cfg(test)] +mod test { + use super::*; + + //#[actix_web::test] + async fn test_register_transform() { + let trans = Transform{ + function: "function square(row){const obj = JSON.parse(row);obj['square'] = obj.Year*obj.Year; return JSON.stringify(obj);}".to_owned(), + name: "concat".to_owned(), + order: 1, + stream_name: "Test".to_owned(), + }; + let res = register_transform("nexus".to_owned(),None,trans.name.to_owned(),trans).await; + //assert!(res.is_ok()); + } +} */ diff --git a/src/service/triggers.rs b/src/service/triggers.rs new file mode 100644 index 0000000000..cae1e47567 --- /dev/null +++ b/src/service/triggers.rs @@ -0,0 +1,53 @@ +use super::db; +use crate::meta::alert::Trigger; +use crate::meta::http::HttpResponse as MetaHttpResponse; +use actix_web::{ + http::{self, StatusCode}, + HttpResponse, +}; +use std::io::Error; +use tracing::info_span; + +pub async fn save_trigger(alert_name: String, trigger: Trigger) -> Result { + let loc_span = info_span!("service:triggers:save"); + let _guard = loc_span.enter(); + + db::triggers::set(&alert_name, trigger).await.unwrap(); + Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "Trigger saved".to_string(), + ))) +} + +pub async fn delete_trigger(alert_name: String) -> Result { + let loc_span = info_span!("service:trigger:delete"); + let _guard = loc_span.enter(); + let result = db::triggers::delete(&alert_name).await; + match result { + Ok(_) => Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "Trigger deleted ".to_string(), + ))), + Err(err) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some(err.to_string()), + ))), + } +} + +pub async fn get_alert( + org_id: String, + stream_name: String, + name: String, +) -> Result { + let loc_span = info_span!("service:alerts:get"); + let _guard = loc_span.enter(); + let result = db::alerts::get(org_id.as_str(), stream_name.as_str(), name.as_str()).await; + match result { + Ok(alert) => Ok(HttpResponse::Ok().json(alert)), + Err(_) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some("alert not found".to_string()), + ))), + } +} diff --git a/src/service/users.rs b/src/service/users.rs new file mode 100644 index 0000000000..53a7e6f039 --- /dev/null +++ b/src/service/users.rs @@ -0,0 +1,73 @@ +use actix_web::{ + http::{self, StatusCode}, + HttpResponse, +}; +use std::io::Error; +use uuid::Uuid; + +use crate::infra::config::USERS; +use crate::meta::user::{User, UserList, UserResponse}; +use crate::{common::auth::get_hash, meta::http::HttpResponse as MetaHttpResponse}; + +use super::db; + +pub async fn post_user(org_id: &str, mut user: User) -> Result { + let salt = Uuid::new_v4().to_string(); + user.password = get_hash(&user.password, &salt); + user.salt = salt; + db::user::set(org_id, user).await.unwrap(); + Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "User saved successfully".to_string(), + ))) +} + +pub async fn get_user(org_id: Option<&str>, name: &str) -> Option { + let mut local_org = ""; + let user_key = match org_id { + Some(org) => { + local_org = org; + format!("{}/{}", org, name) + } + None => name.to_owned(), + }; + let user = USERS.get(&user_key); + match user { + Some(loc_user) => Some(loc_user.value().clone()), + None => { + let res = db::user::get(Some(local_org), name).await; + if res.is_err() { + None + } else { + res.unwrap() + } + } + } +} + +pub async fn list_user(org_id: &str) -> Result { + let mut user_list: Vec = vec![]; + for user in USERS.iter() { + if user.key().contains(org_id) { + user_list.push(UserResponse { + name: user.value().name.clone(), + role: user.value().role.clone(), + }) + } + } + Ok(HttpResponse::Ok().json(UserList { list: user_list })) +} + +pub async fn delete_user(org_id: &str, name: &str) -> Result { + let result = db::user::delete(org_id, name).await; + match result { + Ok(_) => Ok(HttpResponse::Ok().json(MetaHttpResponse::message( + http::StatusCode::OK.into(), + "User deleted".to_string(), + ))), + Err(err) => Ok(HttpResponse::NotFound().json(MetaHttpResponse::error( + StatusCode::NOT_FOUND.into(), + Some(err.to_string()), + ))), + } +} diff --git a/tests/input.json b/tests/input.json new file mode 100644 index 0000000000..ac013a17dc --- /dev/null +++ b/tests/input.json @@ -0,0 +1,4335 @@ +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "800M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DANI, Nandor", "Country": "HUN", "Gender": "Men", "Event": "800M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VERSIS, Sotirios", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Discus Throw", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PARASKEVOPOULOS, Panagiotis", "Country": "GRE", "Gender": "Men", "Event": "Discus Throw", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "High Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CLARK, Ellery", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Long Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "KELLNER, Gyula", "Country": "HUN", "Gender": "Men", "Event": "Marathon", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LOUIS, Spyridon", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "VASILAKOS, Kharilaos", "Country": "GRE", "Gender": "Men", "Event": "Marathon", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "DAMASKOS, Evangelos", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "THEODOROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Pole Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOYT, William Welles", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TYLER, Albert", "Country": "USA", "Gender": "Men", "Event": "Pole Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PAPASIDERIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GARRETT, Robert", "Country": "USA", "Gender": "Men", "Event": "Shot Put", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOUSKOS, Miltiadis", "Country": "GRE", "Gender": "Men", "Event": "Shot Put", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "PERSAKIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Triple Jump", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CONNOLLY, James", "Country": "USA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "TUFFERI, Alexandre", "Country": "FRA", "Gender": "Men", "Event": "Triple Jump", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "BATTEL, Edward", "Country": "GBR", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "KONSTANTINIDIS, Aristidis", "Country": "GRE", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Road", "Athlete": "GOEDRICH, August", "Country": "GER", "Gender": "Men", "Event": "Individual Road Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "100KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KOLETTIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "100KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "10KM", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "10KM", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "KEEPING, Frank", "Country": "GBR", "Gender": "Men", "Event": "12-Hour Race", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "SCHMAL, Adolf", "Country": "AUT", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "1KM Time Trial", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "FLAMENG, L\u00e9on", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "MASSON, Paul", "Country": "FRA", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Cycling", "Discipline": "Cycling Track", "Athlete": "NIKOLOPOULOS, Stamatios", "Country": "GRE", "Gender": "Men", "Event": "Sprint Indivual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PIERRAKOS-MAVROMICHALIS, Perikles", "Country": "GRE", "Gender": "Men", "Event": "Foil Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GRAVELOTTE, Eug\u00e8ne-Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "CALLOT, Henri", "Country": "FRA", "Gender": "Men", "Event": "Foil Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PYRGOS, Leonidas", "Country": "GRE", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "PERRONNET, Maurice", "Country": "FRA", "Gender": "Men", "Event": "Foil, Masters", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "GEORGIADIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Fencing", "Discipline": "Fencing", "Athlete": "KARAKALOS, Telemachos", "Country": "GRE", "Gender": "Men", "Event": "Sabre Individual", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Horizontal Bar", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Pommel Horse", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Rings", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Rings", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Rope Climbing", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Horizontal Bar", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "CHRYSAPHIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "KARVELAS, Phillippos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "LOUNDRAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MITROPOULOS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "B\u00d6CKER, Konrad", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Alfred", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "FLATOW, Gustav Felix", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HILMAR, Georg", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "MANTEUFFEL, Fritz", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "NEUKIRCH, Karl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "R\u00d6STEL, Richard", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUFT, Gustav", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ANDRIAKOPOULOS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ATHANASOPOULOS, Spyros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "PERSAKIS, Petros", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "XENAKIS, Thomasios", "Country": "GRE", "Gender": "Men", "Event": "Team, Parallel Bars", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "WEING\u00c4RTNER, Hermann", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "SCHUMANN, Carl", "Country": "GER", "Gender": "Men", "Event": "Vault", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Gymnastics", "Discipline": "Artistic G.", "Athlete": "ZUTTER, Louis", "Country": "SUI", "Gender": "Men", "Event": "Vault", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "MORAKIS, Nikolaos", "Country": "GRE", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, John", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "25M Army Pistol", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "25M Rapid Fire Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAINE, Sumner", "Country": "USA", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "NIELSEN, Holger", "Country": "DEN", "Gender": "Men", "Event": "50M Pistol (60 Shots)", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "TRIKUPIS, Nicolaos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "KARASEVDAS, Pantelis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PAVLIDIS, Pavlos", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 200M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "ORPHANIDIS, Georgios", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Shooting", "Discipline": "Shooting", "Athlete": "PHRANGOUDIS, Joannis", "Country": "GRE", "Gender": "Men", "Event": "Army Rifle, 300M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "FLACK, Edwin", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "ROBERTSON, George Stuart", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TRAUN, Friedrich", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PETROKOKKINOS, Demetrios", "Country": "ZZX", "Gender": "Men", "Event": "Doubles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "PASPATIS, Konstantinos", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "TAPAVICZA, Momcsillo", "Country": "HUN", "Gender": "Men", "Event": "Singles", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "BOLAND, John", "Country": "GBR", "Gender": "Men", "Event": "Singles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Tennis", "Discipline": "Tennis", "Athlete": "KASDAGLIS, Dionysios", "Country": "GRE", "Gender": "Men", "Event": "Singles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "NIKOLOPOULOS, Alexandros", "Country": "GRE", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "ELLIOTT, Launceston", "Country": "GBR", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Weightlifting", "Discipline": "Weightlifting", "Athlete": "JENSEN, Viggo", "Country": "DEN", "Gender": "Men", "Event": "Heavyweight - One Hand Lift", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HERSCHMANN, Otto", "Country": "AUT", "Gender": "Men", "Event": "100M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "DRIVAS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHASAPIS, Spiridon", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "MALOKINIS, Ioannis", "Country": "GRE", "Gender": "Men", "Event": "100M Freestyle For Sailors", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Bronze", "Season": "summer" ,"newField":"Test"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "HAJOS, Alfred", "Country": "HUN", "Gender": "Men", "Event": "1200M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "CHOROPHAS, Efstathios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "NEUMANN, Paul", "Country": "AUT", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Aquatics", "Discipline": "Swimming", "Athlete": "PEPANOS, Antonios", "Country": "GRE", "Gender": "Men", "Event": "400M Freestyle", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LANE, Francis", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "SZOKOLYI, Alajos", "Country": "HUN", "Gender": "Men", "Event": "100M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "100M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "HOFMANN, Fritz", "Country": "GER", "Gender": "Men", "Event": "100M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "CURTIS, Thomas", "Country": "USA", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOULDING, Grantley", "Country": "GBR", "Gender": "Men", "Event": "110M Hurdles", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "LERMUSIAUX, Albin", "Country": "FRA", "Gender": "Men", "Event": "1500M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "FLACK, Edwin", "Country": "AUS", "Gender": "Men", "Event": "1500M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BLAKE, Arthur", "Country": "USA", "Gender": "Men", "Event": "1500M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GMELIN, Charles", "Country": "GBR", "Gender": "Men", "Event": "400M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "BURKE, Thomas", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Gold", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "JAMISON, Herbert", "Country": "USA", "Gender": "Men", "Event": "400M", "Medal": "Silver", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } +{"Year": 1896, "City": "Athens", "Sport": "Athletics", "Discipline": "Athletics", "Athlete": "GOLEMIS, Dimitrios", "Country": "GRE", "Gender": "Men", "Event": "800M", "Medal": "Bronze", "Season": "summer"} +{ "index" : { "_index" : "olympics_schema" } } diff --git a/tests/integration_test.rs b/tests/integration_test.rs new file mode 100644 index 0000000000..edbb451d78 --- /dev/null +++ b/tests/integration_test.rs @@ -0,0 +1,542 @@ +#[cfg(test)] +mod tests { + + use actix_web::{http::header::ContentType, test, web, App}; + use bytes::{Bytes, BytesMut}; + use chrono::Utc; + use core::time; + use prometheus::{opts, GaugeVec}; + use prost::Message; + use std::sync::Once; + use std::{env, fs}; + use std::{str, thread}; + use zinc_oxide::handler::http::router::get_routes; + use zinc_oxide::infra::config::CONFIG; + static START: Once = Once::new(); + pub mod prometheus_prot { + include!(concat!(env!("OUT_DIR"), "/prometheus.rs")); + } + + fn setup() -> (&'static str, &'static str) { + START.call_once(|| { + env::set_var("ZIOX_LOCAL_MODE", "true"); + env::set_var("ZIOX_MAX_FILE_SIZE_ON_DISK", "1"); + env::set_var("ZIOX_FILE_PUSH_INTERVAL", "1"); + env::set_var("ZIOX_PAYLOAD_LIMIT", "209715200"); + env::set_var("ZIOX_JSON_LIMIT", "209715200"); + env::set_var("ZIOX_TIME_STAMP_COL", "_timestamp"); + tokio::task::spawn(async move { + zinc_oxide::job::init() + .await + .unwrap_or_else(|e| panic!("job init failed: {}", e)); + }); + env_logger::init_from_env(env_logger::Env::new().default_filter_or(&CONFIG.log.level)); + log::info!("setup Invoked"); + }); + ("Authorization", "Basic YWRtaW46Q29tcGxleHBhc3MjMTIz") + } + + async fn e2e_100_tear_down() { + log::info!("Tear Down Invoked"); + fs::remove_dir_all("./data").unwrap_or_else(|e| panic!("Error deletting local dir: {}", e)) + } + #[test] + async fn e2e_test() { + for _i in 0..3 { + e2e_1_post_bulk().await; + } + + e2e_post_multi().await; + e2e_get_stream().await; + e2e_post_query_transform().await; + e2e_post_stream_transform().await; + e2e_list_transforms().await; + e2e_delete_query_transform().await; + e2e_delete_stream_transform().await; + //e2e_get_stream_schema().await; + e2e_search().await; + e2e_post_user().await; + e2e_list_users().await; + e2e_delete_user().await; + e2e_post_dashboard().await; + e2e_list_dashboards().await; + e2e_get_dashboard().await; + e2e_delete_dashboard().await; + e2e_post_trace().await; + //e2e_post_metrics().await; + e2e_100_tear_down().await; + } + + async fn e2e_1_post_bulk() { + let auth = setup(); + let path = "./tests/input.json"; + let body_str = fs::read_to_string(path).expect("Unable to read file"); + // metrics + let stats_opts = + opts!("ingest_stats", "Summary ingestion stats metric").namespace("zinc_oxide"); + let stats = GaugeVec::new(stats_opts, &["org", "name", "field"]).unwrap(); + // app + let thread_id: usize = 1; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .app_data(web::Data::new(stats.clone())) + .app_data(web::Data::new(thread_id)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!("/api/{}/_bulk", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_post_multi() { + let auth = setup(); + let body_str = "{\"Year\": 1896, \"City\": \"Athens\", \"Sport\": \"Aquatics\", \"Discipline\": \"Swimming\", \"Athlete\": \"HERSCHMANN, Otto\", \"Country\": \"AUT\", \"Gender\": \"Men\", \"Event\": \"100M Freestyle\", \"Medal\": \"Silver\", \"Season\": \"summer\",\"_timestamp\":1665136888163792}"; + // metrics + let stats_opts = + opts!("ingest_stats", "Summary ingestion stats metric").namespace("zinc_oxide"); + let stats = GaugeVec::new(stats_opts, &["org", "name", "field"]).unwrap(); + // app + let thread_id: usize = 1; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .app_data(web::Data::new(stats.clone())) + .app_data(web::Data::new(thread_id)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!("/api/{}/{}/_multi", "e2e", "olympics_schema")) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_get_stream() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::get() + .uri(&format!("/api/{}/streams", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn _e2e_get_stream_schema() { + setup(); + let one_sec = time::Duration::from_millis(15000); + thread::sleep(one_sec); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let auth = ("Authorization", "Basic YWRtaW46Q29tcGxleHBhc3MjMTIz"); + let req = test::TestRequest::get() + .uri(&format!("/api/{}/{}/schema", "e2e", "olympics_schema")) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_post_query_transform() { + let auth = setup(); + let body_str = "{\"function\": \"function square(row){const obj = JSON.parse(row);obj['square'] = obj.Year*obj.Year; return JSON.stringify(obj);}\" }"; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!("/api/{}/functions/{}", "e2e", "query")) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_post_stream_transform() { + let auth = setup(); + let body_str = "{ + \"function\": \"function square(row){const obj = JSON.parse(row);obj['square'] = obj.Year*obj.Year; return JSON.stringify(obj);}\", + \"order\":1 + }"; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!( + "/api/{}/{}/functions/{}", + "e2e", "olympics_schema", "concat" + )) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_list_transforms() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::get() + .uri(&format!("/api/{}/functions", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_delete_query_transform() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::delete() + .uri(&format!("/api/{}/functions/{}", "e2e", "query")) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + log::info!("{:?}", resp.status()); + assert!(resp.status().is_success()); + } + + async fn e2e_delete_stream_transform() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::delete() + .uri(&format!( + "/api/{}/{}/functions/{}", + "e2e", "olympics_schema", "concat" + )) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_search() { + let auth = setup(); + let body_str = r#"{"query":{"sql":"select * from k8s-logs-2022.10.18", + "from": 0, + "size": 100 + } + }"#; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!("/api/{}/_search", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + // println!("{:?}", resp) + assert!(resp.status().is_success()); + } + async fn e2e_list_users() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::get() + .uri(&format!("/api/{}/users", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + async fn e2e_list_dashboards() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::get() + .uri(&format!("/api/{}/dashboards", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + async fn e2e_post_user() { + let auth = setup(); + let body_str = r#"{ + "name": "nonadmin", + "password": "Abcd12345", + "role": "User" + }"#; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!("/api/{}/users", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn e2e_delete_user() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::delete() + .uri(&format!("/api/{}/users/{}", "e2e", "nonadmin")) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + log::info!("{:?}", resp.status()); + assert!(resp.status().is_success()); + } + async fn e2e_post_dashboard() { + let auth = setup(); + let body_str = r#""{\"label\" : \"Dashboard1\",\"panels\":[{\"query\": [\"select a as x_axis_chart, b as y_axis_chart from k8s-logs-2022.10.31 group by b\"],\"x_label\": \"\",\"y_label\": \"\",\"title\": \"\",\"type\": \"bar\",\"position\": { \"x_axis\": [1,3],\"y_axis\": [1,1]}}]}""#; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!( + "/api/{}/dashboards/{}", + "e2e", "dashboard_hash_XYZABC124" + )) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + async fn e2e_get_dashboard() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::get() + .uri(&format!( + "/api/{}/dashboards/{}", + "e2e", "dashboard_hash_XYZABC124" + )) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + async fn e2e_delete_dashboard() { + let auth = setup(); + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::delete() + .uri(&format!( + "/api/{}/dashboards/{}", + "e2e", "dashboard_hash_XYZABC124" + )) + .insert_header(ContentType::json()) + .append_header(auth) + .to_request(); + let resp = test::call_service(&app, req).await; + log::info!("{:?}", resp.status()); + assert!(resp.status().is_success()); + } + + async fn e2e_post_trace() { + let auth = setup(); + let path = "./tests/trace_input.json"; + let body_str = fs::read_to_string(path).expect("Unable to read file"); + + // app + let thread_id: usize = 1; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .app_data(web::Data::new(thread_id)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!("/api/{}/traces", "e2e")) + .insert_header(ContentType::json()) + .append_header(auth) + .set_payload(body_str) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } + + async fn _e2e_post_metrics() { + let auth = setup(); + + let mut loc_lable: Vec = vec![]; + loc_lable.push(prometheus_prot::Label { + name: "__name__".to_string(), + value: "grafana_api_dashboard_save_milliseconds_count".to_string(), + }); + + loc_lable.push(prometheus_prot::Label { + name: "cluster".to_string(), + value: "prom-k8s".to_string(), + }); + loc_lable.push(prometheus_prot::Label { + name: "__replica__".to_string(), + value: "prom-k8s-0".to_string(), + }); + + let mut loc_samples: Vec = vec![]; + + for i in 1..2 { + loc_samples.push(prometheus_prot::Sample { + value: i as f64, + timestamp: Utc::now().timestamp_micros(), + }); + } + loc_samples.push(prometheus_prot::Sample { + value: f64::NEG_INFINITY, + timestamp: Utc::now().timestamp_micros(), + }); + loc_samples.push(prometheus_prot::Sample { + value: f64::INFINITY, + timestamp: Utc::now().timestamp_micros(), + }); + + loc_samples.push(prometheus_prot::Sample { + value: 0.0_f64 / 0.0_f64, + timestamp: Utc::now().timestamp_micros(), + }); + let loc_exemp: Vec = vec![]; + let loc_hist: Vec = vec![]; + + let ts = prometheus_prot::TimeSeries { + labels: loc_lable, + samples: loc_samples, + exemplars: loc_exemp, + histograms: loc_hist, + }; + + let metadata: Vec = vec![]; + let wr_req: prometheus_prot::WriteRequest = prometheus_prot::WriteRequest { + timeseries: vec![ts], + metadata, + }; + let mut out = BytesMut::with_capacity(wr_req.encoded_len()); + wr_req.encode(&mut out).expect("Out of memory"); + let data: Bytes = out.into(); + let body = snap::raw::Encoder::new() + .compress_vec(&data) + .expect("Out of memory"); + + // app + let thread_id: usize = 1; + let app = test::init_service( + App::new() + .app_data(web::JsonConfig::default().limit(CONFIG.limit.req_json_limit)) + .app_data(web::PayloadConfig::new(CONFIG.limit.req_payload_limit)) + .app_data(web::Data::new(thread_id)) + .configure(get_routes), + ) + .await; + let req = test::TestRequest::post() + .uri(&format!("/api/{}/traces", "e2e")) + //.insert_header(ContentType::json()) + .insert_header(("X-Prometheus-Remote-Write-Version", "0.1.0")) + .insert_header(("Content-Encoding", "snappy")) + .insert_header(("Content-Type", "application/x-protobuf")) + .append_header(auth) + .set_payload(body) + .to_request(); + let resp = test::call_service(&app, req).await; + assert!(resp.status().is_success()); + } +} diff --git a/tests/trace_input.json b/tests/trace_input.json new file mode 100644 index 0000000000..ed81bcdcea --- /dev/null +++ b/tests/trace_input.json @@ -0,0 +1 @@ +{"resourceSpans":[{"resource":{"attributes":[{"key":"service.name","value":{"stringValue":"nodejs-typescript-service"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"1.8.0"}},{"key":"process.pid","value":{"intValue":87092}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.command","value":{"stringValue":"/Users/ashishkolhe/Documents/GitHub/sample-tracing-nodejs-typescript/node_modules/.bin/ts-node"}},{"key":"process.command_line","value":{"stringValue":"/opt/homebrew/Cellar/node/19.1.0/bin/node /Users/ashishkolhe/Documents/GitHub/sample-tracing-nodejs-typescript/node_modules/.bin/ts-node --require ./tracing.ts app.ts"}},{"key":"process.runtime.version","value":{"stringValue":"19.1.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}}],"droppedAttributesCount":0},"scopeSpans":[{"scope":{"name":"@opentelemetry/instrumentation-fs","version":"0.6.0"},"spans":[{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"fcca1617996aa1ec","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273550486500,"endTimeUnixNano":1670820273550613800,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"8dc51bd024913a60","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273551483400,"endTimeUnixNano":1670820273551527200,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"893b4240a0a48e1a","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273551807700,"endTimeUnixNano":1670820273551837400,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"f93ff1a1186b7683","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273552105200,"endTimeUnixNano":1670820273552183600,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"fda4b639df2e1875","parentSpanId":"e2c6b713d07a0c71","name":"fs readFileSync","kind":1,"startTimeUnixNano":1670820273552214500,"endTimeUnixNano":1670820273552366300,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"3c5d983dc58d304d","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273552820000,"endTimeUnixNano":1670820273552855300,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"dacbbe465d1e3a84","parentSpanId":"e2c6b713d07a0c71","name":"fs readFileSync","kind":1,"startTimeUnixNano":1670820273552892700,"endTimeUnixNano":1670820273554052000,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"ae8b5e5252a49942","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273557216500,"endTimeUnixNano":1670820273557264000,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"18c033c907fea89b","parentSpanId":"e2c6b713d07a0c71","name":"fs readFileSync","kind":1,"startTimeUnixNano":1670820273557291500,"endTimeUnixNano":1670820273557398800,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"8435df361db8bb3c","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273557531400,"endTimeUnixNano":1670820273557553700,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"79338bc16ed83414","parentSpanId":"e2c6b713d07a0c71","name":"fs readFileSync","kind":1,"startTimeUnixNano":1670820273557568500,"endTimeUnixNano":1670820273557873700,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"e1dea9ecf866f4ee","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273558357500,"endTimeUnixNano":1670820273558386000,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"09194421781fc712","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273558663000,"endTimeUnixNano":1670820273558686700,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"5cd8725b66736085","parentSpanId":"e2c6b713d07a0c71","name":"fs readFileSync","kind":1,"startTimeUnixNano":1670820273558697500,"endTimeUnixNano":1670820273558763000,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"84b1897ca50dc68f","parentSpanId":"e2c6b713d07a0c71","name":"fs existsSync","kind":1,"startTimeUnixNano":1670820273558829800,"endTimeUnixNano":1670820273558847000,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0},{"traceId":"29bc14368d7e8ae9d17ae2ebff851747","spanId":"3fe27e3c7fc877ca","parentSpanId":"e2c6b713d07a0c71","name":"fs readFileSync","kind":1,"startTimeUnixNano":1670820273558860000,"endTimeUnixNano":1670820273559340300,"attributes":[],"droppedAttributesCount":0,"events":[],"droppedEventsCount":0,"status":{"code":0},"links":[],"droppedLinksCount":0}]}]}]} \ No newline at end of file diff --git a/web/.eslintrc.cjs b/web/.eslintrc.cjs new file mode 100644 index 0000000000..bc946872fc --- /dev/null +++ b/web/.eslintrc.cjs @@ -0,0 +1,25 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier' + ], + overrides: [ + { + files: [ + 'cypress/e2e/**/*.{cy,spec}.{js,ts,jsx,tsx}' + ], + 'extends': [ + 'plugin:cypress/recommended' + ] + } + ], + parserOptions: { + ecmaVersion: 'latest' + } +} diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000000..27c3a708d3 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,28 @@ +# Logs +# logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/.prettierrc.json b/web/.prettierrc.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/web/.prettierrc.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000000..c19366b38c --- /dev/null +++ b/web/README.md @@ -0,0 +1,68 @@ +# web + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +### Run Unit Tests with [Vitest](https://vitest.dev/) + +```sh +npm run test:unit +``` + +### Run End-to-End Tests with [Cypress](https://www.cypress.io/) + +```sh +npm run test:e2e:dev +``` + +This runs the end-to-end tests against the Vite development server. +It is much faster than the production build. + +But it's still recommended to test the production build with `test:e2e` before deploying (e.g. in CI environments): + +```sh +npm run build +npm run test:e2e +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/web/cypress.config.ts b/web/cypress.config.ts new file mode 100644 index 0000000000..0f66080fd0 --- /dev/null +++ b/web/cypress.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'cypress' + +export default defineConfig({ + e2e: { + specPattern: 'cypress/e2e/**/*.{cy,spec}.{js,jsx,ts,tsx}', + baseUrl: 'http://localhost:4173' + } +}) diff --git a/web/cypress/e2e/tsconfig.json b/web/cypress/e2e/tsconfig.json new file mode 100644 index 0000000000..be213aefc0 --- /dev/null +++ b/web/cypress/e2e/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@vue/tsconfig/tsconfig.web.json", + "include": ["./**/*", "../support/**/*"], + "compilerOptions": { + "isolatedModules": false, + "target": "es5", + "lib": ["es5", "dom"], + "types": ["cypress"] + } +} diff --git a/web/env.d.ts b/web/env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/web/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/web/eslint.sh b/web/eslint.sh new file mode 100755 index 0000000000..257ac3b7ea --- /dev/null +++ b/web/eslint.sh @@ -0,0 +1,9 @@ +#! /bin/sh + +npm run lint + +rc=$? +if [ $rc -ne 0 ]; then + echo "ES lint failed" >&2 + exit $rc +fi diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000000..97d4d71a19 --- /dev/null +++ b/web/index.html @@ -0,0 +1,20 @@ + + + + + + + Zinc Oxide + + + + + +
+ + + + \ No newline at end of file diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 0000000000..418a10f6e8 --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,55774 @@ +{ + "name": "zinc-oxide-web", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "zinc-oxide-web", + "version": "0.0.0", + "dependencies": { + "@aws-amplify/ui-vue": "^2.4.16", + "@esbuild-plugins/node-globals-polyfill": "^0.1.1", + "@openreplay/tracker": "^4.1.5", + "@quasar/extras": "^1.14.3", + "@segment/analytics-next": "^1.45.0", + "@sentry/tracing": "^7.17.4", + "@sentry/vue": "^7.17.4", + "aws-amplify": "latest", + "js-cookie": "^3.0.1", + "jwt-decode": "^3.1.2", + "lodash-es": "^4.17.21", + "moment": "^2.15.2", + "node-polyfill-webpack-plugin": "^2.0.1", + "node-sql-parser": "^4.6.4", + "plotly.js": "^2.14.0", + "quasar": "^2.7.5", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-polyfill-node": "^0.10.2", + "rudder-sdk-js": "^2.20.0", + "vue": "^3.2.37", + "vue-drag-resize": "^1.5.4", + "vue-i18n": "^9.1.10", + "vue-monaco-singleline": "^1.1.1", + "vue-router": "^4.1.2", + "vue3-grid-layout": "^1.0.0", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@cypress/vue": "^4.0.0", + "@cypress/webpack-dev-server": "^2.0.0", + "@quasar/vite-plugin": "^1.0.10", + "@rushstack/eslint-patch": "^1.1.0", + "@types/js-cookie": "^3.0.2", + "@types/jsdom": "^16.2.14", + "@types/lodash-es": "^4.17.6", + "@types/node": "^16.11.45", + "@types/plotly.js": "^2.12.4", + "@vitejs/plugin-vue": "^3.0.1", + "@vitejs/plugin-vue-jsx": "^2.0.0", + "@vitest/ui": "^0.18.1", + "@vue/eslint-config-prettier": "^7.0.0", + "@vue/eslint-config-typescript": "^11.0.0", + "@vue/test-utils": "^2.0.2", + "@vue/tsconfig": "^0.1.3", + "c8": "^7.11.3", + "cypress": "^10.3.0", + "cypress-localstorage-commands": "^2.2.1", + "eslint": "^8.5.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-cypress": "^2.12.1", + "eslint-plugin-vue": "^9.5.1", + "happy-dom": "^6.0.4", + "jsdom": "^20.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.5.1", + "sass": "^1.32.0", + "sass-loader": "^13.0.2", + "start-server-and-test": "^1.14.0", + "typescript": "~4.7.4", + "vite": "^3.0.1", + "vite-plugin-monaco-editor": "^1.1.0", + "vitest": "^0.18.1", + "vue": "^3.2.37", + "vue-tsc": "^0.38.8" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@aws-amplify/analytics": { + "version": "5.2.28", + "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-5.2.28.tgz", + "integrity": "sha512-eoeAd7wMTjG0D/fUS28GCbBEcyaJ3jAumtcqsvQUOHh7JQYaZ+Jbo2HfvCla3NSMb0kPgRXnxtL9MheXVZ1Pag==", + "dependencies": { + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-firehose": "3.6.1", + "@aws-sdk/client-kinesis": "3.6.1", + "@aws-sdk/client-personalize-events": "3.6.1", + "@aws-sdk/client-pinpoint": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "lodash": "^4.17.20", + "uuid": "^3.2.1" + } + }, + "node_modules/@aws-amplify/analytics/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-amplify/api": { + "version": "4.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-4.0.61.tgz", + "integrity": "sha512-sJGIbdG6gLmm+pykYjuiMuuLquR/3udjRsE4q987CvF4CNuJXtfN8wYzgZMOr9CUdorXZfGzZHRiIUbLgqH+Kg==", + "dependencies": { + "@aws-amplify/api-graphql": "2.3.25", + "@aws-amplify/api-rest": "2.0.61" + } + }, + "node_modules/@aws-amplify/api-graphql": { + "version": "2.3.25", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-2.3.25.tgz", + "integrity": "sha512-ZpQdtLYzY/0X6eWbYmiVBlxUG4oLcbTdtXTu853UWez/CfV0tESPzuCe3/UcBmwAOLUqSgbZDNkPUaQCnXJVzw==", + "dependencies": { + "@aws-amplify/api-rest": "2.0.61", + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "@aws-amplify/pubsub": "4.5.11", + "graphql": "15.8.0", + "uuid": "^3.2.1", + "zen-observable-ts": "0.8.19" + } + }, + "node_modules/@aws-amplify/api-graphql/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-amplify/api-rest": { + "version": "2.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-2.0.61.tgz", + "integrity": "sha512-iyhLpa+OqNCnRTWPRLq1/NjH4DqV48zckKLDihiAtA0tE/tyzQ203Ed3EIoTCWL96jSL3IDunQPkXQ7W8ZOwjA==", + "dependencies": { + "@aws-amplify/core": "4.7.12", + "axios": "0.26.0" + } + }, + "node_modules/@aws-amplify/api-rest/node_modules/axios": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", + "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/@aws-amplify/auth": { + "version": "4.6.14", + "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-4.6.14.tgz", + "integrity": "sha512-fEgO5KqT1qlxhEoExsDz9JQStEOCr+ShROdZnZ3h4DXdsbi/xHdlg4WxDhoHJvjepMSx4wzuGXFn4loTPHh5Jw==", + "dependencies": { + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "amazon-cognito-identity-js": "5.2.12", + "crypto-js": "^4.1.1" + } + }, + "node_modules/@aws-amplify/cache": { + "version": "4.0.63", + "resolved": "https://registry.npmjs.org/@aws-amplify/cache/-/cache-4.0.63.tgz", + "integrity": "sha512-UB9wzqYpiB5/L6Q8A5KXCAlbfJbgbUUiX4eW+ue3qNMNf4+9ym2UeOXPPXuZNO/wgKyiTYmzHLjA92o7xvxoRg==", + "dependencies": { + "@aws-amplify/core": "4.7.12" + } + }, + "node_modules/@aws-amplify/core": { + "version": "4.7.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-4.7.12.tgz", + "integrity": "sha512-TVHvbm6ay7VY3a6x4NHpbxh1VOld0GTV+9yka0OpCIrtAgBLu2BegYfDUjvhiGFKYvdzS0NUa0myM8Ne9SUVIg==", + "dependencies": { + "@aws-crypto/sha256-js": "1.0.0-alpha.0", + "@aws-sdk/client-cloudwatch-logs": "3.6.1", + "@aws-sdk/client-cognito-identity": "3.6.1", + "@aws-sdk/credential-provider-cognito-identity": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-hex-encoding": "3.6.1", + "universal-cookie": "^4.0.4", + "zen-observable-ts": "0.8.19" + } + }, + "node_modules/@aws-amplify/datastore": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-3.14.4.tgz", + "integrity": "sha512-DL9H6u8OQ3H4Z6vGPcu++CvIMAZj1310GIo7c7W7YZIzZcCf4SkYPs+StEChayODtjLqYlRDN/FHjZQUtHXIQQ==", + "dependencies": { + "@aws-amplify/api": "4.0.61", + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/core": "4.7.12", + "@aws-amplify/pubsub": "4.5.11", + "amazon-cognito-identity-js": "5.2.12", + "idb": "5.0.6", + "immer": "9.0.6", + "ulid": "2.3.0", + "uuid": "3.3.2", + "zen-observable-ts": "0.8.19", + "zen-push": "0.2.1" + } + }, + "node_modules/@aws-amplify/datastore/node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-amplify/geo": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@aws-amplify/geo/-/geo-1.3.24.tgz", + "integrity": "sha512-ffEvGQOd9rLny5FRH1BOjM/uwP95HcJ06o/hah6xLiYI4qJR1wU72ooz33UdcjLVRp6xNZs210krxxeQu7SR0g==", + "dependencies": { + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-location": "3.186.0", + "@turf/boolean-clockwise": "6.5.0", + "camelcase-keys": "6.2.2" + } + }, + "node_modules/@aws-amplify/interactions": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@aws-amplify/interactions/-/interactions-4.1.9.tgz", + "integrity": "sha512-RQ0fto8v0IzNokpRWDgK2EZsd2uYoFl8LyBpjTT2HGOwLjNnF6qFWpH8qe/cTdNQGANZhb9VNy+Y06aQdhAovw==", + "dependencies": { + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-lex-runtime-service": "3.186.0", + "@aws-sdk/client-lex-runtime-v2": "3.186.0", + "base-64": "1.0.0", + "fflate": "0.7.3", + "pako": "2.0.4" + } + }, + "node_modules/@aws-amplify/predictions": { + "version": "4.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/predictions/-/predictions-4.0.61.tgz", + "integrity": "sha512-WAZmf5dXmgTx6BCnEU7+zYaDsiXRH7YjzgC/eR1JT/Y2rmuA33U2wAymNZEZJ9tvGEvPWygwIScu//VG99nPiA==", + "dependencies": { + "@aws-amplify/core": "4.7.12", + "@aws-amplify/storage": "4.5.14", + "@aws-sdk/client-comprehend": "3.6.1", + "@aws-sdk/client-polly": "3.6.1", + "@aws-sdk/client-rekognition": "3.6.1", + "@aws-sdk/client-textract": "3.6.1", + "@aws-sdk/client-translate": "3.6.1", + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "uuid": "^3.2.1" + } + }, + "node_modules/@aws-amplify/predictions/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-amplify/pubsub": { + "version": "4.5.11", + "resolved": "https://registry.npmjs.org/@aws-amplify/pubsub/-/pubsub-4.5.11.tgz", + "integrity": "sha512-4scTnOvLCwe5lsiL1zqwP5c6/hCNPb5HG6zzSc4kmP9njQuSjwe+XaV/9lpwuj/8tFSu23nBw+/oZwqEOcE43Q==", + "dependencies": { + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "graphql": "15.8.0", + "paho-mqtt": "^1.1.0", + "uuid": "^3.2.1", + "zen-observable-ts": "0.8.19" + } + }, + "node_modules/@aws-amplify/pubsub/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-amplify/storage": { + "version": "4.5.14", + "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-4.5.14.tgz", + "integrity": "sha512-Jjmhj8jEgAOmyArXjA813QnF/uJSYmNHEu2vCmgaMZc88LWLstNtJ/naiqi/y3sca1FWfDf9qryfKnz0HMSq6g==", + "dependencies": { + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-s3": "3.6.1", + "@aws-sdk/s3-request-presigner": "3.6.1", + "@aws-sdk/util-create-request": "3.6.1", + "@aws-sdk/util-format-url": "3.6.1", + "axios": "0.26.0", + "events": "^3.1.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/axios": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", + "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/@aws-amplify/ui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/ui/-/ui-4.1.0.tgz", + "integrity": "sha512-BZC/lgMABnghqXJ6rTwsTriDZndWuZ4Z27P+LdEtieVSa4DZ4lQNJKDZ1hLCjoHv1MOXin4UCHSAvwjiMNnfJw==", + "dependencies": { + "lodash": "4.17.21", + "style-dictionary": "3.7.0", + "tslib": "2.4.0" + }, + "peerDependencies": { + "aws-amplify": "3.x.x || 4.x.x", + "xstate": "^4.33.6" + }, + "peerDependenciesMeta": { + "xstate": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/ui-vue": { + "version": "2.4.26", + "resolved": "https://registry.npmjs.org/@aws-amplify/ui-vue/-/ui-vue-2.4.26.tgz", + "integrity": "sha512-ypjizBSf2ThOS/IET677hXJgkv2gmNlbisV2agHPh39tlYjjxKYGR4UZo3mOnf/VD54V46nCphYEesW9SQI7Ig==", + "dependencies": { + "@aws-amplify/ui": "4.1.0", + "@vue/tsconfig": "^0.1.3", + "@vueuse/core": "7.5.5", + "@xstate/vue": "0.8.1", + "nanoid": "3.1.31", + "qrcode": "1.5.0", + "xstate": "^4.33.6" + }, + "peerDependencies": { + "aws-amplify": "^4.2.2" + } + }, + "node_modules/@aws-amplify/ui-vue/node_modules/@vueuse/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-7.5.5.tgz", + "integrity": "sha512-RBDqmIoGfak4h3xdXa/Av+ibkb8NY044wEy6+PG2FAWNaID8/FkqmSFjbxogrbmpSX1yZ1PBHrM8DUp/FrIpbg==", + "dependencies": { + "@vueuse/shared": "7.5.5", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/ui-vue/node_modules/@vueuse/shared": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-7.5.5.tgz", + "integrity": "sha512-mzzTsotHQRPnPAChy8iCv6ek/90CKYhAFyMRgNsMxpT0afZJkbMO/X0OaOu/1NuGbgb8UVjlsWKmCUgKTOF5hA==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/ui-vue/node_modules/nanoid": { + "version": "3.1.31", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.31.tgz", + "integrity": "sha512-ZivnJm0o9bb13p2Ot5CpgC2rQdzB9Uxm/mFZweqm5eMViqOJe3PV6LU2E30SiLgheesmcPrjquqraoolONSA0A==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/@aws-amplify/ui-vue/node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/ui/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/@aws-amplify/xr": { + "version": "3.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/xr/-/xr-3.0.61.tgz", + "integrity": "sha512-r9bKl+eXbEz/Qj+VdZwrgOOduq6NNunmQCrmxWHIreoKEdSUe4ul+fRsAEfMib8PklPVbMuc0K7G5iAYTUPxDQ==", + "dependencies": { + "@aws-amplify/core": "4.7.12" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-2.0.0.tgz", + "integrity": "sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA==", + "dependencies": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "dependencies": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/@aws-sdk/types": { + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", + "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz", + "integrity": "sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-1.2.2.tgz", + "integrity": "sha512-0tNR4kBtJp+9S0kis4+JLab3eg6QWuIeuPhzaYoYwNUXGBgsWIkktA2mnilet+EGWzf3n1zknJXC4X4DVyyXbg==", + "dependencies": { + "@aws-crypto/ie11-detection": "^1.0.0", + "@aws-crypto/sha256-js": "^1.2.2", + "@aws-crypto/supports-web-crypto": "^1.0.0", + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "1.0.0-alpha.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.0.0-alpha.0.tgz", + "integrity": "sha512-GidX2lccEtHZw8mXDKJQj6tea7qh3pAnsNSp1eZNxsN4MMu2OvSraPSqiB1EihsQkZBMg0IiZPpZHoACUX/QMQ==", + "dependencies": { + "@aws-sdk/types": "^1.0.0-alpha.0", + "@aws-sdk/util-utf8-browser": "^1.0.0-alpha.0", + "tslib": "^1.9.3" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/@aws-sdk/types": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-1.0.0-rc.10.tgz", + "integrity": "sha512-9gwhYnkTNuYZ+etCtM4T8gjpZ0SWSXbzQxY34UjSS+dt3C/UnbX0J22tMahp/9Z1yCa9pihtXrkD+nO2xn7nVQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/@aws-sdk/util-utf8-browser": { + "version": "1.0.0-rc.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-1.0.0-rc.8.tgz", + "integrity": "sha512-clncPMJ23rxCIkZ9LoUC8SowwZGxWyN2TwRb0XvW/Cv9EavkRgRCOrCpneGyC326lqtMKx36onnpaSRHxErUYw==", + "dependencies": { + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-1.0.0.tgz", + "integrity": "sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dependencies": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/abort-controller": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.6.1.tgz", + "integrity": "sha512-X81XkxX/2Tvv9YNcEto/rcQzPIdKJHFSnl9hBl/qkSdCFV/GaQ2XNWfKm5qFXMLlZNFS0Fn5CnBJ83qnBm47vg==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/abort-controller/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/chunked-blob-reader": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.6.1.tgz", + "integrity": "sha512-QBGUBoD8D5nsM/EKoc0rjpApa5NE5pQVzw1caE8sG00QMMPkCXWSB/gTVKVY0GOAhJFoA/VpVPQchIlZcOrBFg==", + "dependencies": { + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/chunked-blob-reader-native": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.6.1.tgz", + "integrity": "sha512-vP6bc2v9h442Srmo7t2QcIbPjk5IqLSf4jGnKDAes8z+7eyjCtKugRP3lOM1fJCfGlPIsJGYnexxYdEGw008vA==", + "dependencies": { + "@aws-sdk/util-base64-browser": "3.6.1", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/chunked-blob-reader-native/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/chunked-blob-reader/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-cloudwatch-logs": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.6.1.tgz", + "integrity": "sha512-QOxIDnlVTpnwJ26Gap6RGz61cDLH6TKrIp30VqwdMeT1pCGy8mn9rWln6XA+ymkofHy/08RfpGp+VN4axwd4Lw==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.6.1.tgz", + "integrity": "sha512-FMj2GR9R5oCKb3/NI16GIvWeHcE4uX42fBAaQKPbjg2gALFDx9CcJYsdOtDP37V89GtPyZilLv6GJxrwJKzYGg==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-comprehend": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-comprehend/-/client-comprehend-3.6.1.tgz", + "integrity": "sha512-Y2ixlSTjjAp2HJhkUArtYqC/X+zG5Qqu3Bl+Ez22u4u4YnG8HsNFD6FE1axuWSdSa5AFtWTEt+Cz2Ghj/tDySA==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-comprehend/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-comprehend/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-comprehend/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-sdk/client-firehose": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.6.1.tgz", + "integrity": "sha512-KhiKCm+cJmnRFuAEyO3DBpFVDNix1XcVikdxk2lvYbFWkM1oUZoBpudxaJ+fPf2W3stF3CXIAOP+TnGqSZCy9g==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-firehose/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-firehose/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-kinesis": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.6.1.tgz", + "integrity": "sha512-Ygo+92LxHeUZmiyhiHT+k7hIOhJd6S7ckCEVUsQs2rfwe9bAygUY/3cCoZSqgWy7exFRRKsjhzStcyV6i6jrVQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/eventstream-serde-browser": "3.6.1", + "@aws-sdk/eventstream-serde-config-resolver": "3.6.1", + "@aws-sdk/eventstream-serde-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "@aws-sdk/util-waiter": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-service": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lex-runtime-service/-/client-lex-runtime-service-3.186.0.tgz", + "integrity": "sha512-EgjQvFxa/o1urxpnWV2A/D0k4m763NqrPLuL074LR+cOkNxVl9W27aYL/tddDBmmDzzx4KcuRL6/n+UBZIheTg==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.186.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "dependencies": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "dependencies": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "dependencies": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "dependencies": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "dependencies": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "deprecated": "The package @aws-sdk/util-base64-browser has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lex-runtime-v2/-/client-lex-runtime-v2-3.186.0.tgz", + "integrity": "sha512-oDN07yCWc9gsEYL44KSjPj8wdHHcf5Kti+w31fE7JHZqvRXxLsLx7G+kEcPmSTRk3Y4wDPXJozL6sDUAOAEb7A==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.186.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/eventstream-handler-node": "3.186.0", + "@aws-sdk/eventstream-serde-browser": "3.186.0", + "@aws-sdk/eventstream-serde-config-resolver": "3.186.0", + "@aws-sdk/eventstream-serde-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-eventstream": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "dependencies": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "dependencies": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "dependencies": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "dependencies": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/eventstream-serde-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.186.0.tgz", + "integrity": "sha512-0r2c+yugBdkP5bglGhGOgztjeHdHTKqu2u6bvTByM0nJShNO9YyqWygqPqDUOE5axcYQE1D0aFDGzDtP3mGJhw==", + "dependencies": { + "@aws-sdk/eventstream-serde-universal": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.186.0.tgz", + "integrity": "sha512-xhwCqYrAX5c7fg9COXVw6r7Sa3BO5cCfQMSR5S1QisE7do8K1GDKEHvUCheOx+RLon+P3glLjuNBMdD0HfCVNA==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/eventstream-serde-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.186.0.tgz", + "integrity": "sha512-9p/gdukJYfmA+OEYd6MfIuufxrrfdt15lBDM3FODuc9j09LSYSRHSxthkIhiM5XYYaaUM+4R0ZlSMdaC3vFDFQ==", + "dependencies": { + "@aws-sdk/eventstream-serde-universal": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/eventstream-serde-universal": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.186.0.tgz", + "integrity": "sha512-rIgPmwUxn2tzainBoh+cxAF+b7o01CcW+17yloXmawsi0kiR7QK7v9m/JTGQPWKtHSsPOrtRzuiWQNX57SlcsQ==", + "dependencies": { + "@aws-sdk/eventstream-codec": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "dependencies": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "deprecated": "The package @aws-sdk/util-base64-browser has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-location/-/client-location-3.186.0.tgz", + "integrity": "sha512-RXT1Z7jgYrPEdD1VkErH9Wm+z6y7c/ua1Pu9VQ8weu9vtD15S8Qnyd1m4HS8ZPQUUM/gTxs/fL9+s53wRWpfGQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.186.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "dependencies": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "dependencies": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "dependencies": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "dependencies": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "dependencies": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "deprecated": "The package @aws-sdk/util-base64-browser has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-location/node_modules/@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize-events": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.6.1.tgz", + "integrity": "sha512-x9Jl/7emSQsB6GwBvjyw5BiSO26CnH4uvjNit6n54yNMtJ26q0+oIxkplnUDyjLTfLRe373c/z5/4dQQtDffkw==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-pinpoint": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-pinpoint/-/client-pinpoint-3.6.1.tgz", + "integrity": "sha512-dueBedp91EKAHxcWLR3aNx/eUEdxdF9niEQTzOO2O4iJL2yvO2Hh7ZYiO7B3g7FuuICTpWSHd//Y9mGmSVLMCg==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-pinpoint/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-pinpoint/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-polly": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-polly/-/client-polly-3.6.1.tgz", + "integrity": "sha512-y6fxVYndGS7z2KqHViPCqagBEOsZlxBUYUJZuD6WWTiQrI0Pwe5qG02oKJVaa5OmxE20QLf6bRBWj2rQpeF4IQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-polly/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-polly/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-rekognition": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-rekognition/-/client-rekognition-3.6.1.tgz", + "integrity": "sha512-Ia4FEog9RrI0IoDRbOJO6djwhVAAaEZutxEKrWbjrVz4bgib28L+V+yAio2SUneeirj8pNYXwBKPfoYOUqGHhA==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "@aws-sdk/util-waiter": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-rekognition/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-rekognition/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.6.1.tgz", + "integrity": "sha512-59cTmZj92iwgNoAeJirK5sZNQNXLc/oI3luqrEHRNLuOh70bjdgad70T0a5k2Ysd/v/QNamqJxnCJMPuX1bhgw==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/eventstream-serde-browser": "3.6.1", + "@aws-sdk/eventstream-serde-config-resolver": "3.6.1", + "@aws-sdk/eventstream-serde-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-blob-browser": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/hash-stream-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/md5-js": "3.6.1", + "@aws-sdk/middleware-apply-body-checksum": "3.6.1", + "@aws-sdk/middleware-bucket-endpoint": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-expect-continue": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-location-constraint": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-sdk-s3": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-ssec": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "@aws-sdk/util-waiter": "3.6.1", + "@aws-sdk/xml-builder": "3.6.1", + "fast-xml-parser": "^3.16.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.186.0.tgz", + "integrity": "sha512-qwLPomqq+fjvp42izzEpBEtGL2+dIlWH5pUCteV55hTEwHgo+m9LJPIrMWkPeoMBzqbNiu5n6+zihnwYlCIlEA==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "dependencies": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "dependencies": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "dependencies": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "dependencies": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "dependencies": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "deprecated": "The package @aws-sdk/util-base64-browser has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.186.0.tgz", + "integrity": "sha512-lyAPI6YmIWWYZHQ9fBZ7QgXjGMTtktL5fk8kOcZ98ja+8Vu0STH1/u837uxqvZta8/k0wijunIL3jWUhjsNRcg==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-sdk-sts": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "entities": "2.2.0", + "fast-xml-parser": "3.19.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "dependencies": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "dependencies": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "dependencies": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "dependencies": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "dependencies": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "deprecated": "The package @aws-sdk/util-base64-browser has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/fast-xml-parser": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", + "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==", + "bin": { + "xml2js": "cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + }, + "node_modules/@aws-sdk/client-textract": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.6.1.tgz", + "integrity": "sha512-nLrBzWDt3ToiGVFF4lW7a/eZpI2zjdvu7lwmOWyXX8iiPzhBVVEfd5oOorRyJYBsGMslp4sqV8TBkU5Ld/a97Q==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-textract/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-textract/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-translate": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-translate/-/client-translate-3.6.1.tgz", + "integrity": "sha512-RIHY+Og1i43B5aWlfUUk0ZFnNfM7j2vzlYUwOqhndawV49GFf96M3pmskR5sKEZI+5TXY77qR9TgZ/r3UxVCRQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/client-translate/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-translate/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-translate/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-sdk/config-resolver": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.6.1.tgz", + "integrity": "sha512-qjP1g3jLIm+XvOIJ4J7VmZRi87vsDmTRzIFePVeG+EFWwYQLxQjTGMdIj3yKTh1WuZ0HByf47mGcpiS4HZLm1Q==", + "dependencies": { + "@aws-sdk/signature-v4": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.6.1.tgz", + "integrity": "sha512-uJ9q+yq+Dhdo32gcv0p/AT7sKSAUH0y4ts9XRK/vx0dW9Q3XJy99mOJlq/6fkh4LfWeavJJlaCo9lSHNMWXx4w==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.6.1", + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.6.1.tgz", + "integrity": "sha512-coeFf/HnhpGidcAN1i1NuFgyFB2M6DeN1zNVy4f6s4mAh96ftr9DgWM1CcE3C+cLHEdpNqleVgC/2VQpyzOBLQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.6.1.tgz", + "integrity": "sha512-bf4LMI418OYcQbyLZRAW8Q5AYM2IKrNqOnIcfrFn2f17ulG7TzoWW3WN/kMOw4TC9+y+vIlCWOv87GxU1yP0Bg==", + "dependencies": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-imds/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.6.1.tgz", + "integrity": "sha512-3jguW6+ttRNddRZvbrs1yb3F1jrUbqyv0UfRoHuOGthjTt+L9sDpJaJGugYnT3bS9WBu1NydLVE2kDV++mJGVw==", + "dependencies": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.6.1.tgz", + "integrity": "sha512-VAHOcsqkPrF1k/fA62pv9c75lUWe5bHpcbFX83C3EUPd2FXV10Lfkv6bdWhyZPQy0k8T+9/yikHH3c7ZQeFE5A==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.6.1", + "@aws-sdk/credential-provider-imds": "3.6.1", + "@aws-sdk/credential-provider-ini": "3.6.1", + "@aws-sdk/credential-provider-process": "3.6.1", + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.6.1.tgz", + "integrity": "sha512-d0/TpMoEV4qMYkdpyyjU2Otse9X2jC1DuxWajHOWZYEw8oejMvXYTZ10hNaXZvAcNM9q214rp+k4mkt6gIcI6g==", + "dependencies": { + "@aws-sdk/credential-provider-ini": "3.6.1", + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.186.0.tgz", + "integrity": "sha512-mJ+IZljgXPx99HCmuLgBVDPLepHrwqnEEC/0wigrLCx6uz3SrAWmGZsNbxSEtb2CFSAaczlTHcU/kIl7XZIyeQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz", + "integrity": "sha512-KqzI5eBV72FE+8SuOQAu+r53RXGVHg4AuDJmdXyo7Gc4wS/B9FNElA8jVUjjYgVnf0FSiri+l41VzQ44dCopSA==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-codec": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.186.0.tgz", + "integrity": "sha512-3kLcJ0/H+zxFlhTlE1SGoFpzd/SitwXOsTSlYVwrwdISKRjooGg0BJpm1CSTkvmWnQIUlYijJvS96TAJ+fCPIA==", + "dependencies": { + "@aws-crypto/crc32": "2.0.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/eventstream-codec/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-codec/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.186.0.tgz", + "integrity": "sha512-S8eAxCHyFAGSH7F6GHKU2ckpiwFPwJUQwMzewISLg3wzLQeu6lmduxBxVaV3/SoEbEMsbNmrgw9EXtw3Vt/odQ==", + "dependencies": { + "@aws-sdk/eventstream-codec": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-marshaller": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-marshaller/-/eventstream-marshaller-3.6.1.tgz", + "integrity": "sha512-ZvN3Nvxn2Gul08L9MOSN123LwSO0E1gF/CqmOGZtEWzPnoSX/PWM9mhPPeXubyw2KdlXylOodYYw3EAATk3OmA==", + "deprecated": "The package @aws-sdk/eventstream-marshaller has been renamed to @aws-sdk/eventstream-codec. Please install the renamed package.", + "dependencies": { + "@aws-crypto/crc32": "^1.0.0", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-hex-encoding": "3.6.1", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/eventstream-marshaller/node_modules/@aws-crypto/crc32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-1.2.2.tgz", + "integrity": "sha512-8K0b1672qbv05chSoKpwGZ3fhvVp28Fg3AVHVkEHFl2lTLChO7wD/hTyyo8ING7uc31uZRt7bNra/hA74Td7Tw==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/eventstream-marshaller/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/eventstream-serde-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.6.1.tgz", + "integrity": "sha512-J8B30d+YUfkBtgWRr7+9AfYiPnbG28zjMlFGsJf8Wxr/hDCfff+Z8NzlBYFEbS7McXXhRiIN8DHUvCtolJtWJQ==", + "dependencies": { + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/eventstream-serde-universal": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.6.1.tgz", + "integrity": "sha512-72pCzcT/KeD4gPgRVBSQzEzz4JBim8bNwPwZCGaIYdYAsAI8YMlvp0JNdis3Ov9DFURc87YilWKQlAfw7CDJxA==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-config-resolver/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/eventstream-serde-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.6.1.tgz", + "integrity": "sha512-rjBbJFjCrEcm2NxZctp+eJmyPxKYayG3tQZo8PEAQSViIlK5QexQI3fgqNAeCtK7l/SFAAvnOMRZF6Z3NdUY6A==", + "dependencies": { + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/eventstream-serde-universal": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/eventstream-serde-universal": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.6.1.tgz", + "integrity": "sha512-rpRu97yAGHr9GQLWMzcGICR2PxNu1dHU/MYc9Kb6UgGeZd4fod4o1zjhAJuj98cXn2xwHNFM4wMKua6B4zKrZg==", + "dependencies": { + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-universal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.6.1.tgz", + "integrity": "sha512-N8l6ZbwhINuWG5hsl625lmIQmVjzsqRPmlgh061jm5D90IhsM5/3A3wUxpB/k0av1dmuMRw/m0YtBU5w4LOwvw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/querystring-builder": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/fetch-http-handler/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/hash-blob-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.6.1.tgz", + "integrity": "sha512-9jPaZ/e3F8gf9JZd44DD6MvbYV6bKnn99rkG3GFIINOy9etoxPrLehp2bH2DK/j0ow60RNuwgUjj5qHV/zF67g==", + "dependencies": { + "@aws-sdk/chunked-blob-reader": "3.6.1", + "@aws-sdk/chunked-blob-reader-native": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/hash-blob-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/hash-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.6.1.tgz", + "integrity": "sha512-iKEpzpyaG9PYCnaOGwTIf0lffsF/TpsXrzAfnBlfeOU/3FbgniW2z/yq5xBbtMDtLobtOYC09kUFwDnDvuveSA==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-buffer-from": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/hash-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/hash-stream-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.6.1.tgz", + "integrity": "sha512-ePaWjCItIWxuSxA/UnUM/keQ3IAOsQz3FYSxu0KK8K0e1bKTEUgDIG9oMLBq7jIl9TzJG0HBXuPfMe73QHUNug==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/hash-stream-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/invalid-dependency": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.6.1.tgz", + "integrity": "sha512-d0RLqK7yeDCZJKopnGmGXo2rYkQNE7sGKVmBHQD1j1kKZ9lWwRoJeWqo834JNPZzY5XRvZG5SuIjJ1kFy8LpyQ==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/invalid-dependency/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/is-array-buffer": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.6.1.tgz", + "integrity": "sha512-qm2iDJmCrxlQE2dsFG+TujPe7jw4DF+4RTrsFMhk/e3lOl3MAzQ6Fc2kXtgeUcVrZVFTL8fQvXE1ByYyI6WbCw==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/is-array-buffer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/md5-js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.6.1.tgz", + "integrity": "sha512-lzCqkZF1sbzGFDyq1dI+lR3AmlE33rbC/JhZ5fzw3hJZvfZ6Beq3Su7YwDo65IWEu0zOKYaNywTeOloXP/CkxQ==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/md5-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-apply-body-checksum": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-apply-body-checksum/-/middleware-apply-body-checksum-3.6.1.tgz", + "integrity": "sha512-IncmXR1MPk6aYvmD37It8dP6wVMzaxxzgrkIU2ACkN5UVwA+/0Sr3ZNd9dNwjpyoH1AwpL9BetnlJaWtT6K5ew==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-apply-body-checksum/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.6.1.tgz", + "integrity": "sha512-Frcqn2RQDNHy+e2Q9hv3ejT3mQWtGlfZESbXEF6toR4M0R8MmEVqIB/ohI6VKBj11lRmGwvpPsR6zz+PJ8HS7A==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-arn-parser": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-content-length": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.6.1.tgz", + "integrity": "sha512-QRcocG9f5YjYzbjs2HjKla6ZIjvx8Y8tm1ZSFOPey81m18CLif1O7M3AtJXvxn+0zeSck9StFdhz5gfjVNYtDg==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-content-length/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.186.0.tgz", + "integrity": "sha512-7yjFiitTGgfKL6cHK3u3HYFnld26IW5aUAFuEd6ocR/FjliysfBd8g0g1bw3bRfIMgCDD8OIOkXK8iCk2iYGWQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.6.1.tgz", + "integrity": "sha512-vvMOqVYU3uvdJzg/X6NHewZUEBZhSqND1IEcdahLb6RmvDhsS39iS97VZmEFsjj/UFGoePtYjrrdEgRG9Rm1kQ==", + "dependencies": { + "@aws-sdk/middleware-header-default": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-header-default": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-header-default/-/middleware-header-default-3.6.1.tgz", + "integrity": "sha512-YD137iIctXVH8Eut0WOBalvvA+uL0jM0UXZ9N2oKrC8kPQPpqjK9lYGFKZQFsl/XlQHAjJi+gCAFrYsBntRWJQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-header-default/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.6.1.tgz", + "integrity": "sha512-nwq8R2fGBRZQE0Fr/jiOgqfppfiTQCUoD8hyX3qSS7Qc2uqpsDOt2TnnoZl56mpQYkF/344IvMAkp+ew6wR73w==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.6.1.tgz", + "integrity": "sha512-nFisTc0O5D+4I+sRxiiLPasC/I4NDc3s+hgbPPt/b3uAdrujJjhwFBOSaTx8qQvz/xJPAA8pUA/bfWIyeZKi/w==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.6.1.tgz", + "integrity": "sha512-zxaSLpwKlja7JvK20UsDTxPqBZUo3rbDA1uv3VWwpxzOrEWSlVZYx/KLuyGWGkx9V71ZEkf6oOWWJIstS0wyQQ==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.186.0.tgz", + "integrity": "sha512-Za7k26Kovb4LuV5tmC6wcVILDCt0kwztwSlB991xk4vwNTja8kKxSt53WsYG8Q2wSaW6UOIbSoguZVyxbIY07Q==", + "dependencies": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-retry": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.6.1.tgz", + "integrity": "sha512-WHeo4d2jsXxBP+cec2SeLb0btYXwYXuE56WLmNt0RvJYmiBzytUeGJeRa9HuwV574kgigAuHGCeHlPO36G4Y0Q==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/service-error-classification": "3.6.1", + "@aws-sdk/types": "3.6.1", + "react-native-get-random-values": "^1.4.0", + "tslib": "^1.8.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-retry/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-retry/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.6.1.tgz", + "integrity": "sha512-HEA9kynNTsOSIIz8p5GEEAH03pnn+SSohwPl80sGqkmI1yl1tzjqgYZRii0e6acJTh4j9655XFzSx36hYPeB2w==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-arn-parser": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.186.0.tgz", + "integrity": "sha512-GDcK0O8rjtnd+XRGnxzheq1V2jk4Sj4HtjrxW/ROyhzLOAOyyxutBt+/zOpDD6Gba3qxc69wE+Cf/qngOkEkDw==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/middleware-serde": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.6.1.tgz", + "integrity": "sha512-EdQCFZRERfP3uDuWcPNuaa2WUR3qL1WFDXafhcx+7ywQxagdYqBUWKFJlLYi6njbkOKXFM+eHBzoXGF0OV3MJA==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-serde/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.6.1.tgz", + "integrity": "sha512-1woKq+1sU3eausdl8BNdAMRZMkSYuy4mxhLsF0/qAUuLwo1eJLLUCOQp477tICawgu4O4q2OAyUHk7wMqYnQCg==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/signature-v4": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.6.1.tgz", + "integrity": "sha512-svuH6s91uKUTORt51msiL/ZBjtYSW32c3uVoWxludd/PEf6zO5wCmUEsKoyVwa88L7rrCq+81UBv5A8S5kc3Cw==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-stack": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.6.1.tgz", + "integrity": "sha512-EPsIxMi8LtCt7YwTFpWGlVGYJc0q4kwFbOssY02qfqdCnyqi2y5wo089dH7OdxUooQ0D7CPsXM1zTTuzvm+9Fw==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-stack/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.6.1.tgz", + "integrity": "sha512-YvXvwllNDVvxQ30vIqLsx+P6jjnfFEQUmhlv64n98gOme6h2BqoyQDcC3yHRGctuxRZEsR7W/H1ASTKC+iabbQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/node-config-provider": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.6.1.tgz", + "integrity": "sha512-x2Z7lm0ZhHYqMybvkaI5hDKfBkaLaXhTDfgrLl9TmBZ3QHO4fIHgeL82VZ90Paol+OS+jdq2AheLmzbSxv3HrA==", + "dependencies": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/node-http-handler": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.6.1.tgz", + "integrity": "sha512-6XSaoqbm9ZF6T4UdBCcs/Gn2XclwBotkdjj46AxO+9vRAgZDP+lH/8WwZsvfqJhhRhS0qxWrks98WGJwmaTG8g==", + "dependencies": { + "@aws-sdk/abort-controller": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/querystring-builder": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/node-http-handler/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/property-provider": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.6.1.tgz", + "integrity": "sha512-2gR2DzDySXKFoj9iXLm1TZBVSvFIikEPJsbRmAZx5RBY+tp1IXWqZM6PESjaLdLg/ZtR0QhW2ZcRn0fyq2JfnQ==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/property-provider/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/protocol-http": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.6.1.tgz", + "integrity": "sha512-WkQz7ncVYTLvCidDfXWouDzqxgSNPZDz3Bql+7VhZeITnzAEcr4hNMyEqMAVYBVugGmkG2W6YiUqNNs1goOcDA==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/querystring-builder": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.6.1.tgz", + "integrity": "sha512-ESe255Yl6vB1AMNqaGSQow3TBYYnpw0AFjE40q2VyiNrkbaqKmW2EzjeCy3wEmB1IfJDHy3O12ZOMUMOnjFT8g==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-uri-escape": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/querystring-builder/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/querystring-parser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.6.1.tgz", + "integrity": "sha512-hh6dhqamKrWWaDSuO2YULci0RGwJWygoy8hpCRxs/FpzzHIcbm6Cl6Jhrn5eKBzOBv+PhCcYwbfad0kIZZovcQ==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/querystring-parser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.6.1.tgz", + "integrity": "sha512-OI7UHCKBwuiO/RmHHewBKnL2NYqdilXRmpX67TJ4tTszIrWP2+vpm3lIfrx/BM8nf8nKTzgkO98uFhoJsEhmTg==", + "dependencies": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/signature-v4": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-create-request": "3.6.1", + "@aws-sdk/util-format-url": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/service-error-classification": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.6.1.tgz", + "integrity": "sha512-kZ7ZhbrN1f+vrSRkTJvXsu7BlOyZgym058nPA745+1RZ1Rtv4Ax8oknf2RvJyj/1qRUi8LBaAREjzQ3C8tmLBA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.6.1.tgz", + "integrity": "sha512-BnLHtsNLOoow6rPV+QVi6jnovU5g1m0YzoUG0BQYZ1ALyVlWVr0VvlUX30gMDfdYoPMp+DHvF8GXdMuGINq6kQ==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/shared-ini-file-loader/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/signature-v4": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.6.1.tgz", + "integrity": "sha512-EAR0qGVL4AgzodZv4t+BSuBfyOXhTNxDxom50IFI1MqidR9vI6avNZKcPHhgXbm7XVcsDGThZKbzQ2q7MZ2NTA==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-hex-encoding": "3.6.1", + "@aws-sdk/util-uri-escape": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/smithy-client": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.6.1.tgz", + "integrity": "sha512-AVpRK4/iUxNeDdAm8UqP0ZgtgJMQeWcagTylijwelhWXyXzHUReY1sgILsWcdWnoy6gq845W7K2VBhBleni8+w==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/types": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.6.1.tgz", + "integrity": "sha512-4Dx3eRTrUHLxhFdLJL8zdNGzVsJfAxtxPYYGmIddUkO2Gj3WA1TGjdfG4XN/ClI6e1XonCHafQX3UYO/mgnH3g==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/url-parser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.6.1.tgz", + "integrity": "sha512-pWFIePDx0PMCleQRsQDWoDl17YiijOLj0ZobN39rQt+wv5PhLSZDz9PgJsqS48nZ6hqsKgipRcjiBMhn5NtFcQ==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/url-parser-native": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser-native/-/url-parser-native-3.6.1.tgz", + "integrity": "sha512-3O+ktsrJoE8YQCho9L41YXO8EWILXrSeES7amUaV3mgIV5w4S3SB/r4RkmylpqRpQF7Ry8LFiAnMqH1wa4WBPA==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0", + "url": "^0.11.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/url-parser-native/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/url-parser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.6.1.tgz", + "integrity": "sha512-NFdYeuhaSrgnBG6Pt3zHNU7QwvhHq6sKUTWZShUayLMJYYbQr6IjmYVlPST4c84b+lyDoK68y/Zga621VfIdBg==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-base64-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.6.1.tgz", + "integrity": "sha512-+DHAIgt0AFARDVC7J0Z9FkSmJhBMlkYdOPeAAgO0WaQoKj7rtsLQJ7P3v3aS1paKN5/sk5xNY7ziVB6uHtOvHA==", + "deprecated": "The package @aws-sdk/util-base64-browser has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/util-base64-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-base64-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.6.1.tgz", + "integrity": "sha512-oiqzpsvtTSS92+cL3ykhGd7t3qBJKeHvrgOwUyEf1wFWHQ2DPJR+dIMy5rMFRXWLKCl3w7IddY2rJCkLYMjaqQ==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-base64-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.6.1.tgz", + "integrity": "sha512-IdWwE3rm/CFDk2F+IwTZOFTnnNW5SB8y1lWiQ54cfc7y03hO6jmXNnpZGZ5goHhT+vf1oheNQt1J47m0pM/Irw==", + "dependencies": { + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/util-body-length-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-body-length-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.6.1.tgz", + "integrity": "sha512-CUG3gc18bSOsqViQhB3M4AlLpAWV47RE6yWJ6rLD0J6/rSuzbwbjzxM39q0YTAVuSo/ivdbij+G9c3QCirC+QQ==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-body-length-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-buffer-from": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.6.1.tgz", + "integrity": "sha512-OGUh2B5NY4h7iRabqeZ+EgsrzE1LUmNFzMyhoZv0tO4NExyfQjxIYXLQQvydeOq9DJUbCw+yrRZrj8vXNDQG+g==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-buffer-from/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.186.0.tgz", + "integrity": "sha512-71Qwu/PN02XsRLApyxG0EUy/NxWh/CXxtl2C7qY14t+KTiRapwbDkdJ1cMsqYqghYP4BwJoj1M+EFMQSSlkZQQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-create-request": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-create-request/-/util-create-request-3.6.1.tgz", + "integrity": "sha512-jR1U8WpwXl+xZ9ThS42Jr5MXuegQ7QioHsZjQn3V5pbm8CXTkBF0B2BcULQu/2G1XtHOJb8qUZQlk/REoaORfQ==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-create-request/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-defaults-mode-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.186.0.tgz", + "integrity": "sha512-U8GOfIdQ0dZ7RRVpPynGteAHx4URtEh+JfWHHVfS6xLPthPHWTbyRhkQX++K/F8Jk+T5U8Anrrqlea4TlcO2DA==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-browser/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-browser/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.186.0.tgz", + "integrity": "sha512-N6O5bpwCiE4z8y7SPHd7KYlszmNOYREa+mMgtOIXRU3VXSEHVKVWTZsHKvNTTHpW0qMqtgIvjvXCo3vsch5l3A==", + "dependencies": { + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "dependencies": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "dependencies": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "dependencies": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.6.1.tgz", + "integrity": "sha512-FvhcXcqLyJ0j0WdlmGs7PtjCCv8NaY4zBuXYO2iwAmqoy2SIZXQL63uAvmilqWj25q47ASAsUwSFLReCCfMklQ==", + "dependencies": { + "@aws-sdk/querystring-builder": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.6.1.tgz", + "integrity": "sha512-pzsGOHtU2eGca4NJgFg94lLaeXDOg8pcS9sVt4f9LmtUGbrqRveeyBv0XlkHeZW2n0IZBssPHipVYQFlk7iaRA==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-hex-encoding/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-middleware": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.186.0.tgz", + "integrity": "sha512-fddwDgXtnHyL9mEZ4s1tBBsKnVQHqTUmFbZKUUKPrg9CxOh0Y/zZxEa5Olg/8dS/LzM1tvg0ATkcyd4/kEHIhg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-uri-escape": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.6.1.tgz", + "integrity": "sha512-tgABiT71r0ScRJZ1pMX0xO0QPMMiISCtumph50IU5VDyZWYgeIxqkMhIcrL1lX0QbNCMgX0n6rZxGrrbjDNavA==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-uri-escape/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.6.1.tgz", + "integrity": "sha512-KhJ4VED4QpuBVPXoTjb5LqspX1xHWJTuL8hbPrKfxj+cAaRRW2CNEe7PPy2CfuHtPzP3dU3urtGTachbwNb0jg==", + "dependencies": { + "@aws-sdk/types": "3.6.1", + "bowser": "^2.11.0", + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.6.1.tgz", + "integrity": "sha512-PWwL5EDRwhkXX40m5jjgttlBmLA7vDhHBen1Jcle0RPIDFRVPSE7GgvLF3y4r3SNH0WD6hxqadT50bHQynXW6w==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.6.1.tgz", + "integrity": "sha512-gZPySY6JU5gswnw3nGOEHl3tYE7vPKvtXGYoS2NRabfDKRejFvu+4/nNW6SSpoOxk6LSXsrWB39NO51k+G4PVA==", + "dependencies": { + "tslib": "^1.8.0" + } + }, + "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-utf8-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.6.1.tgz", + "integrity": "sha512-4s0vYfMUn74XLn13rUUhNsmuPMh0j1d4rF58wXtjlVUU78THxonnN8mbCLC48fI3fKDHTmDDkeEqy7+IWP9VyA==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8-node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/util-waiter": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.6.1.tgz", + "integrity": "sha512-CQMRteoxW1XZSzPBVrTsOTnfzsEGs8N/xZ8BuBnXLBjoIQmRKVxIH9lgphm1ohCtVHoSWf28XH/KoOPFULQ4Tg==", + "dependencies": { + "@aws-sdk/abort-controller": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-waiter/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.6.1.tgz", + "integrity": "sha512-+HOCH4a0XO+I09okd0xdVP5Q5c9ZsEsDvnogiOcBQxoMivWhPUCo9pjXP3buCvVKP2oDHXQplBKSjGHvGaKFdg==", + "dependencies": { + "tslib": "^1.8.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@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==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "dependencies": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dependencies": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "dependencies": { + "@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.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dependencies": { + "@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.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "peer": true, + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", + "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-default-from": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", + "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@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.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "peer": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "peer": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "peer": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", + "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "peer": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "peer": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "peer": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "peer": true, + "dependencies": { + "regenerator-runtime": "^0.13.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@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.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@choojs/findup": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", + "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", + "dependencies": { + "commander": "^2.15.1" + }, + "bin": { + "findup": "bin/findup.js" + } + }, + "node_modules/@choojs/findup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/vue": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@cypress/vue/-/vue-4.2.2.tgz", + "integrity": "sha512-M5u8w3OwEwvhYo43tBwduYn3hra5m5yIIAak8mFt+mt58yCmkW57q6mkNkZNZNtVei2eMHIcCfAWLoZmpqg4fg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "@cypress/webpack-dev-server": "*", + "cypress": ">=7.0.0", + "vue": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@cypress/webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@cypress/webpack-dev-server": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cypress/webpack-dev-server/-/webpack-dev-server-2.5.0.tgz", + "integrity": "sha512-IWd6nFiGTMXh89Si6KC3Snq9FnV4raijLt4jDHYvRt4S7y6IoG8Uiw37UpFfzbUpwSFl8FVbWr8VosIotEj1Pw==", + "dev": true, + "dependencies": { + "find-up": "6.3.0", + "fs-extra": "9.1.0", + "html-webpack-plugin-4": "npm:html-webpack-plugin@^4", + "html-webpack-plugin-5": "npm:html-webpack-plugin@^5", + "local-pkg": "0.4.1", + "speed-measure-webpack-plugin": "1.4.2", + "tslib": "^2.3.1", + "webpack-dev-server": "^4.7.4", + "webpack-merge": "^5.4.0" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/local-pkg": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.1.tgz", + "integrity": "sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", + "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.14.tgz", + "integrity": "sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz", + "integrity": "sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@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==", + "dev": true + }, + "node_modules/@interactjs/actions": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/actions/-/actions-1.10.17.tgz", + "integrity": "sha512-wyB1ZqpaZy5gmz6VDqK9KWh98xKnFgL7VyLvxHODFi9V0IYX4HJAAOBlhtfze0D1R1f1cY+gqPDK+dLaHMlE+w==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/auto-scroll": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/auto-scroll/-/auto-scroll-1.10.17.tgz", + "integrity": "sha512-IQcW7N3xOaoL8RnAGOGMk0Y2gue7L4S3BT6Id4VBBu8so163DtLiZVW6jXu9rKVntzbluaAeqNZlfAVyu3kIWg==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/auto-start": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/auto-start/-/auto-start-1.10.17.tgz", + "integrity": "sha512-qYVxhAbYnwxjD/NLEegUoAST7WASJ4VmWNjsyWRx/js5Op+I4E2zteARIeZGgrutcGIXMCcQzhCMgE3PjOpbpw==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/core": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.17.tgz", + "integrity": "sha512-rL9w+83HDRuXub8Ezqs+97CYLl/ne7bLT/sAeduUWaxYhsW9iOqBoob9JnkkCZOaOsYizWI1EWy0+fNc5ibtLQ==", + "peerDependencies": { + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/dev-tools": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/dev-tools/-/dev-tools-1.10.17.tgz", + "integrity": "sha512-Oi9nEw3FfSwkNmW+V0WwdHqvzEkVHc24mH1v5EjRn60sqgrGLK9nTQ+NSuqcnUY8GxC3TkyuxnsOodxiadIRmA==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/modifiers": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/inertia": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/inertia/-/inertia-1.10.17.tgz", + "integrity": "sha512-41vbYUjZIDCKt2/yhmjPrEW5+0uoL/hldFsll9pkvnLhmm12Xk0VXOlmR2zXKAmsTK3fJlKMyBYUX92qHLkyVQ==", + "dependencies": { + "@interactjs/offset": "1.10.17" + }, + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/modifiers": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/interact": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/interact/-/interact-1.10.17.tgz", + "integrity": "sha512-NyKsf8EFudvdahBjPz1Gt5QnynVwa/2LUfBc2/w8QOnOBiyzUm0HLloJSaB8a50QbQkSWN243/Lgpd8GTMQvuQ==", + "dependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/types": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/interactjs": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/interactjs/-/interactjs-1.10.17.tgz", + "integrity": "sha512-hHmiukARbZhiM12zNKx0yQlFVl4C+NMeYNAYh6Mf9U3ZziQ47C+JEW8Gr7Zr/MxfNZyPu5nLKCpVQjh/JvBO9g==", + "dependencies": { + "@interactjs/actions": "1.10.17", + "@interactjs/auto-scroll": "1.10.17", + "@interactjs/auto-start": "1.10.17", + "@interactjs/core": "1.10.17", + "@interactjs/dev-tools": "1.10.17", + "@interactjs/inertia": "1.10.17", + "@interactjs/interact": "1.10.17", + "@interactjs/modifiers": "1.10.17", + "@interactjs/offset": "1.10.17", + "@interactjs/pointer-events": "1.10.17", + "@interactjs/reflow": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/modifiers": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/modifiers/-/modifiers-1.10.17.tgz", + "integrity": "sha512-Dxw8kv9VBIxnhNvQncR6CKAGMzKXczLvuAUIdSPFYtyerX/XiDulJUqhR+jVKNp/WjF1DvdBxWo0kGGLbM84LQ==", + "dependencies": { + "@interactjs/snappers": "1.10.17" + }, + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/offset": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/offset/-/offset-1.10.17.tgz", + "integrity": "sha512-wWBnIQWgLrmJNTBbd/FdxHxAJjiXl/5ND8Jbw2DuP9gIGDxhFSdEt62Fgqimn9ICb8v8ycvSLObEmcvJF/8hQQ==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/pointer-events": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/pointer-events/-/pointer-events-1.10.17.tgz", + "integrity": "sha512-VsfluouEKb8QRGyH6jQATCW+QdAd/3dkENS7rj2m+EcVUhz2Ob5mpMRopjALi4pwltMowqTfuJ4LtwMSX2G29A==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/reflow": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/reflow/-/reflow-1.10.17.tgz", + "integrity": "sha512-ncpWP5k93FRQptEhjzPZsbuRRajd4rkW17lDavCrEjrDi/LHnYekWGqZTaFzfJ80n1x8xUm9ujDjxCTylNqEIA==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/core": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/snappers": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/snappers/-/snappers-1.10.17.tgz", + "integrity": "sha512-m753DGsNOts797e3zDT6wqELoc+BlpIC1w+TyMyISRxU6n1RlS8Q6LHBGgwAgV79LHLaahv/a5haFF9H1VG0FQ==", + "optionalDependencies": { + "@interactjs/interact": "1.10.17" + }, + "peerDependencies": { + "@interactjs/utils": "1.10.17" + } + }, + "node_modules/@interactjs/types": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/types/-/types-1.10.17.tgz", + "integrity": "sha512-X2JpoM7xUw0p9Me0tMaI0HNfcF/Hd07ZZlzpnpEMpGerUZOLoyeThrV9P+CrBHxZrluWJrigJbcdqXliFd0YMA==" + }, + "node_modules/@interactjs/utils": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/utils/-/utils-1.10.17.tgz", + "integrity": "sha512-sZAW08CkqgvqRjUIaLRjScjObcCzN9D75yekLA21EClYAZIhi4A+GEt2z/WqOCOksTaEPLYmQyhkpXcboc0LhQ==" + }, + "node_modules/@intlify/core-base": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz", + "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==", + "dependencies": { + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz", + "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==", + "dependencies": { + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz", + "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==", + "dependencies": { + "@intlify/shared": "9.2.2", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/shared": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", + "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz", + "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz", + "integrity": "sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==", + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@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==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@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==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@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==", + "dev": true + }, + "node_modules/@lukeed/csprng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", + "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lukeed/uuid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", + "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/geojson-rewind/node_modules/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/geojson-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", + "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", + "peerDependencies": { + "mapbox-gl": ">=0.32.1 <2.0.0" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", + "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@openreplay/tracker": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@openreplay/tracker/-/tracker-4.1.7.tgz", + "integrity": "sha512-szOjfJgzb0mQ1jcCX4Jon39b6wpoDdSGylukoim8ILqY8rLI7UkhuwjO7HD+p2uMOvM+QWVlG2ha6QWYobJVuw==", + "dependencies": { + "error-stack-parser": "^2.0.6" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/@plotly/d3": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.0.tgz", + "integrity": "sha512-L10iHgzvw3uSic/nQpYehlNzxUQvImwms5U7S95pJAEhrllzkrdQNy1Mc5DW9ab881Yr4fh300gJztKXWZDfkQ==" + }, + "node_modules/@plotly/d3-sankey": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz", + "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==", + "dependencies": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + } + }, + "node_modules/@plotly/d3-sankey-circular": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz", + "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==", + "dependencies": { + "d3-array": "^1.2.1", + "d3-collection": "^1.0.4", + "d3-shape": "^1.2.0", + "elementary-circuits-directed-graph": "^1.0.4" + } + }, + "node_modules/@plotly/point-cluster": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz", + "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==", + "dependencies": { + "array-bounds": "^1.0.1", + "binary-search-bounds": "^2.0.4", + "clamp": "^1.0.1", + "defined": "^1.0.0", + "dtype": "^2.0.0", + "flatten-vertex-data": "^1.0.2", + "is-obj": "^1.0.1", + "math-log2": "^1.0.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@quasar/extras": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.15.6.tgz", + "integrity": "sha512-lG3wrcz47c86N/j1ULZugmyVfwpmnsJpjtSWh+LhaFfe0g1kTMdAnxkWGKsa3ouZ4QBcnkrNan0kYSnKc3MiBg==", + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/@quasar/vite-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@quasar/vite-plugin/-/vite-plugin-1.2.3.tgz", + "integrity": "sha512-ErSyY3cHz40GBIQUmqSI8OzzshJM5pLq33Yq3NEtYdWYh1NuIc4C766xkatUdxvhX9sLNnQQZax2ysJ5u7kUJA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + }, + "peerDependencies": { + "@vitejs/plugin-vue": "^2.0.0 || ^3.0.0", + "quasar": "^2.8.0", + "vite": "^2.0.0 || ^3.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@react-native-community/cli": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-9.3.2.tgz", + "integrity": "sha512-IAW4X0vmX/xozNpp/JVZaX7MrC85KV0OP2DF4o7lNGOfpUhzJAEWqTfkxFYS+VsRjZHDve4wSTiGIuXwE7FG1w==", + "peer": true, + "dependencies": { + "@react-native-community/cli-clean": "^9.2.1", + "@react-native-community/cli-config": "^9.2.1", + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-doctor": "^9.3.0", + "@react-native-community/cli-hermes": "^9.3.1", + "@react-native-community/cli-plugin-metro": "^9.2.1", + "@react-native-community/cli-server-api": "^9.2.1", + "@react-native-community/cli-tools": "^9.2.1", + "@react-native-community/cli-types": "^9.1.0", + "chalk": "^4.1.2", + "commander": "^9.4.0", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.0", + "semver": "^6.3.0" + }, + "bin": { + "react-native": "build/bin.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@react-native-community/cli-clean": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-9.2.1.tgz", + "integrity": "sha512-dyNWFrqRe31UEvNO+OFWmQ4hmqA07bR9Ief/6NnGwx67IO9q83D5PEAf/o96ML6jhSbDwCmpPKhPwwBbsyM3mQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "prompts": "^2.4.0" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli-clean/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/@react-native-community/cli-config": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-9.2.1.tgz", + "integrity": "sha512-gHJlBBXUgDN9vrr3aWkRqnYrPXZLztBDQoY97Mm5Yo6MidsEpYo2JIP6FH4N/N2p1TdjxJL4EFtdd/mBpiR2MQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "^9.2.1", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "glob": "^7.1.3", + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-9.0.0.tgz", + "integrity": "sha512-7hH05ZwU9Tp0yS6xJW0bqcZPVt0YCK7gwj7gnRu1jDNN2kughf6Lg0Ys29rAvtZ7VO1PK5c1O+zs7yFnylQDUA==", + "peer": true, + "dependencies": { + "serve-static": "^1.13.1" + } + }, + "node_modules/@react-native-community/cli-doctor": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-9.3.0.tgz", + "integrity": "sha512-/fiuG2eDGC2/OrXMOWI5ifq4X1gdYTQhvW2m0TT5Lk1LuFiZsbTCp1lR+XILKekuTvmYNjEGdVpeDpdIWlXdEA==", + "peer": true, + "dependencies": { + "@react-native-community/cli-config": "^9.2.1", + "@react-native-community/cli-platform-ios": "^9.3.0", + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "prompts": "^2.4.0", + "semver": "^6.3.0", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/@react-native-community/cli-hermes": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-9.3.1.tgz", + "integrity": "sha512-Mq4PK8m5YqIdaVq5IdRfp4qK09aVO+aiCtd6vjzjNUgk1+1X5cgUqV6L65h4N+TFJYJHcp2AnB+ik1FAYXvYPQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-platform-android": "^9.3.1", + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-9.3.1.tgz", + "integrity": "sha512-m0bQ6Twewl7OEZoVf79I2GZmsDqh+Gh0bxfxWgwxobsKDxLx8/RNItAo1lVtTCgzuCR75cX4EEO8idIF9jYhew==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "logkitty": "^0.7.1", + "slash": "^3.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/@react-native-community/cli-platform-ios": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.3.0.tgz", + "integrity": "sha512-nihTX53BhF2Q8p4B67oG3RGe1XwggoGBrMb6vXdcu2aN0WeXJOXdBLgR900DAA1O8g7oy1Sudu6we+JsVTKnjw==", + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "ora": "^5.4.1" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/@react-native-community/cli-plugin-metro": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.2.1.tgz", + "integrity": "sha512-byBGBH6jDfUvcHGFA45W/sDwMlliv7flJ8Ns9foCh3VsIeYYPoDjjK7SawE9cPqRdMAD4SY7EVwqJnOtRbwLiQ==", + "peer": true, + "dependencies": { + "@react-native-community/cli-server-api": "^9.2.1", + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "metro": "0.72.3", + "metro-config": "0.72.3", + "metro-core": "0.72.3", + "metro-react-native-babel-transformer": "0.72.3", + "metro-resolver": "0.72.3", + "metro-runtime": "0.72.3", + "readline": "^1.3.0" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-server-api": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-9.2.1.tgz", + "integrity": "sha512-EI+9MUxEbWBQhWw2PkhejXfkcRqPl+58+whlXJvKHiiUd7oVbewFs0uLW0yZffUutt4FGx6Uh88JWEgwOzAdkw==", + "peer": true, + "dependencies": { + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-tools": "^9.2.1", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.0", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^7.5.1" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@react-native-community/cli-tools": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-9.2.1.tgz", + "integrity": "sha512-bHmL/wrKmBphz25eMtoJQgwwmeCylbPxqFJnFSbkqJPXQz3ManQ6q/gVVMqFyz7D3v+riaus/VXz3sEDa97uiQ==", + "peer": true, + "dependencies": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^6.3.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-types": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-9.1.0.tgz", + "integrity": "sha512-KDybF9XHvafLEILsbiKwz5Iobd+gxRaPyn4zSaAerBxedug4er5VUWa8Szy+2GeYKZzMh/gsb1o9lCToUwdT/g==", + "peer": true, + "dependencies": { + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@react-native-community/cli/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/@react-native-community/cli/node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@react-native-community/cli/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@react-native-community/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@react-native-community/cli/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/@react-native/assets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", + "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==", + "peer": true + }, + "node_modules/@react-native/normalize-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", + "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", + "peer": true + }, + "node_modules/@react-native/polyfills": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", + "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==", + "peer": true + }, + "node_modules/@rollup/plugin-inject": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", + "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "estree-walker": "^2.0.1", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/@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==", + "dev": true + }, + "node_modules/@segment/analytics-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.1.2.tgz", + "integrity": "sha512-F20iWeARLK1xE82RjzVaTl0g7sdHsKTyeXPiTy4jc/kx/ttvQ3WjyCqUjFgbviDJeN8VTsKBVIY/4yPq57efKg==", + "dependencies": { + "dset": "^3.1.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@segment/analytics-next": { + "version": "1.46.3", + "resolved": "https://registry.npmjs.org/@segment/analytics-next/-/analytics-next-1.46.3.tgz", + "integrity": "sha512-JGgaJjNqu3bnwjM9/iB5X7W2iCYwiJZFF3FKSp/Al1tHUtm9wsne2lr7YniTYFjedQt+YYR0bj9aoHPfzGS/oA==", + "dependencies": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-core": "1.1.2", + "@segment/analytics.js-video-plugins": "^0.2.1", + "@segment/facade": "^3.4.9", + "@segment/tsub": "1.0.1", + "dset": "^3.1.2", + "js-cookie": "3.0.1", + "node-fetch": "^2.6.7", + "spark-md5": "^3.0.1", + "tslib": "^2.4.0", + "unfetch": "^4.1.0" + } + }, + "node_modules/@segment/analytics.js-video-plugins": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@segment/analytics.js-video-plugins/-/analytics.js-video-plugins-0.2.1.tgz", + "integrity": "sha512-lZwCyEXT4aaHBLNK433okEKdxGAuyrVmop4BpQqQSJuRz0DglPZgd9B/XjiiWs1UyOankg2aNYMN3VcS8t4eSQ==", + "dependencies": { + "unfetch": "^3.1.1" + } + }, + "node_modules/@segment/analytics.js-video-plugins/node_modules/unfetch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.2.tgz", + "integrity": "sha512-L0qrK7ZeAudGiKYw6nzFjnJ2D5WHblUBwmHIqtPS6oKUd+Hcpk7/hKsSmcHsTlpd1TbTNsiRBUKRq3bHLNIqIw==" + }, + "node_modules/@segment/facade": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/@segment/facade/-/facade-3.4.9.tgz", + "integrity": "sha512-0RTLB0g4HiJASc6pTD2/Tru+Qz+VPGL1W+/EvkBGhY6WYk00cZhTjLsMJ8X5BO6iPqLb3vsxtfjVM/RREG5oQQ==", + "dependencies": { + "@segment/isodate-traverse": "^1.1.1", + "inherits": "^2.0.4", + "new-date": "^1.0.3", + "obj-case": "0.2.1" + } + }, + "node_modules/@segment/isodate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@segment/isodate/-/isodate-1.0.3.tgz", + "integrity": "sha512-BtanDuvJqnACFkeeYje7pWULVv8RgZaqKHWwGFnL/g/TH/CcZjkIVTfGDp/MAxmilYHUkrX70SqwnYSTNEaN7A==" + }, + "node_modules/@segment/isodate-traverse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@segment/isodate-traverse/-/isodate-traverse-1.1.1.tgz", + "integrity": "sha512-+G6e1SgAUkcq0EDMi+SRLfT48TNlLPF3QnSgFGVs0V9F3o3fq/woQ2rHFlW20W0yy5NnCUH0QGU3Am2rZy/E3w==", + "dependencies": { + "@segment/isodate": "^1.0.3" + } + }, + "node_modules/@segment/tsub": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@segment/tsub/-/tsub-1.0.1.tgz", + "integrity": "sha512-rUpvlj/rRfOolk5rjwyrsbl0qzGLsaYgFNEiOSrwrWDryDPq1ZGdo+3Eb+E8+EC0yZOAO4F1DjJfLtaSifpx7w==", + "dependencies": { + "@stdlib/math-base-special-ldexp": "^0.0.5", + "dlv": "^1.1.3", + "dset": "^3.1.1", + "tiny-hashes": "^1.0.1" + }, + "bin": { + "tsub": "dist/index.js" + } + }, + "node_modules/@sentry/browser": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.21.1.tgz", + "integrity": "sha512-cS2Jz2+fs9+4pJqLJPtYqGyY97ywJDWAWIR1Yla3hs1QQuH6m0Nz3ojZD1gE2eKH9mHwkGbnNAh+hHcrYrfGzw==", + "dependencies": { + "@sentry/core": "7.21.1", + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/core": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.21.1.tgz", + "integrity": "sha512-Og5wEEsy24fNvT/T7IKjcV4EvVK5ryY2kxbJzKY6GU2eX+i+aBl+n/vp7U0Es351C/AlTkS+0NOUsp2TQQFxZA==", + "dependencies": { + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/tracing": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.21.1.tgz", + "integrity": "sha512-b1BTPsRaNQpohzegoz59KGuBl+To651vEq0vMS4tCzSyIdxkYso3JCrjDdEqW/2MliQYANNVrUai2bmwmU9h1g==", + "dependencies": { + "@sentry/core": "7.21.1", + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/types": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.21.1.tgz", + "integrity": "sha512-3/IKnd52Ol21amQvI+kz+WB76s8/LR5YvFJzMgIoI2S8d82smIr253zGijRXxHPEif8kMLX4Yt+36VzrLxg6+A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.21.1.tgz", + "integrity": "sha512-F0W0AAi8tgtTx6ApZRI2S9HbXEA9ENX1phTZgdNNWcMFm1BNbc21XEwLqwXBNjub5nlA6CE8xnjXRgdZKx4kzQ==", + "dependencies": { + "@sentry/types": "7.21.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/vue": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.21.1.tgz", + "integrity": "sha512-dgXhkG9W2jkOj0/nNHdrHm97rJPvPs3BWA6VoG1xPbyAkdcA8XNLxEpHlrKgo4ZisJDXlHWuDFELPbbhqYf+RQ==", + "dependencies": { + "@sentry/browser": "7.21.1", + "@sentry/core": "7.21.1", + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "vue": "2.x || 3.x" + } + }, + "node_modules/@sentry/vue/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@stdlib/array-float32": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-float32/-/array-float32-0.0.6.tgz", + "integrity": "sha512-QgKT5UaE92Rv7cxfn7wBKZAlwFFHPla8eXsMFsTGt5BiL4yUy36lwinPUh4hzybZ11rw1vifS3VAPuk6JP413Q==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-float32array-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/array-float64": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-float64/-/array-float64-0.0.6.tgz", + "integrity": "sha512-oE8y4a84LyBF1goX5//sU1mOjet8gLI0/6wucZcjg+j/yMmNV1xFu84Az9GOGmFSE6Ze6lirGOhfBeEWNNNaJg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-float64array-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/array-uint16": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-uint16/-/array-uint16-0.0.6.tgz", + "integrity": "sha512-/A8Tr0CqJ4XScIDRYQawosko8ha1Uy+50wsTgJhjUtXDpPRp7aUjmxvYkbe7Rm+ImYYbDQVix/uCiPAFQ8ed4Q==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-uint16array-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/array-uint32": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-uint32/-/array-uint32-0.0.6.tgz", + "integrity": "sha512-2hFPK1Fg7obYPZWlGDjW9keiIB6lXaM9dKmJubg/ergLQCsJQJZpYsG6mMAfTJi4NT1UF4jTmgvyKD+yf0D9cA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-uint32array-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/array-uint8": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/array-uint8/-/array-uint8-0.0.7.tgz", + "integrity": "sha512-qYJQQfGKIcky6TzHFIGczZYTuVlut7oO+V8qUBs7BJC9TwikVnnOmb3hY3jToY4xaoi5p9OvgdJKPInhyIhzFg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-uint8array-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-float32array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-float32array-support/-/assert-has-float32array-support-0.0.8.tgz", + "integrity": "sha512-Yrg7K6rBqwCzDWZ5bN0VWLS5dNUWcoSfUeU49vTERdUmZID06J069CDc07UUl8vfQWhFgBWGocH3rrpKm1hi9w==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-float32array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-float64-pinf": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-float32array-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-float64array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-float64array-support/-/assert-has-float64array-support-0.0.8.tgz", + "integrity": "sha512-UVQcoeWqgMw9b8PnAmm/sgzFnuWkZcNhJoi7xyMjbiDV/SP1qLCrvi06mq86cqS3QOCma1fEayJdwgteoXyyuw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-float64array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-float64array-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-node-buffer-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-node-buffer-support/-/assert-has-node-buffer-support-0.0.8.tgz", + "integrity": "sha512-fgI+hW4Yg4ciiv4xVKH+1rzdV7e5+6UKgMnFbc1XDXHcxLub3vOr8+H6eDECdAIfgYNA7X0Dxa/DgvX9dwDTAQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-buffer": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-node-buffer-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-own-property": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-own-property/-/assert-has-own-property-0.0.7.tgz", + "integrity": "sha512-3YHwSWiUqGlTLSwxAWxrqaD1PkgcJniGyotJeIt5X0tSNmSW0/c9RWroCImTUUB3zBkyBJ79MyU9Nf4Qgm59fQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-symbol-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-symbol-support/-/assert-has-symbol-support-0.0.8.tgz", + "integrity": "sha512-PoQ9rk8DgDCuBEkOIzGGQmSnjtcdagnUIviaP5YskB45/TJHXseh4NASWME8FV77WFW9v/Wt1MzKFKMzpDFu4Q==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-symbol-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-tostringtag-support": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-tostringtag-support/-/assert-has-tostringtag-support-0.0.9.tgz", + "integrity": "sha512-UTsqdkrnQ7eufuH5BeyWOJL3ska3u5nvDWKqw3onNNZ2mvdgkfoFD7wHutVGzAA2rkTsSJAMBHVwWLsm5SbKgw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-symbol-support": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-tostringtag-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-uint16array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-uint16array-support/-/assert-has-uint16array-support-0.0.8.tgz", + "integrity": "sha512-vqFDn30YrtzD+BWnVqFhB130g3cUl2w5AdOxhIkRkXCDYAM5v7YwdNMJEON+D4jI8YB4D5pEYjqKweYaCq4nyg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-uint16array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-uint16-max": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-uint16array-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-uint32array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-uint32array-support/-/assert-has-uint32array-support-0.0.8.tgz", + "integrity": "sha512-tJtKuiFKwFSQQUfRXEReOVGXtfdo6+xlshSfwwNWXL1WPP2LrceoiUoQk7zMCMT6VdbXgGH92LDjVcPmSbH4Xw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-uint32array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-uint32-max": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-uint32array-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-has-uint8array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-uint8array-support/-/assert-has-uint8array-support-0.0.8.tgz", + "integrity": "sha512-ie4vGTbAS/5Py+LLjoSQi0nwtYBp+WKk20cMYCzilT0rCsBI/oez0RqHrkYYpmt4WaJL4eJqC+/vfQ5NsI7F5w==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-uint8array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-uint8-max": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "has-uint8array-support": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-array": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-array/-/assert-is-array-0.0.7.tgz", + "integrity": "sha512-/o6KclsGkNcZ5hiROarsD9XUs6xQMb4lTwF6O71UHbKWTtomEF/jD0rxLvlvj0BiCxfKrReddEYd2CnhUyskMA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-big-endian": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-big-endian/-/assert-is-big-endian-0.0.7.tgz", + "integrity": "sha512-BvutsX84F76YxaSIeS5ZQTl536lz+f+P7ew68T1jlFqxBhr4v7JVYFmuf24U040YuK1jwZ2sAq+bPh6T09apwQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-uint16": "^0.0.x", + "@stdlib/array-uint8": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "is-big-endian": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-boolean": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-boolean/-/assert-is-boolean-0.0.8.tgz", + "integrity": "sha512-PRCpslMXSYqFMz1Yh4dG2K/WzqxTCtlKbgJQD2cIkAtXux4JbYiXCtepuoV7l4Wv1rm0a1eU8EqNPgnOmWajGw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-buffer": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-buffer/-/assert-is-buffer-0.0.8.tgz", + "integrity": "sha512-SYmGwOXkzZVidqUyY1IIx6V6QnSL36v3Lcwj8Rvne/fuW0bU2OomsEBzYCFMvcNgtY71vOvgZ9VfH3OppvV6eA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-object-like": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-float32array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-float32array/-/assert-is-float32array-0.0.8.tgz", + "integrity": "sha512-Phk0Ze7Vj2/WLv5Wy8Oo7poZIDMSTiTrEnc1t4lBn3Svz2vfBXlvCufi/i5d93vc4IgpkdrOEwfry6nldABjNQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-float64array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-float64array/-/assert-is-float64array-0.0.8.tgz", + "integrity": "sha512-UC0Av36EEYIgqBbCIz1lj9g7qXxL5MqU1UrWun+n91lmxgdJ+Z77fHy75efJbJlXBf6HXhcYXECIsc0u3SzyDQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-function": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-function/-/assert-is-function-0.0.8.tgz", + "integrity": "sha512-M55Dt2njp5tnY8oePdbkKBRIypny+LpCMFZhEjJIxjLE4rA6zSlHs1yRMqD4PmW+Wl9WTeEM1GYO4AQHl1HAjA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-type-of": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-little-endian": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-little-endian/-/assert-is-little-endian-0.0.7.tgz", + "integrity": "sha512-SPObC73xXfDXY0dOewXR0LDGN3p18HGzm+4K8azTj6wug0vpRV12eB3hbT28ybzRCa6TAKUjwM/xY7Am5QzIlA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-uint16": "^0.0.x", + "@stdlib/array-uint8": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "is-little-endian": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-number": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-number/-/assert-is-number-0.0.7.tgz", + "integrity": "sha512-mNV4boY1cUOmoWWfA2CkdEJfXA6YvhcTvwKC0Fzq+HoFFOuTK/scpTd9HanUyN6AGBlWA8IW+cQ1ZwOT3XMqag==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/number-ctor": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-object": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-object/-/assert-is-object-0.0.8.tgz", + "integrity": "sha512-ooPfXDp9c7w+GSqD2NBaZ/Du1JRJlctv+Abj2vRJDcDPyrnRTb1jmw+AuPgcW7Ca7op39JTbArI+RVHm/FPK+Q==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-array": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-object-like": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-object-like/-/assert-is-object-like-0.0.8.tgz", + "integrity": "sha512-pe9selDPYAu/lYTFV5Rj4BStepgbzQCr36b/eC8EGSJh6gMgRXgHVv0R+EbdJ69KNkHvKKRjnWj0A/EmCwW+OA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-tools-array-function": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-plain-object": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-plain-object/-/assert-is-plain-object-0.0.7.tgz", + "integrity": "sha512-t/CEq2a083ajAgXgSa5tsH8l3kSoEqKRu1qUwniVLFYL4RGv3615CrpJUDQKVtEX5S/OKww5q0Byu3JidJ4C5w==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-object": "^0.0.x", + "@stdlib/utils-get-prototype-of": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-regexp": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-regexp/-/assert-is-regexp-0.0.7.tgz", + "integrity": "sha512-ty5qvLiqkDq6AibHlNJe0ZxDJ9Mg896qolmcHb69mzp64vrsORnPPOTzVapAq0bEUZbXoypeijypLPs9sCGBSQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-regexp-string": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-regexp-string/-/assert-is-regexp-string-0.0.9.tgz", + "integrity": "sha512-FYRJJtH7XwXEf//X6UByUC0Eqd0ZYK5AC8or5g5m5efQrgr2lOaONHyDQ3Scj1A2D6QLIJKZc9XBM4uq5nOPXA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/regexp-eol": "^0.0.x", + "@stdlib/regexp-regexp": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x" + }, + "bin": { + "is-regexp-string": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-string": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-string/-/assert-is-string-0.0.8.tgz", + "integrity": "sha512-Uk+bR4cglGBbY0q7O7HimEJiW/DWnO1tSzr4iAGMxYgf+VM2PMYgI5e0TLy9jOSOzWon3YS39lc63eR3a9KqeQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-uint16array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-uint16array/-/assert-is-uint16array-0.0.8.tgz", + "integrity": "sha512-M+qw7au+qglRXcXHjvoUZVLlGt1mPjuKudrVRto6KL4+tDsP2j+A89NDP3Fz8/XIUD+5jhj+65EOKHSMvDYnng==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-uint32array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-uint32array/-/assert-is-uint32array-0.0.8.tgz", + "integrity": "sha512-cnZi2DicYcplMnkJ3dBxBVKsRNFjzoGpmG9A6jXq4KH5rFl52SezGAXSVY9o5ZV7bQGaF5JLyCLp6n9Y74hFGg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-is-uint8array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-uint8array/-/assert-is-uint8array-0.0.8.tgz", + "integrity": "sha512-8cqpDQtjnJAuVtRkNAktn45ixq0JHaGJxVsSiK79k7GRggvMI6QsbzO6OvcLnZ/LimD42FmgbLd13Yc2esDmZw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/assert-tools-array-function": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-tools-array-function/-/assert-tools-array-function-0.0.7.tgz", + "integrity": "sha512-3lqkaCIBMSJ/IBHHk4NcCnk2NYU52tmwTYbbqhAmv7vim8rZPNmGfj3oWkzrCsyCsyTF7ooD+In2x+qTmUbCtQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-array": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/buffer-ctor": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/buffer-ctor/-/buffer-ctor-0.0.7.tgz", + "integrity": "sha512-4IyTSGijKUQ8+DYRaKnepf9spvKLZ+nrmZ+JrRcB3FrdTX/l9JDpggcUcC/Fe+A4KIZOnClfxLn6zfIlkCZHNA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-node-buffer-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/buffer-from-string": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/buffer-from-string/-/buffer-from-string-0.0.8.tgz", + "integrity": "sha512-Dws5ZbK2M9l4Bkn/ODHFm3lNZ8tWko+NYXqGS/UH/RIQv3PGp+1tXFUSvjwjDneM6ppjQVExzVedUH1ftABs9A==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/buffer-ctor": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/cli-ctor": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@stdlib/cli-ctor/-/cli-ctor-0.0.3.tgz", + "integrity": "sha512-0zCuZnzFyxj66GoF8AyIOhTX5/mgGczFvr6T9h4mXwegMZp8jBC/ZkOGMwmp+ODLBTvlcnnDNpNFkDDyR6/c2g==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-noop": "^0.0.x", + "minimist": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/complex-float32": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/complex-float32/-/complex-float32-0.0.7.tgz", + "integrity": "sha512-POCtQcBZnPm4IrFmTujSaprR1fcOFr/MRw2Mt7INF4oed6b1nzeG647K+2tk1m4mMrMPiuXCdvwJod4kJ0SXxQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-number": "^0.0.x", + "@stdlib/number-float64-base-to-float32": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-define-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/complex-float64": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/complex-float64/-/complex-float64-0.0.8.tgz", + "integrity": "sha512-lUJwsXtGEziOWAqCcnKnZT4fcVoRsl6t6ECaCJX45Z7lAc70yJLiwUieLWS5UXmyoADHuZyUXkxtI4oClfpnaw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-number": "^0.0.x", + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-define-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/complex-reim": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/complex-reim/-/complex-reim-0.0.6.tgz", + "integrity": "sha512-28WXfPSIFMtHb0YgdatkGS4yxX5sPYea5MiNgqPv3E78+tFcg8JJG52NQ/MviWP2wsN9aBQAoCPeu8kXxSPdzA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/complex-float64": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/complex-reimf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@stdlib/complex-reimf/-/complex-reimf-0.0.1.tgz", + "integrity": "sha512-P9zu05ZW2i68Oppp3oHelP7Tk0D7tGBL0hGl1skJppr2vY9LltuNbeYI3C96tQe/7Enw/5GyAWgxoQI4cWccQA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-float32": "^0.0.x", + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-exponent-bias": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-exponent-bias/-/constants-float64-exponent-bias-0.0.8.tgz", + "integrity": "sha512-IzBJQw9hYgWCki7VoC/zJxEA76Nmf8hmY+VkOWnJ8IyfgTXClgY8tfDGS1cc4l/hCOEllxGp9FRvVdn24A5tKQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-high-word-abs-mask": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-high-word-abs-mask/-/constants-float64-high-word-abs-mask-0.0.1.tgz", + "integrity": "sha512-1vy8SUyMHFBwqUUVaZFA7r4/E3cMMRKSwsaa/EZ15w7Kmc01W/ZmaaTLevRcIdACcNgK+8i8813c8H7LScXNcQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-high-word-exponent-mask": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-high-word-exponent-mask/-/constants-float64-high-word-exponent-mask-0.0.8.tgz", + "integrity": "sha512-z28/EQERc0VG7N36bqdvtrRWjFc8600PKkwvl/nqx6TpKAzMXNw55BS1xT4C28Sa9Z7uBWeUj3UbIFedbkoyMw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-high-word-sign-mask": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-high-word-sign-mask/-/constants-float64-high-word-sign-mask-0.0.1.tgz", + "integrity": "sha512-hmTr5caK1lh1m0eyaQqt2Vt3y+eEdAx57ndbADEbXhxC9qSGd0b4bLSzt/Xp4MYBYdQkHAE/BlkgUiRThswhCg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-max-base2-exponent": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-max-base2-exponent/-/constants-float64-max-base2-exponent-0.0.8.tgz", + "integrity": "sha512-xBAOtso1eiy27GnTut2difuSdpsGxI8dJhXupw0UukGgvy/3CSsyNm+a1Suz/dhqK4tPOTe5QboIdNMw5IgXKQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-max-base2-exponent-subnormal": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-max-base2-exponent-subnormal/-/constants-float64-max-base2-exponent-subnormal-0.0.8.tgz", + "integrity": "sha512-YGBZykSiXFebznnJfWFDwhho2Q9xhUWOL+X0lZJ4ItfTTo40W6VHAyNYz98tT/gJECFype0seNzzo1nUxCE7jQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-min-base2-exponent-subnormal": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-min-base2-exponent-subnormal/-/constants-float64-min-base2-exponent-subnormal-0.0.8.tgz", + "integrity": "sha512-bt81nBus/91aEqGRQBenEFCyWNsf8uaxn4LN1NjgkvY92S1yVxXFlC65fJHsj9FTqvyZ+uj690/gdMKUDV3NjQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-ninf": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-ninf/-/constants-float64-ninf-0.0.8.tgz", + "integrity": "sha512-bn/uuzCne35OSLsQZJlNrkvU1/40spGTm22g1+ZI1LL19J8XJi/o4iupIHRXuLSTLFDBqMoJlUNphZlWQ4l8zw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/number-ctor": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-pinf": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-pinf/-/constants-float64-pinf-0.0.8.tgz", + "integrity": "sha512-I3R4rm2cemoMuiDph07eo5oWZ4ucUtpuK73qBJiJPDQKz8fSjSe4wJBAigq2AmWYdd7yJHsl5NJd8AgC6mP5Qw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-float64-smallest-normal": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-smallest-normal/-/constants-float64-smallest-normal-0.0.8.tgz", + "integrity": "sha512-Qwxpn5NA3RXf+mQcffCWRcsHSPTUQkalsz0+JDpblDszuz2XROcXkOdDr5LKgTAUPIXsjOgZzTsuRONENhsSEg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-uint16-max": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/constants-uint16-max/-/constants-uint16-max-0.0.7.tgz", + "integrity": "sha512-7TPoku7SlskA67mAm7mykIAjeEnkQJemw1cnKZur0mT5W4ryvDR6iFfL9xBiByVnWYq/+ei7DHbOv6/2b2jizw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-uint32-max": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/constants-uint32-max/-/constants-uint32-max-0.0.7.tgz", + "integrity": "sha512-8+NK0ewqc1vnEZNqzwFJgFSy3S543Eft7i8WyW/ygkofiqEiLAsujvYMHzPAB8/3D+PYvjTSe37StSwRwvQ6uw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/constants-uint8-max": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/constants-uint8-max/-/constants-uint8-max-0.0.7.tgz", + "integrity": "sha512-fqV+xds4jgwFxwWu08b8xDuIoW6/D4/1dtEjZ1sXVeWR7nf0pjj1cHERq4kdkYxsvOGu+rjoR3MbjzpFc4fvSw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/fs-exists": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/fs-exists/-/fs-exists-0.0.8.tgz", + "integrity": "sha512-mZktcCxiLmycCJefm1+jbMTYkmhK6Jk1ShFmUVqJvs+Ps9/2EEQXfPbdEniLoVz4HeHLlcX90JWobUEghOOnAQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-cwd": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "bin": { + "exists": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/fs-read-file": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/fs-read-file/-/fs-read-file-0.0.8.tgz", + "integrity": "sha512-pIZID/G91+q7ep4x9ECNC45+JT2j0+jdz/ZQVjCHiEwXCwshZPEvxcPQWb9bXo6coOY+zJyX5TwBIpXBxomWFg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "bin": { + "read-file": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/fs-resolve-parent-path": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/fs-resolve-parent-path/-/fs-resolve-parent-path-0.0.8.tgz", + "integrity": "sha512-ok1bTWsAziChibQE3u7EoXwbCQUDkFjjRAHSxh7WWE5JEYVJQg1F0o3bbjRr4D/wfYYPWLAt8AFIKBUDmWghpg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-plain-object": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-exists": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-cwd": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "bin": { + "resolve-parent-path": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/math-base-assert-is-infinite": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-assert-is-infinite/-/math-base-assert-is-infinite-0.0.9.tgz", + "integrity": "sha512-JuPDdmxd+AtPWPHu9uaLvTsnEPaZODZk+zpagziNbDKy8DRiU1cy+t+QEjB5WizZt0A5MkuxDTjZ/8/sG5GaYQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/constants-float64-ninf": "^0.0.x", + "@stdlib/constants-float64-pinf": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/math-base-assert-is-nan": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-assert-is-nan/-/math-base-assert-is-nan-0.0.8.tgz", + "integrity": "sha512-m+gCVBxLFW8ZdAfdkATetYMvM7sPFoMKboacHjb1pe21jHQqVb+/4bhRSDg6S7HGX7/8/bSzEUm9zuF7vqK5rQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/math-base-napi-binary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-napi-binary/-/math-base-napi-binary-0.0.8.tgz", + "integrity": "sha512-B8d0HBPhfXefbdl/h0h5c+lM2sE+/U7Fb7hY/huVeoQtBtEx0Jbx/qKvPSVxMjmWCKfWlbPpbgKpN5GbFgLiAg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/complex-float64": "^0.0.x", + "@stdlib/complex-reim": "^0.0.x", + "@stdlib/complex-reimf": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/math-base-napi-unary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-napi-unary/-/math-base-napi-unary-0.0.8.tgz", + "integrity": "sha512-xKbGBxbgrEe7dxCDXJrooXPhXSDUl/QPqsN74Qa0+8Svsc4sbYVdU3yHSN5vDgrcWt3ZkH51j0vCSBIjvLL15g==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/complex-float64": "^0.0.x", + "@stdlib/complex-reim": "^0.0.x", + "@stdlib/complex-reimf": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/math-base-special-abs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-special-abs/-/math-base-special-abs-0.0.6.tgz", + "integrity": "sha512-FaaMUnYs2qIVN3kI5m/qNlBhDnjszhDOzEhxGEoQWR/k0XnxbCsTyjNesR2DkpiKuoAXAr9ojoDe2qBYdirWoQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/math-base-napi-unary": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/math-base-special-copysign": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-special-copysign/-/math-base-special-copysign-0.0.7.tgz", + "integrity": "sha512-7Br7oeuVJSBKG8BiSk/AIRFTBd2sbvHdV3HaqRj8tTZHX8BQomZ3Vj4Qsiz3kPyO4d6PpBLBTYlGTkSDlGOZJA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/constants-float64-high-word-abs-mask": "^0.0.x", + "@stdlib/constants-float64-high-word-sign-mask": "^0.0.x", + "@stdlib/math-base-napi-binary": "^0.0.x", + "@stdlib/number-float64-base-from-words": "^0.0.x", + "@stdlib/number-float64-base-get-high-word": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/math-base-special-ldexp": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-special-ldexp/-/math-base-special-ldexp-0.0.5.tgz", + "integrity": "sha512-RLRsPpCdcJZMhwb4l4B/FsmGfEPEWAsik6KYUkUSSHb7ok/gZWt8LgVScxGMpJMpl5IV0v9qG4ZINVONKjX5KA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/constants-float64-exponent-bias": "^0.0.x", + "@stdlib/constants-float64-max-base2-exponent": "^0.0.x", + "@stdlib/constants-float64-max-base2-exponent-subnormal": "^0.0.x", + "@stdlib/constants-float64-min-base2-exponent-subnormal": "^0.0.x", + "@stdlib/constants-float64-ninf": "^0.0.x", + "@stdlib/constants-float64-pinf": "^0.0.x", + "@stdlib/math-base-assert-is-infinite": "^0.0.x", + "@stdlib/math-base-assert-is-nan": "^0.0.x", + "@stdlib/math-base-special-copysign": "^0.0.x", + "@stdlib/number-float64-base-exponent": "^0.0.x", + "@stdlib/number-float64-base-from-words": "^0.0.x", + "@stdlib/number-float64-base-normalize": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/number-ctor": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/number-ctor/-/number-ctor-0.0.7.tgz", + "integrity": "sha512-kXNwKIfnb10Ro3RTclhAYqbE3DtIXax+qpu0z1/tZpI2vkmTfYDQLno2QJrzJsZZgdeFtXIws+edONN9kM34ow==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/number-float64-base-exponent": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-exponent/-/number-float64-base-exponent-0.0.6.tgz", + "integrity": "sha512-wLXsG+cvynmapoffmj5hVNDH7BuHIGspBcTCdjPaD+tnqPDIm03qV5Z9YBhDh91BdOCuPZQ8Ovu2WBpX+ySeGg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/constants-float64-exponent-bias": "^0.0.x", + "@stdlib/constants-float64-high-word-exponent-mask": "^0.0.x", + "@stdlib/number-float64-base-get-high-word": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/number-float64-base-from-words": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-from-words/-/number-float64-base-from-words-0.0.6.tgz", + "integrity": "sha512-r0elnekypCN831aw9Gp8+08br8HHAqvqtc5uXaxEh3QYIgBD/QM5qSb3b7WSAQ0ZxJJKdoykupODWWBkWQTijg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/array-uint32": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/number-float64-base-get-high-word": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-get-high-word/-/number-float64-base-get-high-word-0.0.6.tgz", + "integrity": "sha512-jSFSYkgiG/IzDurbwrDKtWiaZeSEJK8iJIsNtbPG1vOIdQMRyw+t0bf3Kf3vuJu/+bnSTvYZLqpCO6wzT/ve9g==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/array-uint32": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/number-float64-base-normalize": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-normalize/-/number-float64-base-normalize-0.0.9.tgz", + "integrity": "sha512-+rm7RQJEj8zHkqYFE2a6DgNQSB5oKE/IydHAajgZl40YB91BoYRYf/ozs5/tTwfy2Fc04+tIpSfFtzDr4ZY19Q==", + "hasInstallScript": true, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/constants-float64-smallest-normal": "^0.0.x", + "@stdlib/math-base-assert-is-infinite": "^0.0.x", + "@stdlib/math-base-assert-is-nan": "^0.0.x", + "@stdlib/math-base-special-abs": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/number-float64-base-to-float32": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-to-float32/-/number-float64-base-to-float32-0.0.7.tgz", + "integrity": "sha512-PNUSi6+cqfFiu4vgFljUKMFY2O9PxI6+T+vqtIoh8cflf+PjSGj3v4QIlstK9+6qU40eGR5SHZyLTWdzmNqLTQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-float32": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/number-float64-base-to-words": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-to-words/-/number-float64-base-to-words-0.0.7.tgz", + "integrity": "sha512-7wsYuq+2MGp9rAkTnQ985rah7EJI9TfgHrYSSd4UIu4qIjoYmWIKEhIDgu7/69PfGrls18C3PxKg1pD/v7DQTg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/array-uint32": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/os-byte-order": "^0.0.x", + "@stdlib/os-float-word-order": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/os-byte-order": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/os-byte-order/-/os-byte-order-0.0.7.tgz", + "integrity": "sha512-rRJWjFM9lOSBiIX4zcay7BZsqYBLoE32Oz/Qfim8cv1cN1viS5D4d3DskRJcffw7zXDnG3oZAOw5yZS0FnlyUg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-big-endian": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "bin": { + "byte-order": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/os-float-word-order": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/os-float-word-order/-/os-float-word-order-0.0.7.tgz", + "integrity": "sha512-gXIcIZf+ENKP7E41bKflfXmPi+AIfjXW/oU+m8NbP3DQasqHaZa0z5758qvnbO8L1lRJb/MzLOkIY8Bx/0cWEA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/os-byte-order": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + }, + "bin": { + "float-word-order": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/process-cwd": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/process-cwd/-/process-cwd-0.0.8.tgz", + "integrity": "sha512-GHINpJgSlKEo9ODDWTHp0/Zc/9C/qL92h5Mc0QlIFBXAoUjy6xT4FB2U16wCNZMG3eVOzt5+SjmCwvGH0Wbg3Q==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + }, + "bin": { + "cwd": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/process-read-stdin": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/process-read-stdin/-/process-read-stdin-0.0.7.tgz", + "integrity": "sha512-nep9QZ5iDGrRtrZM2+pYAvyCiYG4HfO0/9+19BiLJepjgYq4GKeumPAQo22+1xawYDL7Zu62uWzYszaVZcXuyw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/buffer-ctor": "^0.0.x", + "@stdlib/buffer-from-string": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/utils-next-tick": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/regexp-eol": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-eol/-/regexp-eol-0.0.7.tgz", + "integrity": "sha512-BTMpRWrmlnf1XCdTxOrb8o6caO2lmu/c80XSyhYCi1DoizVIZnqxOaN5yUJNCr50g28vQ47PpsT3Yo7J3SdlRA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-is-boolean": "^0.0.x", + "@stdlib/assert-is-plain-object": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/regexp-extended-length-path": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-extended-length-path/-/regexp-extended-length-path-0.0.7.tgz", + "integrity": "sha512-z6uqzMWq3WPDKbl4MIZJoNA5ZsYLQI9G3j2TIvhU8X2hnhlku8p4mvK9F+QmoVvgPxKliwNnx/DAl7ltutSDKw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/regexp-function-name": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-function-name/-/regexp-function-name-0.0.7.tgz", + "integrity": "sha512-MaiyFUUqkAUpUoz/9F6AMBuMQQfA9ssQfK16PugehLQh4ZtOXV1LhdY8e5Md7SuYl9IrvFVg1gSAVDysrv5ZMg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/regexp-regexp": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-regexp/-/regexp-regexp-0.0.8.tgz", + "integrity": "sha512-S5PZICPd/XRcn1dncVojxIDzJsHtEleuJHHD7ji3o981uPHR7zI2Iy9a1eV2u7+ABeUswbI1Yuix6fXJfcwV1w==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/streams-node-stdin": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/streams-node-stdin/-/streams-node-stdin-0.0.7.tgz", + "integrity": "sha512-gg4lgrjuoG3V/L29wNs32uADMCqepIcmoOFHJCTAhVe0GtHDLybUVnLljaPfdvmpPZmTvmusPQtIcscbyWvAyg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/string-base-format-interpolate": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-interpolate/-/string-base-format-interpolate-0.0.4.tgz", + "integrity": "sha512-8FC8+/ey+P5hf1B50oXpXzRzoAgKI1rikpyKZ98Xmjd5rcbSq3NWYi8TqOF8mUHm9hVZ2CXWoNCtEe2wvMQPMg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/string-base-format-tokenize": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-tokenize/-/string-base-format-tokenize-0.0.4.tgz", + "integrity": "sha512-+vMIkheqAhDeT/iF5hIQo95IMkt5IzC68eR3CxW1fhc48NMkKFE2UfN73ET8fmLuOanLo/5pO2E90c2G7PExow==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/string-format": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@stdlib/string-format/-/string-format-0.0.3.tgz", + "integrity": "sha512-1jiElUQXlI/tTkgRuzJi9jUz/EjrO9kzS8VWHD3g7gdc3ZpxlA5G9JrIiPXGw/qmZTi0H1pXl6KmX+xWQEQJAg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/string-base-format-interpolate": "^0.0.x", + "@stdlib/string-base-format-tokenize": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/string-lowercase": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/string-lowercase/-/string-lowercase-0.0.9.tgz", + "integrity": "sha512-tXFFjbhIlDak4jbQyV1DhYiSTO8b1ozS2g/LELnsKUjIXECDKxGFyWYcz10KuyAWmFotHnCJdIm8/blm2CfDIA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + }, + "bin": { + "lowercase": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/string-replace": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@stdlib/string-replace/-/string-replace-0.0.11.tgz", + "integrity": "sha512-F0MY4f9mRE5MSKpAUfL4HLbJMCbG6iUTtHAWnNeAXIvUX1XYIw/eItkA58R9kNvnr1l5B08bavnjrgTJGIKFFQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-regexp": "^0.0.x", + "@stdlib/assert-is-regexp-string": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/regexp-eol": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/string-format": "^0.0.x", + "@stdlib/utils-escape-regexp-string": "^0.0.x", + "@stdlib/utils-regexp-from-string": "^0.0.x" + }, + "bin": { + "replace": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/types": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@stdlib/types/-/types-0.0.14.tgz", + "integrity": "sha512-AP3EI9/il/xkwUazcoY+SbjtxHRrheXgSbWZdEGD+rWpEgj6n2i63hp6hTOpAB5NipE0tJwinQlDGOuQ1lCaCw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-constructor-name": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-constructor-name/-/utils-constructor-name-0.0.8.tgz", + "integrity": "sha512-GXpyNZwjN8u3tyYjL2GgGfrsxwvfogUC3gg7L7NRZ1i86B6xmgfnJUYHYOUnSfB+R531ET7NUZlK52GxL7P82Q==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-buffer": "^0.0.x", + "@stdlib/regexp-function-name": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-convert-path": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-convert-path/-/utils-convert-path-0.0.8.tgz", + "integrity": "sha512-GNd8uIswrcJCctljMbmjtE4P4oOjhoUIfMvdkqfSrRLRY+ZqPB2xM+yI0MQFfUq/0Rnk/xtESlGSVLz9ZDtXfA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/regexp-eol": "^0.0.x", + "@stdlib/regexp-extended-length-path": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/string-lowercase": "^0.0.x", + "@stdlib/string-replace": "^0.0.x" + }, + "bin": { + "convert-path": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-define-nonenumerable-read-only-property": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/utils-define-nonenumerable-read-only-property/-/utils-define-nonenumerable-read-only-property-0.0.7.tgz", + "integrity": "sha512-c7dnHDYuS4Xn3XBRWIQBPcROTtP/4lkcFyq0FrQzjXUjimfMgHF7cuFIIob6qUTnU8SOzY9p0ydRR2QJreWE6g==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/types": "^0.0.x", + "@stdlib/utils-define-property": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-define-property": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.0.9.tgz", + "integrity": "sha512-pIzVvHJvVfU/Lt45WwUAcodlvSPDDSD4pIPc9WmIYi4vnEBA9U7yHtiNz2aTvfGmBMTaLYTVVFIXwkFp+QotMA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/types": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-escape-regexp-string": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/utils-escape-regexp-string/-/utils-escape-regexp-string-0.0.9.tgz", + "integrity": "sha512-E+9+UDzf2mlMLgb+zYrrPy2FpzbXh189dzBJY6OG+XZqEJAXcjWs7DURO5oGffkG39EG5KXeaQwDXUavcMDCIw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-get-prototype-of": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/utils-get-prototype-of/-/utils-get-prototype-of-0.0.7.tgz", + "integrity": "sha512-fCUk9lrBO2ELrq+/OPJws1/hquI4FtwG0SzVRH6UJmJfwb1zoEFnjcwyDAy+HWNVmo3xeRLsrz6XjHrJwer9pg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-global": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/utils-global/-/utils-global-0.0.7.tgz", + "integrity": "sha512-BBNYBdDUz1X8Lhfw9nnnXczMv9GztzGpQ88J/6hnY7PHJ71av5d41YlijWeM9dhvWjnH9I7HNE3LL7R07yw0kA==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-boolean": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-library-manifest": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-library-manifest/-/utils-library-manifest-0.0.8.tgz", + "integrity": "sha512-IOQSp8skSRQn9wOyMRUX9Hi0j/P5v5TvD8DJWTqtE8Lhr8kVVluMBjHfvheoeKHxfWAbNHSVpkpFY/Bdh/SHgQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-resolve-parent-path": "^0.0.x", + "@stdlib/utils-convert-path": "^0.0.x", + "debug": "^2.6.9", + "resolve": "^1.1.7" + }, + "bin": { + "library-manifest": "bin/cli" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-library-manifest/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@stdlib/utils-library-manifest/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@stdlib/utils-native-class": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-native-class/-/utils-native-class-0.0.8.tgz", + "integrity": "sha512-0Zl9me2V9rSrBw/N8o8/9XjmPUy8zEeoMM0sJmH3N6C9StDsYTjXIAMPGzYhMEWaWHvGeYyNteFK2yDOVGtC3w==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-has-tostringtag-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-next-tick": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-next-tick/-/utils-next-tick-0.0.8.tgz", + "integrity": "sha512-l+hPl7+CgLPxk/gcWOXRxX/lNyfqcFCqhzzV/ZMvFCYLY/wI9lcWO4xTQNMALY2rp+kiV+qiAiO9zcO+hewwUg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-noop": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@stdlib/utils-noop/-/utils-noop-0.0.13.tgz", + "integrity": "sha512-JRWHGWYWP5QK7SQ2cOYiL8NETw8P33LriZh1p9S2xC4e0rBoaY849h1A2IL2y1+x3s29KNjSaBWMrMUIV5HCSw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-regexp-from-string": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/utils-regexp-from-string/-/utils-regexp-from-string-0.0.9.tgz", + "integrity": "sha512-3rN0Mcyiarl7V6dXRjFAUMacRwe0/sYX7ThKYurf0mZkMW9tjTP+ygak9xmL9AL0QQZtbrFFwWBrDO+38Vnavw==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/regexp-regexp": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/utils-type-of": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-type-of/-/utils-type-of-0.0.8.tgz", + "integrity": "sha512-b4xqdy3AnnB7NdmBBpoiI67X4vIRxvirjg3a8BfhM5jPr2k0njby1jAbG9dUxJvgAV6o32S4kjUgfIdjEYpTNQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-constructor-name": "^0.0.x", + "@stdlib/utils-global": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@turf/area": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", + "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", + "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-clockwise": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz", + "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==", + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/centroid": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.5.0.tgz", + "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==", + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/invariant": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", + "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", + "dependencies": { + "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/meta": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", + "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", + "dependencies": { + "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", + "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" + }, + "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==", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@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==" + }, + "node_modules/@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@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==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/js-cookie": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", + "dev": true + }, + "node_modules/@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, + "node_modules/@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==" + }, + "node_modules/@types/lodash": { + "version": "4.14.190", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", + "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", + "dev": true + }, + "node_modules/@types/lodash-es": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz", + "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" + }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "node_modules/@types/plotly.js": { + "version": "2.12.9", + "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.12.9.tgz", + "integrity": "sha512-ML5pFv06KSozZqRO74Yt2XQg7A6Q2vtL3qGmO7nbKGpkk39vNdHYHD9w96Y4XK2TrhZKOxGirFjkou7IK5xdoA==", + "dev": true + }, + "node_modules/@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==", + "dev": true + }, + "node_modules/@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==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", + "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.33", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", + "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@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==", + "peer": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz", + "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-2.1.1.tgz", + "integrity": "sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-typescript": "^7.20.0", + "@vue/babel-plugin-jsx": "^1.1.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@vitest/ui": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.18.1.tgz", + "integrity": "sha512-JgYewAWfx9fN/cjOW6fPh63j9EDiHmDpVXzvp7UJeza+26QoYHXVsgjCmnzP/jjH3i/LkOXlJLqEJw/nJQ+IJg==", + "dev": true, + "dependencies": { + "sirv": "^2.0.2" + } + }, + "node_modules/@volar/code-gen": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.9.tgz", + "integrity": "sha512-n6LClucfA+37rQeskvh9vDoZV1VvCVNy++MAPKj2dT4FT+Fbmty/SDQqnsEBtdEe6E3OQctFvA/IcKsx3Mns0A==", + "dev": true, + "dependencies": { + "@volar/source-map": "0.38.9" + } + }, + "node_modules/@volar/source-map": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.9.tgz", + "integrity": "sha512-ba0UFoHDYry+vwKdgkWJ6xlQT+8TFtZg1zj9tSjj4PykW1JZDuM0xplMotLun4h3YOoYfY9K1huY5gvxmrNLIw==", + "dev": true + }, + "node_modules/@volar/vue-code-gen": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.9.tgz", + "integrity": "sha512-tzj7AoarFBKl7e41MR006ncrEmNPHALuk8aG4WdDIaG387X5//5KhWC5Ff3ZfB2InGSeNT+CVUd74M0gS20rjA==", + "dev": true, + "dependencies": { + "@volar/code-gen": "0.38.9", + "@volar/source-map": "0.38.9", + "@vue/compiler-core": "^3.2.37", + "@vue/compiler-dom": "^3.2.37", + "@vue/shared": "^3.2.37" + } + }, + "node_modules/@volar/vue-typescript": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.9.tgz", + "integrity": "sha512-iJMQGU91ADi98u8V1vXd2UBmELDAaeSP0ZJaFjwosClQdKlJQYc6MlxxKfXBZisHqfbhdtrGRyaryulnYtliZw==", + "dev": true, + "dependencies": { + "@volar/code-gen": "0.38.9", + "@volar/source-map": "0.38.9", + "@volar/vue-code-gen": "0.38.9", + "@vue/compiler-sfc": "^3.2.37", + "@vue/reactivity": "^3.2.37" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz", + "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz", + "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==", + "dependencies": { + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz", + "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-ssr": "3.2.45", + "@vue/reactivity-transform": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz", + "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz", + "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", + "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + }, + "peerDependencies": { + "eslint": ">= 7.28.0", + "prettier": ">= 2.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.2.tgz", + "integrity": "sha512-EiKud1NqlWmSapBFkeSrE994qpKx7/27uCGnhdqzllYDpQZroyX/O6bwjEpeuyKamvLbsGdO6PMR2faIf+zFnw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz", + "integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==", + "dependencies": { + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz", + "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz", + "integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==", + "dependencies": { + "@vue/reactivity": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz", + "integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==", + "dependencies": { + "@vue/runtime-core": "3.2.45", + "@vue/shared": "3.2.45", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz", + "integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==", + "dependencies": { + "@vue/compiler-ssr": "3.2.45", + "@vue/shared": "3.2.45" + }, + "peerDependencies": { + "vue": "3.2.45" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz", + "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==" + }, + "node_modules/@vue/test-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.2.3.tgz", + "integrity": "sha512-MbqIS11cPEuZmqvyKNCnTdGxfNS4FhvQx7HO1JFQHlZRIM3ql2iwjPv9L1AFiLl4taW/5RTQz0r54d47xJuurA==", + "dev": true, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/@vue/tsconfig": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.1.3.tgz", + "integrity": "sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==", + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "peer": true + }, + "node_modules/@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==", + "peer": true + }, + "node_modules/@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==", + "peer": true + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "peer": true + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "peer": true + }, + "node_modules/@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==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xstate/vue": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@xstate/vue/-/vue-0.8.1.tgz", + "integrity": "sha512-m4Ejd08eUHzlTD7P6aGscwpjeHRXVZQ5iVyv5RxYi5WKoFqOMeurO2dxvI8QDfTxF27NqODj30LWYsMzZZ9lsg==", + "peerDependencies": { + "@xstate/fsm": "^1.0.0", + "vue": "^3.0.0", + "xstate": "^4.7.8" + }, + "peerDependenciesMeta": { + "@xstate/fsm": { + "optional": true + }, + "xstate": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==" + }, + "node_modules/absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA==", + "peer": true + }, + "node_modules/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==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/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==", + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/almost-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-1.1.0.tgz", + "integrity": "sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==" + }, + "node_modules/amazon-cognito-identity-js": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-5.2.12.tgz", + "integrity": "sha512-YfoH2xNgBOb9fC9wen3u4inMpb2YK+58s0uiTn+C9gdZ1GxdW83Fk+YSWUyp/duaStOU1cGFXXgTHt+5lOAXUg==", + "dependencies": { + "buffer": "4.9.2", + "crypto-js": "^4.1.1", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/amazon-cognito-identity-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/amazon-cognito-identity-js/node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "peer": true + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "peer": true, + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-fragments/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "peer": true + }, + "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-fragments/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", + "peer": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-bounds": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz", + "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==" + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-normalize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz", + "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==", + "dependencies": { + "array-bounds": "^1.0.0" + } + }, + "node_modules/array-range": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz", + "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==" + }, + "node_modules/array-rearrange": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/array-rearrange/-/array-rearrange-2.2.2.tgz", + "integrity": "sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "peer": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "peer": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==" + }, + "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/aws-amplify": { + "version": "4.3.43", + "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-4.3.43.tgz", + "integrity": "sha512-uUVAvbYerm4QNIVZyzFNK3dnAK3tf5RQEMszd83wJsTjD490cmCj97ELpRDzUIzh6XhZU6wrC9M1ZOszZR4xTQ==", + "dependencies": { + "@aws-amplify/analytics": "5.2.28", + "@aws-amplify/api": "4.0.61", + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "@aws-amplify/datastore": "3.14.4", + "@aws-amplify/geo": "1.3.24", + "@aws-amplify/interactions": "4.1.9", + "@aws-amplify/predictions": "4.0.61", + "@aws-amplify/pubsub": "4.5.11", + "@aws-amplify/storage": "4.5.14", + "@aws-amplify/ui": "2.0.7", + "@aws-amplify/xr": "3.0.61" + } + }, + "node_modules/aws-amplify/node_modules/@aws-amplify/ui": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@aws-amplify/ui/-/ui-2.0.7.tgz", + "integrity": "sha512-tT7onRv+OCznFhUE2mKPpbGHHV+oODZk4VDX3lYNIfJ7LXv1hVtllQbPNJF5beNBRw9r6uotlXpeJrkph6v07A==" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peer": true, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "peer": true + }, + "node_modules/babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "peer": true, + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "peer": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/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==", + "dev": true + }, + "node_modules/batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/binary-search-bounds": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", + "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==" + }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==" + }, + "node_modules/bitmap-sdf": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", + "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==" + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bl/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/bl/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/body-parser/node_modules/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==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserify-zlib/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/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==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "peer": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "peer": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "peer": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/canvas-fit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/canvas-fit/-/canvas-fit-1.5.0.tgz", + "integrity": "sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==", + "dependencies": { + "element-size": "^1.1.1" + } + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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==", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==" + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "peer": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "peer": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-alpha": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz", + "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==", + "dependencies": { + "color-parse": "^1.3.8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz", + "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==", + "dependencies": { + "clamp": "^1.0.1" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-normalize": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", + "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", + "dependencies": { + "clamp": "^1.0.1", + "color-rgba": "^2.1.1", + "dtype": "^2.0.0" + } + }, + "node_modules/color-parse": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.3.8.tgz", + "integrity": "sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA==", + "dependencies": { + "color-name": "^1.0.0", + "defined": "^1.0.0", + "is-plain-obj": "^1.1.0" + } + }, + "node_modules/color-rgba": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.1.1.tgz", + "integrity": "sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw==", + "dependencies": { + "clamp": "^1.0.1", + "color-parse": "^1.3.8", + "color-space": "^1.14.6" + } + }, + "node_modules/color-space": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-1.16.0.tgz", + "integrity": "sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg==", + "dependencies": { + "hsluv": "^0.0.3", + "mumath": "^3.3.4" + } + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "peer": true + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "peer": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "peer": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/compute-dims": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/compute-dims/-/compute-dims-1.1.0.tgz", + "integrity": "sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg==", + "dependencies": { + "utils-copy": "^1.0.0", + "validate.io-array": "^1.0.6", + "validate.io-matrix-like": "^1.0.2", + "validate.io-ndarray-like": "^1.0.0", + "validate.io-positive-integer": "^1.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/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/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/const-max-uint32": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/const-max-uint32/-/const-max-uint32-1.0.2.tgz", + "integrity": "sha512-T8/9bffg5RThuejasJWrwqxs3Q0fsJvyl7/33IB6svroD8JC93E7X60AuuOnDE8RlP6Jlb5FxmlrVDpl9KiU2Q==" + }, + "node_modules/const-pinf-float64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz", + "integrity": "sha512-wfs+V4HdSN7C3CWJWR7hVa24yTPn3mDJthwhRIObZBh6UjTjkUMUrCP3UrNGozB/HjTpcScnGXtQUNa+yjsIJQ==" + }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.27.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", + "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "peer": true, + "dependencies": { + "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "peer": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "peer": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/country-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", + "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==" + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/css-font": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz", + "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==", + "dependencies": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-global-keywords": "^1.0.1", + "css-system-font-keywords": "^1.0.0", + "pick-by-alias": "^1.2.0", + "string-split-by": "^1.0.0", + "unquote": "^1.1.0" + } + }, + "node_modules/css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==" + }, + "node_modules/css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==" + }, + "node_modules/css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==" + }, + "node_modules/css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" + }, + "node_modules/css-global-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz", + "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==" + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==" + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "node_modules/cypress": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz", + "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.6", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cypress-localstorage-commands": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cypress-localstorage-commands/-/cypress-localstorage-commands-2.2.1.tgz", + "integrity": "sha512-m7IwoM+BMOJj7FzzN4It268c/i/Ur72CQX8JwLICkQ6ZgF1XNJOIKlQ7Rszg45ATLTjVTL1QElKCZECoU8cthQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "cypress": ">=2.1.0" + } + }, + "node_modules/cypress/node_modules/@types/node": { + "version": "14.18.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", + "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", + "dev": true + }, + "node_modules/cypress/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cypress/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cypress/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "node_modules/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "node_modules/d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "node_modules/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + }, + "node_modules/d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "node_modules/d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-geo-projection": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz", + "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==", + "dependencies": { + "commander": "2", + "d3-array": "1", + "d3-geo": "^1.12.0", + "resolve": "^1.1.10" + }, + "bin": { + "geo2svg": "bin/geo2svg", + "geograticule": "bin/geograticule", + "geoproject": "bin/geoproject", + "geoquantize": "bin/geoquantize", + "geostitch": "bin/geostitch" + } + }, + "node_modules/d3-geo-projection/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + }, + "node_modules/d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" + }, + "node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "node_modules/d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dayjs": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", + "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-gateway/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "peer": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", + "peer": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-kerning": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", + "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==" + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/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==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/draw-svg-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/draw-svg-path/-/draw-svg-path-1.0.0.tgz", + "integrity": "sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==", + "dependencies": { + "abs-svg-path": "~0.1.1", + "normalize-svg-path": "~0.1.0" + } + }, + "node_modules/dset": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/dtype": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", + "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/dup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz", + "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/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/duplexify/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "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==" + }, + "node_modules/element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "dependencies": { + "batch-processor": "1.0.0" + } + }, + "node_modules/element-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/element-size/-/element-size-1.1.1.tgz", + "integrity": "sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==" + }, + "node_modules/elementary-circuits-directed-graph": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz", + "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==", + "dependencies": { + "strongly-connected-components": "^1.0.1" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "peer": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/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==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "peer": true, + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "dependencies": { + "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", + "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.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true + }, + "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==", + "peer": true + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/esbuild": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.14.tgz", + "integrity": "sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.14", + "@esbuild/linux-loong64": "0.15.14", + "esbuild-android-64": "0.15.14", + "esbuild-android-arm64": "0.15.14", + "esbuild-darwin-64": "0.15.14", + "esbuild-darwin-arm64": "0.15.14", + "esbuild-freebsd-64": "0.15.14", + "esbuild-freebsd-arm64": "0.15.14", + "esbuild-linux-32": "0.15.14", + "esbuild-linux-64": "0.15.14", + "esbuild-linux-arm": "0.15.14", + "esbuild-linux-arm64": "0.15.14", + "esbuild-linux-mips64le": "0.15.14", + "esbuild-linux-ppc64le": "0.15.14", + "esbuild-linux-riscv64": "0.15.14", + "esbuild-linux-s390x": "0.15.14", + "esbuild-netbsd-64": "0.15.14", + "esbuild-openbsd-64": "0.15.14", + "esbuild-sunos-64": "0.15.14", + "esbuild-windows-32": "0.15.14", + "esbuild-windows-64": "0.15.14", + "esbuild-windows-arm64": "0.15.14" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz", + "integrity": "sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz", + "integrity": "sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz", + "integrity": "sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz", + "integrity": "sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz", + "integrity": "sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz", + "integrity": "sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz", + "integrity": "sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz", + "integrity": "sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz", + "integrity": "sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz", + "integrity": "sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz", + "integrity": "sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz", + "integrity": "sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz", + "integrity": "sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz", + "integrity": "sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz", + "integrity": "sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz", + "integrity": "sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz", + "integrity": "sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz", + "integrity": "sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz", + "integrity": "sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz", + "integrity": "sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/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==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@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.15.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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-cypress": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", + "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", + "dev": true, + "dependencies": { + "globals": "^11.12.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.7.0.tgz", + "integrity": "sha512-DrOO3WZCZEwcLsnd3ohFwqCoipGRSTKTBTnLwdhqAbYZtzWl0o7D+D8ZhlmiZvABKTEl8AFsqH1GHGdybyoQmw==", + "dev": true, + "dependencies": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/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==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "peer": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/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==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "peer": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "peer": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-isnumeric": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz", + "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==", + "dependencies": { + "is-string-blank": "^1.0.1" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fast-xml-parser": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "dependencies": { + "strnum": "^1.0.4" + }, + "bin": { + "xml2js": "cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fflate": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz", + "integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", + "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "peer": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "peer": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/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==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/flatten-vertex-data": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", + "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", + "dependencies": { + "dtype": "^2.0.0" + } + }, + "node_modules/flip-pixels": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flip-pixels/-/flip-pixels-1.0.2.tgz", + "integrity": "sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA==" + }, + "node_modules/flow-parser": { + "version": "0.121.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", + "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/font-atlas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz", + "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==", + "dependencies": { + "css-font": "^1.0.0" + } + }, + "node_modules/font-measure": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz", + "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==", + "dependencies": { + "css-font": "^1.2.0" + } + }, + "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/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "peer": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/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/from2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-canvas-context": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", + "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==" + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gl-mat4": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", + "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==" + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "node_modules/gl-text": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.3.1.tgz", + "integrity": "sha512-/f5gcEMiZd+UTBJLTl3D+CkCB/0UFGTx3nflH8ZmyWcLkZhsZ1+Xx5YYkw2rgWAzgPeE35xCqBuHSoMKQVsR+w==", + "dependencies": { + "bit-twiddle": "^1.0.2", + "color-normalize": "^1.5.0", + "css-font": "^1.2.0", + "detect-kerning": "^2.1.2", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "font-atlas": "^2.1.0", + "font-measure": "^1.2.2", + "gl-util": "^3.1.2", + "is-plain-obj": "^1.1.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "parse-unit": "^1.0.1", + "pick-by-alias": "^1.2.0", + "regl": "^2.0.0", + "to-px": "^1.0.1", + "typedarray-pool": "^1.1.0" + } + }, + "node_modules/gl-util": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz", + "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==", + "dependencies": { + "is-browser": "^2.0.1", + "is-firefox": "^1.0.3", + "is-plain-obj": "^1.1.0", + "number-is-integer": "^1.0.1", + "object-assign": "^4.1.0", + "pick-by-alias": "^1.2.0", + "weak-map": "^1.0.5" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/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==", + "peer": true + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glsl-inject-defines": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", + "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", + "dependencies": { + "glsl-token-inject-block": "^1.0.0", + "glsl-token-string": "^1.0.1", + "glsl-tokenizer": "^2.0.2" + } + }, + "node_modules/glsl-resolve": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", + "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", + "dependencies": { + "resolve": "^0.6.1", + "xtend": "^2.1.2" + } + }, + "node_modules/glsl-resolve/node_modules/resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==" + }, + "node_modules/glsl-resolve/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/glsl-token-assignments": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", + "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==" + }, + "node_modules/glsl-token-defines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", + "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", + "dependencies": { + "glsl-tokenizer": "^2.0.0" + } + }, + "node_modules/glsl-token-depth": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", + "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==" + }, + "node_modules/glsl-token-descope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", + "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", + "dependencies": { + "glsl-token-assignments": "^2.0.0", + "glsl-token-depth": "^1.1.0", + "glsl-token-properties": "^1.0.0", + "glsl-token-scope": "^1.1.0" + } + }, + "node_modules/glsl-token-inject-block": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", + "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==" + }, + "node_modules/glsl-token-properties": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", + "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==" + }, + "node_modules/glsl-token-scope": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", + "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==" + }, + "node_modules/glsl-token-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", + "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==" + }, + "node_modules/glsl-token-whitespace-trim": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", + "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==" + }, + "node_modules/glsl-tokenizer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", + "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "dependencies": { + "through2": "^0.6.3" + } + }, + "node_modules/glsl-tokenizer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/glsl-tokenizer/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glsl-tokenizer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/glsl-tokenizer/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/glslify": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", + "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", + "dependencies": { + "bl": "^2.2.1", + "concat-stream": "^1.5.2", + "duplexify": "^3.4.5", + "falafel": "^2.1.0", + "from2": "^2.3.0", + "glsl-resolve": "0.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glslify-bundle": "^5.0.0", + "glslify-deps": "^1.2.5", + "minimist": "^1.2.5", + "resolve": "^1.1.5", + "stack-trace": "0.0.9", + "static-eval": "^2.0.5", + "through2": "^2.0.1", + "xtend": "^4.0.0" + }, + "bin": { + "glslify": "bin.js" + } + }, + "node_modules/glslify-bundle": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", + "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", + "dependencies": { + "glsl-inject-defines": "^1.0.1", + "glsl-token-defines": "^1.0.0", + "glsl-token-depth": "^1.1.1", + "glsl-token-descope": "^1.0.2", + "glsl-token-scope": "^1.1.1", + "glsl-token-string": "^1.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glsl-tokenizer": "^2.0.2", + "murmurhash-js": "^1.0.0", + "shallow-copy": "0.0.1" + } + }, + "node_modules/glslify-deps": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", + "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", + "dependencies": { + "@choojs/findup": "^0.2.0", + "events": "^3.2.0", + "glsl-resolve": "0.0.1", + "glsl-tokenizer": "^2.0.0", + "graceful-fs": "^4.1.2", + "inherits": "^2.0.1", + "map-limit": "0.0.1", + "resolve": "^1.0.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/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==", + "dev": true + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/happy-dom": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-6.0.4.tgz", + "integrity": "sha512-b+ID23Ms0BY08UNLymsOMG7EI2jSlwEt4cbJs938GZfeNAg+fqgkSO3TokQMgSOFoHznpjWmpVjBUL5boJ9PWw==", + "dev": true, + "dependencies": { + "css.escape": "^1.5.1", + "he": "^1.2.0", + "node-fetch": "^2.x.x", + "sync-request": "^6.1.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-hover": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz", + "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==", + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/has-passive-events": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", + "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/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==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "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", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "peer": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "peer": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/hermes-estree": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", + "integrity": "sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q==", + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.8.0.tgz", + "integrity": "sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA==", + "peer": true, + "dependencies": { + "hermes-estree": "0.8.0" + } + }, + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "peer": true, + "dependencies": { + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-profile-transformer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "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==", + "dev": true + }, + "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", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hsluv": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/hsluv/-/hsluv-0.0.3.tgz", + "integrity": "sha512-08iL2VyCRbkQKBySkSh6m8zMUa3sADAxGVWs3Z1aPcUkTJeK0ETG4Fc27tEmQBGUAXZjIsXOZqBvacuVNSC/fQ==" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-webpack-plugin-4": { + "name": "html-webpack-plugin", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/html-webpack-plugin-5": { + "name": "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==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/html-webpack-plugin-5/node_modules/@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==", + "dev": true + }, + "node_modules/html-webpack-plugin-5/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==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/html-webpack-plugin-5/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin-5/node_modules/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==", + "dev": true, + "dependencies": { + "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" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin-5/node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/html-webpack-plugin-5/node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/html-webpack-plugin-5/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/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==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idb": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/idb/-/idb-5.0.6.tgz", + "integrity": "sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw==" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-palette": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/image-palette/-/image-palette-2.1.0.tgz", + "integrity": "sha512-3ImSEWD26+xuQFdP0RWR4WSXadZwvgrFhjGNpMEapTG1tf2XrBFS2dlKK5hNgH4UIaSQlSUFRn1NeA+zULIWbQ==", + "dependencies": { + "color-id": "^1.1.0", + "pxls": "^2.0.0", + "quantize": "^1.0.2" + } + }, + "node_modules/image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", + "peer": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/immer": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", + "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "peer": true + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-base64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", + "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-blob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", + "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "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-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", + "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==" + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/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==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "peer": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-firefox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz", + "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-float-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-float-array/-/is-float-array-1.0.0.tgz", + "integrity": "sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ==" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-iexplorer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-iexplorer/-/is-iexplorer-1.0.0.tgz", + "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-mobile": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-2.2.2.tgz", + "integrity": "sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg==" + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "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-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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string-blank": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", + "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==" + }, + "node_modules/is-svg-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz", + "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==" + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "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", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "peer": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/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==", + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "peer": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "@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" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "peer": true, + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", + "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsc-android": { + "version": "250230.2.1", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", + "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==", + "peer": true + }, + "node_modules/jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "peer": true, + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jscodeshift/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "peer": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jscodeshift/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/jscodeshift/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "peer": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/jscodeshift/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "peer": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/jscodeshift/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "peer": true, + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/jscodeshift/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "peer": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsdom": { + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.2.tgz", + "integrity": "sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.0", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.9.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/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==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/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==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, + "node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/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==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "peer": true + }, + "node_modules/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==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "peer": true, + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/logkitty/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/logkitty/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/logkitty/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/logkitty/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/logkitty/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/logkitty/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logkitty/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "peer": true + }, + "node_modules/logkitty/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "peer": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-limit": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", + "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/map-limit/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "peer": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mapbox-gl": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.10.1.tgz", + "integrity": "sha512-0aHt+lFUpYfvh0kMIqXqNXqoYMuhuAsMlw87TbhWrw78Tx2zfuPI0Lx31/YPUgJ+Ire0tzQ4JnuBL7acDNXmMg==", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.0", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "minimist": "^1.2.5", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.0.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/math-log2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", + "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "peer": true + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.72.3.tgz", + "integrity": "sha512-Hb3xTvPqex8kJ1hutQNZhQadUKUwmns/Du9GikmWKBFrkiG3k3xstGAyO5t5rN9JSUEzQT6y9SWzSSOGogUKIg==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "accepts": "^1.3.7", + "async": "^3.2.2", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.8.0", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-worker": "^27.2.0", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.72.3", + "metro-cache": "0.72.3", + "metro-cache-key": "0.72.3", + "metro-config": "0.72.3", + "metro-core": "0.72.3", + "metro-file-map": "0.72.3", + "metro-hermes-compiler": "0.72.3", + "metro-inspector-proxy": "0.72.3", + "metro-minify-uglify": "0.72.3", + "metro-react-native-babel-preset": "0.72.3", + "metro-resolver": "0.72.3", + "metro-runtime": "0.72.3", + "metro-source-map": "0.72.3", + "metro-symbolicate": "0.72.3", + "metro-transform-plugins": "0.72.3", + "metro-transform-worker": "0.72.3", + "mime-types": "^2.1.27", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "temp": "0.8.3", + "throat": "^5.0.0", + "ws": "^7.5.1", + "yargs": "^15.3.1" + }, + "bin": { + "metro": "src/cli.js" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.3.tgz", + "integrity": "sha512-PTOR2zww0vJbWeeM3qN90WKENxCLzv9xrwWaNtwVlhcV8/diNdNe82sE1xIxLFI6OQuAVwNMv1Y7VsO2I7Ejrw==", + "peer": true, + "dependencies": { + "@babel/core": "^7.14.0", + "hermes-parser": "0.8.0", + "metro-source-map": "0.72.3", + "nullthrows": "^1.1.1" + } + }, + "node_modules/metro-cache": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.72.3.tgz", + "integrity": "sha512-++eyZzwkXvijWRV3CkDbueaXXGlVzH9GA52QWqTgAOgSHYp5jWaDwLQ8qpsMkQzpwSyIF4LLK9aI3eA7Xa132A==", + "peer": true, + "dependencies": { + "metro-core": "0.72.3", + "rimraf": "^2.5.4" + } + }, + "node_modules/metro-cache-key": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.72.3.tgz", + "integrity": "sha512-kQzmF5s3qMlzqkQcDwDxrOaVxJ2Bh6WRXWdzPnnhsq9LcD3B3cYqQbRBS+3tSuXmathb4gsOdhWslOuIsYS8Rg==", + "peer": true + }, + "node_modules/metro-cache/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/metro-config": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.72.3.tgz", + "integrity": "sha512-VEsAIVDkrIhgCByq8HKTWMBjJG6RlYwWSu1Gnv3PpHa0IyTjKJtB7wC02rbTjSaemcr82scldf2R+h6ygMEvsw==", + "peer": true, + "dependencies": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^26.5.2", + "metro": "0.72.3", + "metro-cache": "0.72.3", + "metro-core": "0.72.3", + "metro-runtime": "0.72.3" + } + }, + "node_modules/metro-core": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.72.3.tgz", + "integrity": "sha512-KuYWBMmLB4+LxSMcZ1dmWabVExNCjZe3KysgoECAIV+wyIc2r4xANq15GhS94xYvX1+RqZrxU1pa0jQ5OK+/6A==", + "peer": true, + "dependencies": { + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.72.3" + } + }, + "node_modules/metro-file-map": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.72.3.tgz", + "integrity": "sha512-LhuRnuZ2i2uxkpFsz1XCDIQSixxBkBG7oICAFyLyEMDGbcfeY6/NexphfLdJLTghkaoJR5ARFMiIxUg9fIY/pA==", + "peer": true, + "dependencies": { + "abort-controller": "^3.0.0", + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/metro-hermes-compiler": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.72.3.tgz", + "integrity": "sha512-QWDQASMiXNW3j8uIQbzIzCdGYv5PpAX/ZiF4/lTWqKRWuhlkP4auhVY4eqdAKj5syPx45ggpjkVE0p8hAPDZYg==", + "peer": true + }, + "node_modules/metro-inspector-proxy": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.72.3.tgz", + "integrity": "sha512-UPFkaq2k93RaOi+eqqt7UUmqy2ywCkuxJLasQ55+xavTUS+TQSyeTnTczaYn+YKw+izLTLllGcvqnQcZiWYhGw==", + "peer": true, + "dependencies": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "ws": "^7.5.1", + "yargs": "^15.3.1" + }, + "bin": { + "metro-inspector-proxy": "src/cli.js" + } + }, + "node_modules/metro-inspector-proxy/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/metro-inspector-proxy/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-inspector-proxy/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/metro-inspector-proxy/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/metro-inspector-proxy/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/metro-inspector-proxy/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-inspector-proxy/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-inspector-proxy/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-inspector-proxy/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/metro-inspector-proxy/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/metro-inspector-proxy/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-inspector-proxy/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-inspector-proxy/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/metro-inspector-proxy/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "peer": true + }, + "node_modules/metro-inspector-proxy/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "peer": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-inspector-proxy/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-minify-uglify": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.72.3.tgz", + "integrity": "sha512-dPXqtMI8TQcj0g7ZrdhC8X3mx3m3rtjtMuHKGIiEXH9CMBvrET8IwrgujQw2rkPcXiSiX8vFDbGMIlfxefDsKA==", + "peer": true, + "dependencies": { + "uglify-es": "^3.1.9" + } + }, + "node_modules/metro-react-native-babel-preset": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz", + "integrity": "sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==", + "peer": true, + "dependencies": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-react-native-babel-transformer": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.3.tgz", + "integrity": "sha512-Ogst/M6ujYrl/+9mpEWqE3zF7l2mTuftDTy3L8wZYwX1pWUQWQpfU1aJBeWiLxt1XlIq+uriRjKzKoRoIK57EA==", + "peer": true, + "dependencies": { + "@babel/core": "^7.14.0", + "babel-preset-fbjs": "^3.4.0", + "hermes-parser": "0.8.0", + "metro-babel-transformer": "0.72.3", + "metro-react-native-babel-preset": "0.72.3", + "metro-source-map": "0.72.3", + "nullthrows": "^1.1.1" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-resolver": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.72.3.tgz", + "integrity": "sha512-wu9zSMGdxpKmfECE7FtCdpfC+vrWGTdVr57lDA0piKhZV6VN6acZIvqQ1yZKtS2WfKsngncv5VbB8Y5eHRQP3w==", + "peer": true, + "dependencies": { + "absolute-path": "^0.0.0" + } + }, + "node_modules/metro-runtime": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.3.tgz", + "integrity": "sha512-3MhvDKfxMg2u7dmTdpFOfdR71NgNNo4tzAyJumDVQKwnHYHN44f2QFZQqpPBEmqhWlojNeOxsqFsjYgeyMx6VA==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "node_modules/metro-source-map": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.3.tgz", + "integrity": "sha512-eNtpjbjxSheXu/jYCIDrbNEKzMGOvYW6/ePYpRM7gDdEagUOqKOCsi3St8NJIQJzZCsxD2JZ2pYOiomUSkT1yQ==", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.72.3", + "nullthrows": "^1.1.1", + "ob1": "0.72.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.3.tgz", + "integrity": "sha512-eXG0NX2PJzJ/jTG4q5yyYeN2dr1cUqUaY7worBB0SP5bRWRc3besfb+rXwfh49wTFiL5qR0oOawkU4ZiD4eHXw==", + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.72.3", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.72.3.tgz", + "integrity": "sha512-D+TcUvCKZbRua1+qujE0wV1onZvslW6cVTs7dLCyC2pv20lNHjFr1GtW01jN2fyKR2PcRyMjDCppFd9VwDKnSg==", + "peer": true, + "dependencies": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.14.0", + "nullthrows": "^1.1.1" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.72.3.tgz", + "integrity": "sha512-WsuWj9H7i6cHuJuy+BgbWht9DK5FOgJxHLGAyULD5FJdTG9rSMFaHDO5WfC0OwQU5h4w6cPT40iDuEGksM7+YQ==", + "peer": true, + "dependencies": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.4.0", + "metro": "0.72.3", + "metro-babel-transformer": "0.72.3", + "metro-cache": "0.72.3", + "metro-cache-key": "0.72.3", + "metro-hermes-compiler": "0.72.3", + "metro-source-map": "0.72.3", + "metro-transform-plugins": "0.72.3", + "nullthrows": "^1.1.1" + } + }, + "node_modules/metro/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/metro/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "peer": true + }, + "node_modules/metro/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/metro/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/metro/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "node_modules/metro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/metro/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/metro/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/metro/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/metro/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "peer": true + }, + "node_modules/metro/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "peer": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "peer": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/monaco-editor": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.34.1.tgz", + "integrity": "sha512-FKc80TyiMaruhJKKPz5SpJPIjL+dflGvz4CpuThaPMc94AyN7SeC9HQ8hrvaxX7EyHdJcUY5i4D0gNyJj1vSZQ==", + "dev": true, + "peer": true + }, + "node_modules/monaco-editor-vue": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/monaco-editor-vue/-/monaco-editor-vue-1.0.10.tgz", + "integrity": "sha512-FO6rioCXkonKmDZYB2WDhDNekXuNJgjxoAPfzwYX+5NTMaxRJcWl3bcUByRpL6LQQ1bTEYLZ+ZdDpoJ+la2trQ==", + "dependencies": { + "monaco-editor": "^0.19.3", + "vue": "^2.6.11" + } + }, + "node_modules/monaco-editor-vue/node_modules/@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "dependencies": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "node_modules/monaco-editor-vue/node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/monaco-editor-vue/node_modules/monaco-editor": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.19.3.tgz", + "integrity": "sha512-2n1vJBVQF2Hhi7+r1mMeYsmlf18hjVb6E0v5SoMZyb4aeOmYPKun+CE3gYpiNA1KEvtSdaDHFBqH9d7Wd9vREg==" + }, + "node_modules/monaco-editor-vue/node_modules/vue": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "dependencies": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "node_modules/mouse-change": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz", + "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==", + "dependencies": { + "mouse-event": "^1.0.0" + } + }, + "node_modules/mouse-event": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz", + "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==" + }, + "node_modules/mouse-event-offset": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", + "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==" + }, + "node_modules/mouse-wheel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz", + "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==", + "dependencies": { + "right-now": "^1.0.0", + "signum": "^1.0.0", + "to-px": "^1.0.1" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mumath": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/mumath/-/mumath-3.3.4.tgz", + "integrity": "sha512-VAFIOG6rsxoc7q/IaY3jdjmrsuX9f15KlRLYTHmixASBZkZEKC1IFqE2BC5CdhXmK6WLM1Re33z//AGmeRI6FA==", + "deprecated": "Redundant dependency in your project.", + "dependencies": { + "almost-equal": "^1.1.0" + } + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "peer": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/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==", + "dev": true + }, + "node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/new-date": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/new-date/-/new-date-1.0.3.tgz", + "integrity": "sha512-0fsVvQPbo2I18DT2zVHpezmeeNYV2JaJSrseiHLc17GNOxJzUdx5mvSigPu8LtIfZSij5i1wXnXFspEs2CD6hA==", + "dependencies": { + "@segment/isodate": "1.0.3" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/nocache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", + "peer": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "peer": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/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==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "peer": true + }, + "node_modules/node-polyfill-webpack-plugin": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-2.0.1.tgz", + "integrity": "sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==", + "dependencies": { + "assert": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^4.22.0", + "events": "^3.3.0", + "filter-obj": "^2.0.2", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^4.0.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tty-browserify": "^0.0.1", + "type-fest": "^2.14.0", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.1.2" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": ">=5" + } + }, + "node_modules/node-polyfill-webpack-plugin/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/node-sql-parser": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.6.4.tgz", + "integrity": "sha512-OPzbsiN5VX37/HM5BgGxcoDt1ggvFUc6gdzyQzoPjk8orTOHBlgHuDUugP5oRU+CcOw8GniilvV3pt5FBxp47A==", + "dependencies": { + "big-integer": "^1.6.48" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "peer": true, + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-svg-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz", + "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==" + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "peer": true + }, + "node_modules/number-is-integer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz", + "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==", + "dependencies": { + "is-finite": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "dev": true + }, + "node_modules/ob1": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.3.tgz", + "integrity": "sha512-OnVto25Sj7Ghp0vVm2THsngdze3tVq0LOg9LUHsAVXMecpqOP0Y8zaATW8M9gEgs2lNEAcCqV0P/hlmOPhVRvg==", + "peer": true + }, + "node_modules/obj-case": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/obj-case/-/obj-case-0.2.1.tgz", + "integrity": "sha512-PquYBBTy+Y6Ob/O2574XHhDtHJlV1cJHMCgW+rDRc9J5hhmRelJB3k5dTK/3cVmFVtzvAKuENeuLpoyTzMzkOg==" + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "peer": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "peer": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "peer": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "peer": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/paho-mqtt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/paho-mqtt/-/paho-mqtt-1.1.0.tgz", + "integrity": "sha512-KPbL9KAB0ASvhSDbOrZBaccXS+/s7/LIofbPyERww8hM5Ko71GUJQ6Nmg0BWqj8phAIT8zdf/Sd/RftHU9i2HA==" + }, + "node_modules/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parenthesis": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", + "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==" + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", + "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==", + "dependencies": { + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==" + }, + "node_modules/parse-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", + "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==" + }, + "node_modules/parse5": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/pick-by-alias": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", + "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "peer": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "peer": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "peer": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "peer": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/plotly.js": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.16.3.tgz", + "integrity": "sha512-l/2vpjJxiaNOdsnRx/sK8W2b+25JP4XFrkT5Lo4i5b5WNxrsqK7QdProvfflufZkHmByuFe6YnrOv9JNSiE6ZA==", + "dependencies": { + "@plotly/d3": "3.8.0", + "@plotly/d3-sankey": "0.7.2", + "@plotly/d3-sankey-circular": "0.33.1", + "@turf/area": "^6.4.0", + "@turf/bbox": "^6.4.0", + "@turf/centroid": "^6.0.2", + "canvas-fit": "^1.5.0", + "color-alpha": "1.0.4", + "color-normalize": "1.5.0", + "color-parse": "1.3.8", + "color-rgba": "2.1.1", + "country-regex": "^1.1.0", + "d3-force": "^1.2.1", + "d3-format": "^1.4.5", + "d3-geo": "^1.12.1", + "d3-geo-projection": "^2.9.0", + "d3-hierarchy": "^1.1.9", + "d3-interpolate": "^1.4.0", + "d3-time": "^1.1.0", + "d3-time-format": "^2.2.3", + "fast-isnumeric": "^1.1.4", + "gl-mat4": "^1.2.0", + "gl-text": "^1.3.1", + "glslify": "^7.1.1", + "has-hover": "^1.0.1", + "has-passive-events": "^1.0.0", + "is-mobile": "^2.2.2", + "mapbox-gl": "1.10.1", + "mouse-change": "^1.4.0", + "mouse-event-offset": "^3.0.2", + "mouse-wheel": "^1.2.0", + "native-promise-only": "^0.8.1", + "parse-svg-path": "^0.1.2", + "point-in-polygon": "^1.1.0", + "polybooljs": "^1.2.0", + "probe-image-size": "^7.2.3", + "regl": "npm:@plotly/regl@^2.1.2", + "regl-error2d": "^2.0.12", + "regl-line2d": "^3.1.2", + "regl-scatter2d": "^3.2.8", + "regl-splom": "^1.0.14", + "strongly-connected-components": "^1.0.1", + "superscript-text": "^1.0.0", + "svg-path-sdf": "^1.1.3", + "tinycolor2": "^1.4.2", + "to-px": "1.0.1", + "topojson-client": "^3.1.0", + "webgl-context": "^2.2.0", + "world-calendars": "^1.0.3" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" + }, + "node_modules/polybooljs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.0.tgz", + "integrity": "sha512-mKjR5nolISvF+q2BtC1fi/llpxBPTQ3wLWN8+ldzdw2Hocpc8C72ZqnamCM4Z6z+68GVVjkeM01WJegQmZ8MEQ==" + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "peer": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/pretty-format/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pretty-format/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/pretty-format/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/probe-image-size": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", + "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pxls": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/pxls/-/pxls-2.3.2.tgz", + "integrity": "sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw==", + "dependencies": { + "arr-flatten": "^1.1.0", + "compute-dims": "^1.1.0", + "flip-pixels": "^1.0.2", + "is-browser": "^2.1.0", + "is-buffer": "^2.0.3", + "to-uint8": "^1.4.1" + } + }, + "node_modules/qrcode": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/qrcode/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/qrcode/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/qrcode/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qrcode/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/quantize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quantize/-/quantize-1.0.2.tgz", + "integrity": "sha512-25P7wI2UoDbIQsQp50ARkt+5pwPsOq7G/BqvT5xAbapnRoNWMN8/p55H9TXd5MuENiJnm5XICB2H2aDZGwts7w==", + "engines": { + "node": ">=0.10.21" + } + }, + "node_modules/quasar": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.10.2.tgz", + "integrity": "sha512-y6suu0f2hJKrnFPHzx+p2EBVGzDF6xHaqYGkDIsMNkhxsrO9Qi2+dZCjq1J6+48EJiqPEOn8t9X/gT7yLSSnLw==", + "engines": { + "node": ">= 10.18.1", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", + "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.0.tgz", + "integrity": "sha512-Rw7FzYOOzcfyUPaAm9P3g0tFdGqGq2LLiAI+wjYcp6CsF3DeeMrRS3HZAho4s273C29G/DJhx0e8BpRE/QZNGg==", + "peer": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/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==", + "peer": true + }, + "node_modules/react-native": { + "version": "0.70.6", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.70.6.tgz", + "integrity": "sha512-xtQdImPHnwgraEx3HIZFOF+D1hJ9bC5mfpIdUGoMHRws6OmvHAjmFpO6qfdnaQ29vwbmZRq7yf14sbury74R/w==", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^27.0.1", + "@react-native-community/cli": "9.3.2", + "@react-native-community/cli-platform-android": "9.3.1", + "@react-native-community/cli-platform-ios": "9.3.0", + "@react-native/assets": "1.0.0", + "@react-native/normalize-color": "2.0.0", + "@react-native/polyfills": "2.0.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "invariant": "^2.2.4", + "jsc-android": "^250230.2.1", + "memoize-one": "^5.0.0", + "metro-react-native-babel-transformer": "0.72.3", + "metro-runtime": "0.72.3", + "metro-source-map": "0.72.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "4.24.0", + "react-native-codegen": "^0.70.6", + "react-native-gradle-plugin": "^0.70.3", + "react-refresh": "^0.4.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "^0.22.0", + "stacktrace-parser": "^0.1.3", + "use-sync-external-store": "^1.0.0", + "whatwg-fetch": "^3.0.0", + "ws": "^6.1.4" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "18.1.0" + } + }, + "node_modules/react-native-codegen": { + "version": "0.70.6", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.70.6.tgz", + "integrity": "sha512-kdwIhH2hi+cFnG5Nb8Ji2JwmcCxnaOOo9440ov7XDzSvGfmUStnCzl+MCW8jLjqHcE4icT7N9y+xx4f50vfBTw==", + "peer": true, + "dependencies": { + "@babel/parser": "^7.14.0", + "flow-parser": "^0.121.0", + "jscodeshift": "^0.13.1", + "nullthrows": "^1.1.1" + } + }, + "node_modules/react-native-get-random-values": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.8.0.tgz", + "integrity": "sha512-H/zghhun0T+UIJLmig3+ZuBCvF66rdbiWUfRSNS6kv5oDSpa1ZiVyvRWtuPesQpT8dXj+Bv7WJRQOUP+5TB1sA==", + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, + "node_modules/react-native-gradle-plugin": { + "version": "0.70.3", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", + "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==", + "peer": true + }, + "node_modules/react-native/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "peer": true, + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", + "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readable-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "peer": true + }, + "node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "peer": true, + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "peer": true + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "peer": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "peer": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regex-regex/-/regex-regex-1.0.0.tgz", + "integrity": "sha512-FPbEhFTLpxKNgHKay3zMfkHzFK2ebViAlyvsz5euO4kwekH0T6fAL4Sdo2CgQ7Y1tGB5HqQm8SBq7pW5GegvVA==" + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "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==", + "peer": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", + "peer": true + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "peer": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/regl": { + "name": "@plotly/regl", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz", + "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==" + }, + "node_modules/regl-error2d": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz", + "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==", + "dependencies": { + "array-bounds": "^1.0.1", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-line2d": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.2.tgz", + "integrity": "sha512-nmT7WWS/WxmXAQMkgaMKWXaVmwJ65KCrjbqHGOUjjqQi6shfT96YbBOvelXwO9hG7/hjvbzjtQ2UO0L3e7YaXQ==", + "dependencies": { + "array-bounds": "^1.0.1", + "array-find-index": "^1.0.2", + "array-normalize": "^1.1.4", + "color-normalize": "^1.5.0", + "earcut": "^2.1.5", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0" + } + }, + "node_modules/regl-scatter2d": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.2.8.tgz", + "integrity": "sha512-bqrqJyeHkGBa9mEfuBnRd7FUtdtZ1l+gsM2C5Ugr1U3vJG5K3mdWdVWtOAllZ5FHHyWJV/vgjVvftgFUg6CDig==", + "dependencies": { + "@plotly/point-cluster": "^3.1.9", + "array-range": "^1.0.1", + "array-rearrange": "^2.2.2", + "clamp": "^1.0.1", + "color-id": "^1.1.0", + "color-normalize": "^1.5.0", + "color-rgba": "^2.1.1", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "image-palette": "^2.1.0", + "is-iexplorer": "^1.0.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-splom": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz", + "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==", + "dependencies": { + "array-bounds": "^1.0.1", + "array-range": "^1.0.1", + "color-alpha": "^1.0.4", + "flatten-vertex-data": "^1.0.2", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "raf": "^3.4.1", + "regl-scatter2d": "^3.2.3" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "peer": true + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "peer": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/right-now": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", + "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "node_modules/rollup-plugin-inject/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dependencies": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "node_modules/rollup-plugin-polyfill-node": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.2.tgz", + "integrity": "sha512-5GMywXiLiuQP6ZzED/LO/Q0HyDi2W6b8VN+Zd3oB0opIjyRs494Me2ZMaqKWDNbGiW4jvvzl6L2n4zRgxS9cSQ==", + "dependencies": { + "@rollup/plugin-inject": "^4.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/rudder-sdk-js": { + "version": "2.22.3", + "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.22.3.tgz", + "integrity": "sha512-yCosdPm4Ozr9kuv0G7owcALSyu9nFSWb2ZCh/TPGwOYL57PoixiAAym37k1N8jsq26H4IRHkJ+AGAW4y/TpQLw==" + }, + "node_modules/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "peer": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", + "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", + "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "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/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/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==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "peer": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/signum": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signum/-/signum-1.0.0.tgz", + "integrity": "sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==" + }, + "node_modules/sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "peer": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "peer": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "peer": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "peer": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "peer": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/speed-measure-webpack-plugin": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.4.2.tgz", + "integrity": "sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "webpack": "^1 || ^2 || ^3 || ^4 || ^5" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/speed-measure-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "peer": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "peer": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", + "engines": { + "node": "*" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "peer": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/start-server-and-test": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.14.0.tgz", + "integrity": "sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==", + "dev": true, + "dependencies": { + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.2", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "6.0.0" + }, + "bin": { + "server-test": "src/bin/start.js", + "start-server-and-test": "src/bin/start.js", + "start-test": "src/bin/start.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/start-server-and-test/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/start-server-and-test/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/start-server-and-test/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/start-server-and-test/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/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==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "peer": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/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==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-split-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", + "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", + "dependencies": { + "parenthesis": "^3.1.5" + } + }, + "node_modules/string-to-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz", + "integrity": "sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q==", + "dependencies": { + "atob-lite": "^2.0.0", + "is-base64": "^0.1.0" + } + }, + "node_modules/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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/strongly-connected-components": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz", + "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==" + }, + "node_modules/style-dictionary": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-3.7.0.tgz", + "integrity": "sha512-BL4AQS5kNDBXbFHWJhlCve6+ojnHgHkiwhf2nNByU698elXWdyK5b27OprphT4q0/tJ52zB+lodhqxIxbNOajQ==", + "dependencies": { + "chalk": "^4.0.0", + "change-case": "^4.1.2", + "commander": "^8.3.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "json5": "^2.2.0", + "jsonc-parser": "^3.0.0", + "lodash": "^4.17.15", + "tinycolor2": "^1.4.1" + }, + "bin": { + "style-dictionary": "bin/style-dictionary" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/style-dictionary/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/style-dictionary/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/style-dictionary/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/style-dictionary/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/style-dictionary/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/style-dictionary/node_modules/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==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/style-dictionary/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/style-dictionary/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "peer": true + }, + "node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/superscript-text": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/superscript-text/-/superscript-text-1.0.0.tgz", + "integrity": "sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==" + }, + "node_modules/svg-path-bounds": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz", + "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==", + "dependencies": { + "abs-svg-path": "^0.1.1", + "is-svg-path": "^1.0.1", + "normalize-svg-path": "^1.0.0", + "parse-svg-path": "^0.1.2" + } + }, + "node_modules/svg-path-bounds/node_modules/normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "dependencies": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, + "node_modules/svg-path-sdf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz", + "integrity": "sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==", + "dependencies": { + "bitmap-sdf": "^1.0.0", + "draw-svg-path": "^1.0.0", + "is-svg-path": "^1.0.1", + "parse-svg-path": "^0.1.2", + "svg-path-bounds": "^1.0.1" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha512-jtnWJs6B1cZlHs9wPG7BrowKxZw/rf6+UpGAkr8AaYmiTyTO7zQlLoST8zx/8TcUPnZmeBoB+H8ARuHZaSijVw==", + "engines": [ + "node >=0.8.0" + ], + "peer": true, + "dependencies": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==", + "peer": true, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.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==", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "peer": true + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/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/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-hashes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tiny-hashes/-/tiny-hashes-1.0.1.tgz", + "integrity": "sha512-knIN5zj4fl7kW4EBU5sLP20DWUvi/rVouvJezV0UAym2DkQaqm365Nyc8F3QEiOvunNDMxR8UhcXd1d5g+Wg1g==" + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "engines": { + "node": "*" + } + }, + "node_modules/tinypool": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz", + "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + }, + "node_modules/tinyspy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", + "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "peer": true + }, + "node_modules/to-array-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz", + "integrity": "sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==", + "dependencies": { + "flatten-vertex-data": "^1.0.2", + "is-blob": "^2.0.1", + "string-to-arraybuffer": "^1.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-float32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz", + "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==" + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-px": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.0.1.tgz", + "integrity": "sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==", + "dependencies": { + "parse-unit": "^1.0.1" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "peer": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-uint8": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/to-uint8/-/to-uint8-1.4.1.tgz", + "integrity": "sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg==", + "dependencies": { + "arr-flatten": "^1.1.0", + "clamp": "^1.0.1", + "is-base64": "^0.1.0", + "is-float-array": "^1.0.0", + "to-array-buffer": "^3.0.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "dependencies": { + "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" + } + }, + "node_modules/topojson-client/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", + "integrity": "sha512-kkgkuqR/jKdKO5oh/I2SMu2dGbLXoJq0zkdgbxaqYK+hr9S9edwVVGf+tMUFTx2gH9TN2+Zu9JZ/Njonb3cjhA==" + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typedarray-pool": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", + "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", + "dependencies": { + "bit-twiddle": "^1.0.0", + "dup": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", + "peer": true, + "dependencies": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-es/node_modules/commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "peer": true + }, + "node_modules/ulid": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz", + "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==", + "bin": { + "ulid": "bin/cli.js" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + }, + "node_modules/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==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "peer": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.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==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "peer": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universal-cookie": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz", + "integrity": "sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==", + "dependencies": { + "@types/cookie": "^0.3.3", + "cookie": "^0.4.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "peer": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "peer": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "peer": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "peer": true + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", + "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==" + }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "peer": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peer": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/utils-copy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/utils-copy/-/utils-copy-1.1.1.tgz", + "integrity": "sha512-+NhJVV+PcxjdpkMrVTqXhQHPldlFGca5XR9YnGyNn7kQ0fMi+DqNLzdnhJ4TJ1HNy/HzB7c+FPg3y+4icY99ZA==", + "dependencies": { + "const-pinf-float64": "^1.0.0", + "object-keys": "^1.0.9", + "type-name": "^2.0.0", + "utils-copy-error": "^1.0.0", + "utils-indexof": "^1.0.0", + "utils-regex-from-string": "^1.0.0", + "validate.io-array": "^1.0.3", + "validate.io-buffer": "^1.0.1", + "validate.io-nonnegative-integer": "^1.0.0" + } + }, + "node_modules/utils-copy-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-copy-error/-/utils-copy-error-1.0.1.tgz", + "integrity": "sha512-RbJcGPZ6Ru2HQk9SWkvbdWNPX58pt4MO5uXsOQRu4LEGWB3LglkRrmnE/Ph1qWg6ywQ0qj95wTz1OeqQ2l8DCA==", + "dependencies": { + "object-keys": "^1.0.9", + "utils-copy": "^1.1.0" + } + }, + "node_modules/utils-indexof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-indexof/-/utils-indexof-1.0.0.tgz", + "integrity": "sha512-76QBfRJpn4A0P5uTO1x00x+Yog36w2Pab0n+aT9UfUvVa4l+e8k3p7YwNpDvfQ6+aKGZdxZpxcNotNS4YjFcyg==", + "dependencies": { + "validate.io-array-like": "^1.0.1", + "validate.io-integer-primitive": "^1.0.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/utils-regex-from-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz", + "integrity": "sha512-xKfdmEF19iUu9TKxFiohQUlQTuqYdV80/CxHiudVI37iEV/OA4HHlXZoc4qvuO1B74EcBVpErBreRO/dpdLeYA==", + "dependencies": { + "regex-regex": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" + }, + "node_modules/validate.io-array-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz", + "integrity": "sha512-rGLiN0cvY9OWzQcWP+RtqZR/MK9RUz3gKDTCcRLtEQ/BvlanMF5PyqtVIN+CgrIBCv/ypfme9v7r4yMJPYpbNA==", + "dependencies": { + "const-max-uint32": "^1.0.2", + "validate.io-integer-primitive": "^1.0.0" + } + }, + "node_modules/validate.io-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz", + "integrity": "sha512-6Tad+/QYOxWEXsesKYak1mHOzGdPYS4QeHFImWn7ECi4GR0x3vh7+6+1yoLKNXiklKuTFOxHLG3kZy9tPX0GvQ==" + }, + "node_modules/validate.io-integer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", + "dependencies": { + "validate.io-number": "^1.0.3" + } + }, + "node_modules/validate.io-integer-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz", + "integrity": "sha512-4ARGKA4FImVWJgrgttLYsYJmDGwxlhLfDCdq09gyVgohLKKRUfD3VAo1L2vTRCLt6hDhDtFKdZiuYUTWyBggwg==", + "dependencies": { + "validate.io-number-primitive": "^1.0.0" + } + }, + "node_modules/validate.io-matrix-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz", + "integrity": "sha512-86mqLUIkZCRAOVKZvpCB7sDCw1dKBjBkY+C6WO/wLo/jQx0sOqQZz3LLtDw0DCfuAKxRuhSmIpX3nzr0nWrbdw==" + }, + "node_modules/validate.io-ndarray-like": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz", + "integrity": "sha512-OV85AosxraPFSXJwzv/d7Cu5/dLiyLtsHmxtHTJcHW1N0uscd0eJ2df1Zk+HdID0eUctUllW/1YuQPUJFv1pTA==" + }, + "node_modules/validate.io-nonnegative-integer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz", + "integrity": "sha512-uOMekPwcl84yg8NR7zgIZCZ9pHCtd9CK1Ri51N+ZJLTe1HyLbmdFdy7ZmfkiHkMvB1pOxeQmd1/LBjKhUD1L3A==", + "dependencies": { + "validate.io-integer": "^1.0.5" + } + }, + "node_modules/validate.io-number": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" + }, + "node_modules/validate.io-number-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz", + "integrity": "sha512-8rlCe7N0TRTd50dwk4WNoMXNbX/4+RdtqE3TO6Bk0GJvAgbQlfL5DGr/Pl9ZLbWR6CutMjE2cu+yOoCnFWk+Qw==" + }, + "node_modules/validate.io-positive-integer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz", + "integrity": "sha512-eg4LSdyqjICNUZWRilcQ5l+YayRlu6yi+GQsWw1bCmtG9yayOPmLa1fPymEHPPhbvWPAv3w0LLbCsf03pBHZkg==", + "dependencies": { + "validate.io-integer": "^1.0.5" + } + }, + "node_modules/validate.io-string-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz", + "integrity": "sha512-TORbkLMdOFkEbPtfdx76FSVQGSAzyUEMxI+pBq5pfFm1ZzIesP+XiGc6eIK75aKu7RA7a8EcqUv5OrY5wfog5w==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", + "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-monaco-editor": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-monaco-editor/-/vite-plugin-monaco-editor-1.1.0.tgz", + "integrity": "sha512-IvtUqZotrRoVqwT0PBBDIZPNraya3BxN/bfcNfnxZ5rkJiGcNtO5eAOWWSgT7zullIAEqQwxMU83yL9J5k7gww==", + "dev": true, + "peerDependencies": { + "monaco-editor": ">=0.33.0" + } + }, + "node_modules/vitest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.18.1.tgz", + "integrity": "sha512-4F/1K/Vn4AvJwe7i2YblR02PT5vMKcw9KN4unDq2KD0YcSxX0B/6D6Qu9PJaXwVuxXMFTQ5ovd4+CQaW3bwofA==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.1", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "tinypool": "^0.2.4", + "tinyspy": "^1.0.0", + "vite": "^2.9.12 || ^3.0.0-0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/ui": "*", + "c8": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "c8": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "peer": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/vue": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz", + "integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-sfc": "3.2.45", + "@vue/runtime-dom": "3.2.45", + "@vue/server-renderer": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/vue-drag-resize": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/vue-drag-resize/-/vue-drag-resize-1.5.4.tgz", + "integrity": "sha512-SR3U7n6TAZEBgP7zw7bR9mjtAlYBjqIoaWTDPz5HXN/nYhOxKSA31aD7p71fmq1jtyt9reAnCx62valNL9ZAcg==", + "dependencies": { + "vue-drag-resize": "^1.5.0-rc3" + }, + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz", + "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/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==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-i18n": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz", + "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-monaco-singleline": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vue-monaco-singleline/-/vue-monaco-singleline-1.1.1.tgz", + "integrity": "sha512-zRZQCLi73VAtIdtdr8asUPOzh9gNx/TMvxMPAeWps8gHD596zqqPg4PGgP5ovNHuUaIwLmZcyYtuB8DqHSz/BQ==", + "dependencies": { + "core-js": "^3.6.5", + "monaco-editor-vue": "^1.0.10", + "vue": "^2.6.11" + } + }, + "node_modules/vue-monaco-singleline/node_modules/@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "dependencies": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "node_modules/vue-monaco-singleline/node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/vue-monaco-singleline/node_modules/vue": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "dependencies": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "node_modules/vue-router": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz", + "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==", + "dependencies": { + "@vue/devtools-api": "^6.4.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.9.tgz", + "integrity": "sha512-Yoy5phgvGqyF98Fb4mYqboR4Q149jrdcGv5kSmufXJUq++RZJ2iMVG0g6zl+v3t4ORVWkQmRpsV4x2szufZ0LQ==", + "dev": true, + "dependencies": { + "@volar/vue-typescript": "0.38.9" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vue3-grid-layout": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vue3-grid-layout/-/vue3-grid-layout-1.0.0.tgz", + "integrity": "sha512-rFiHnlBFxkY9ojh0YB+cSKCE9A9/mhdbgaPARWD7r2yHPWxV9tHDPbMAN+uycsIDF7ikBpNgeQ9PfeiGaXHUWw==", + "dependencies": { + "@interactjs/actions": "^1.10.2", + "@interactjs/auto-start": "^1.10.2", + "@interactjs/dev-tools": "^1.10.2", + "@interactjs/interactjs": "^1.10.2", + "@interactjs/modifiers": "^1.10.2", + "element-resize-detector": "^1.2.1", + "lodash": "^4.17.21" + } + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/wait-on": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz", + "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==", + "dev": true, + "dependencies": { + "axios": "^0.21.1", + "joi": "^17.4.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.1.0" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "peer": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" + }, + "node_modules/webgl-context": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz", + "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==", + "dependencies": { + "get-canvas-context": "^1.0.1" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-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==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.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" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/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==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/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==", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "peer": true + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "peer": true + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "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/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/world-calendars": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.3.tgz", + "integrity": "sha512-sAjLZkBnsbHkHWVhrsCU5Sa/EVuf9QqgvrN8zyJ2L/F9FR9Oc6CvVK0674+PGAtmmmYQMH98tCUSO4QLQv3/TQ==", + "dependencies": { + "object-assign": "^4.1.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xstate": { + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.34.0.tgz", + "integrity": "sha512-MFnYz7cJrWuXSZ8IPkcCyLB1a2T3C71kzMeShXKmNaEjBR/JQebKZPHTtxHKZpymESaWO31rA3IQ30TC6LW+sw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/xstate" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + }, + "node_modules/zen-observable-ts": { + "version": "0.8.19", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.19.tgz", + "integrity": "sha512-u1a2rpE13G+jSzrg3aiCqXU5tN2kw41b+cBZGmnc+30YimdkKiDj9bTowcB41eL77/17RF/h+393AuVgShyheQ==", + "dependencies": { + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } + }, + "node_modules/zen-observable-ts/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/zen-push": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/zen-push/-/zen-push-0.2.1.tgz", + "integrity": "sha512-Qv4qvc8ZIue51B/0zmeIMxpIGDVhz4GhJALBvnKs/FRa2T7jy4Ori9wFwaHVt0zWV7MIFglKAHbgnVxVTw7U1w==", + "dependencies": { + "zen-observable": "^0.7.0" + } + }, + "node_modules/zen-push/node_modules/zen-observable": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.7.1.tgz", + "integrity": "sha512-OI6VMSe0yeqaouIXtedC+F55Sr6r9ppS7+wTbSexkYdHbdt4ctTuPNXP/rwm7GTVI63YBc+EBT0b0tl7YnJLRg==" + } + }, + "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" + } + }, + "@aws-amplify/analytics": { + "version": "5.2.28", + "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-5.2.28.tgz", + "integrity": "sha512-eoeAd7wMTjG0D/fUS28GCbBEcyaJ3jAumtcqsvQUOHh7JQYaZ+Jbo2HfvCla3NSMb0kPgRXnxtL9MheXVZ1Pag==", + "requires": { + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-firehose": "3.6.1", + "@aws-sdk/client-kinesis": "3.6.1", + "@aws-sdk/client-personalize-events": "3.6.1", + "@aws-sdk/client-pinpoint": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "lodash": "^4.17.20", + "uuid": "^3.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@aws-amplify/api": { + "version": "4.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-4.0.61.tgz", + "integrity": "sha512-sJGIbdG6gLmm+pykYjuiMuuLquR/3udjRsE4q987CvF4CNuJXtfN8wYzgZMOr9CUdorXZfGzZHRiIUbLgqH+Kg==", + "requires": { + "@aws-amplify/api-graphql": "2.3.25", + "@aws-amplify/api-rest": "2.0.61" + } + }, + "@aws-amplify/api-graphql": { + "version": "2.3.25", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-2.3.25.tgz", + "integrity": "sha512-ZpQdtLYzY/0X6eWbYmiVBlxUG4oLcbTdtXTu853UWez/CfV0tESPzuCe3/UcBmwAOLUqSgbZDNkPUaQCnXJVzw==", + "requires": { + "@aws-amplify/api-rest": "2.0.61", + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "@aws-amplify/pubsub": "4.5.11", + "graphql": "15.8.0", + "uuid": "^3.2.1", + "zen-observable-ts": "0.8.19" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@aws-amplify/api-rest": { + "version": "2.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-2.0.61.tgz", + "integrity": "sha512-iyhLpa+OqNCnRTWPRLq1/NjH4DqV48zckKLDihiAtA0tE/tyzQ203Ed3EIoTCWL96jSL3IDunQPkXQ7W8ZOwjA==", + "requires": { + "@aws-amplify/core": "4.7.12", + "axios": "0.26.0" + }, + "dependencies": { + "axios": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", + "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", + "requires": { + "follow-redirects": "^1.14.8" + } + } + } + }, + "@aws-amplify/auth": { + "version": "4.6.14", + "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-4.6.14.tgz", + "integrity": "sha512-fEgO5KqT1qlxhEoExsDz9JQStEOCr+ShROdZnZ3h4DXdsbi/xHdlg4WxDhoHJvjepMSx4wzuGXFn4loTPHh5Jw==", + "requires": { + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "amazon-cognito-identity-js": "5.2.12", + "crypto-js": "^4.1.1" + } + }, + "@aws-amplify/cache": { + "version": "4.0.63", + "resolved": "https://registry.npmjs.org/@aws-amplify/cache/-/cache-4.0.63.tgz", + "integrity": "sha512-UB9wzqYpiB5/L6Q8A5KXCAlbfJbgbUUiX4eW+ue3qNMNf4+9ym2UeOXPPXuZNO/wgKyiTYmzHLjA92o7xvxoRg==", + "requires": { + "@aws-amplify/core": "4.7.12" + } + }, + "@aws-amplify/core": { + "version": "4.7.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-4.7.12.tgz", + "integrity": "sha512-TVHvbm6ay7VY3a6x4NHpbxh1VOld0GTV+9yka0OpCIrtAgBLu2BegYfDUjvhiGFKYvdzS0NUa0myM8Ne9SUVIg==", + "requires": { + "@aws-crypto/sha256-js": "1.0.0-alpha.0", + "@aws-sdk/client-cloudwatch-logs": "3.6.1", + "@aws-sdk/client-cognito-identity": "3.6.1", + "@aws-sdk/credential-provider-cognito-identity": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-hex-encoding": "3.6.1", + "universal-cookie": "^4.0.4", + "zen-observable-ts": "0.8.19" + } + }, + "@aws-amplify/datastore": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-3.14.4.tgz", + "integrity": "sha512-DL9H6u8OQ3H4Z6vGPcu++CvIMAZj1310GIo7c7W7YZIzZcCf4SkYPs+StEChayODtjLqYlRDN/FHjZQUtHXIQQ==", + "requires": { + "@aws-amplify/api": "4.0.61", + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/core": "4.7.12", + "@aws-amplify/pubsub": "4.5.11", + "amazon-cognito-identity-js": "5.2.12", + "idb": "5.0.6", + "immer": "9.0.6", + "ulid": "2.3.0", + "uuid": "3.3.2", + "zen-observable-ts": "0.8.19", + "zen-push": "0.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } + }, + "@aws-amplify/geo": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@aws-amplify/geo/-/geo-1.3.24.tgz", + "integrity": "sha512-ffEvGQOd9rLny5FRH1BOjM/uwP95HcJ06o/hah6xLiYI4qJR1wU72ooz33UdcjLVRp6xNZs210krxxeQu7SR0g==", + "requires": { + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-location": "3.186.0", + "@turf/boolean-clockwise": "6.5.0", + "camelcase-keys": "6.2.2" + } + }, + "@aws-amplify/interactions": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@aws-amplify/interactions/-/interactions-4.1.9.tgz", + "integrity": "sha512-RQ0fto8v0IzNokpRWDgK2EZsd2uYoFl8LyBpjTT2HGOwLjNnF6qFWpH8qe/cTdNQGANZhb9VNy+Y06aQdhAovw==", + "requires": { + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-lex-runtime-service": "3.186.0", + "@aws-sdk/client-lex-runtime-v2": "3.186.0", + "base-64": "1.0.0", + "fflate": "0.7.3", + "pako": "2.0.4" + } + }, + "@aws-amplify/predictions": { + "version": "4.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/predictions/-/predictions-4.0.61.tgz", + "integrity": "sha512-WAZmf5dXmgTx6BCnEU7+zYaDsiXRH7YjzgC/eR1JT/Y2rmuA33U2wAymNZEZJ9tvGEvPWygwIScu//VG99nPiA==", + "requires": { + "@aws-amplify/core": "4.7.12", + "@aws-amplify/storage": "4.5.14", + "@aws-sdk/client-comprehend": "3.6.1", + "@aws-sdk/client-polly": "3.6.1", + "@aws-sdk/client-rekognition": "3.6.1", + "@aws-sdk/client-textract": "3.6.1", + "@aws-sdk/client-translate": "3.6.1", + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "uuid": "^3.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@aws-amplify/pubsub": { + "version": "4.5.11", + "resolved": "https://registry.npmjs.org/@aws-amplify/pubsub/-/pubsub-4.5.11.tgz", + "integrity": "sha512-4scTnOvLCwe5lsiL1zqwP5c6/hCNPb5HG6zzSc4kmP9njQuSjwe+XaV/9lpwuj/8tFSu23nBw+/oZwqEOcE43Q==", + "requires": { + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "graphql": "15.8.0", + "paho-mqtt": "^1.1.0", + "uuid": "^3.2.1", + "zen-observable-ts": "0.8.19" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@aws-amplify/storage": { + "version": "4.5.14", + "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-4.5.14.tgz", + "integrity": "sha512-Jjmhj8jEgAOmyArXjA813QnF/uJSYmNHEu2vCmgaMZc88LWLstNtJ/naiqi/y3sca1FWfDf9qryfKnz0HMSq6g==", + "requires": { + "@aws-amplify/core": "4.7.12", + "@aws-sdk/client-s3": "3.6.1", + "@aws-sdk/s3-request-presigner": "3.6.1", + "@aws-sdk/util-create-request": "3.6.1", + "@aws-sdk/util-format-url": "3.6.1", + "axios": "0.26.0", + "events": "^3.1.0" + }, + "dependencies": { + "axios": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", + "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", + "requires": { + "follow-redirects": "^1.14.8" + } + } + } + }, + "@aws-amplify/ui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/ui/-/ui-4.1.0.tgz", + "integrity": "sha512-BZC/lgMABnghqXJ6rTwsTriDZndWuZ4Z27P+LdEtieVSa4DZ4lQNJKDZ1hLCjoHv1MOXin4UCHSAvwjiMNnfJw==", + "requires": { + "lodash": "4.17.21", + "style-dictionary": "3.7.0", + "tslib": "2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "@aws-amplify/ui-vue": { + "version": "2.4.26", + "resolved": "https://registry.npmjs.org/@aws-amplify/ui-vue/-/ui-vue-2.4.26.tgz", + "integrity": "sha512-ypjizBSf2ThOS/IET677hXJgkv2gmNlbisV2agHPh39tlYjjxKYGR4UZo3mOnf/VD54V46nCphYEesW9SQI7Ig==", + "requires": { + "@aws-amplify/ui": "4.1.0", + "@vue/tsconfig": "^0.1.3", + "@vueuse/core": "7.5.5", + "@xstate/vue": "0.8.1", + "nanoid": "3.1.31", + "qrcode": "1.5.0", + "xstate": "^4.33.6" + }, + "dependencies": { + "@vueuse/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-7.5.5.tgz", + "integrity": "sha512-RBDqmIoGfak4h3xdXa/Av+ibkb8NY044wEy6+PG2FAWNaID8/FkqmSFjbxogrbmpSX1yZ1PBHrM8DUp/FrIpbg==", + "requires": { + "@vueuse/shared": "7.5.5", + "vue-demi": "*" + } + }, + "@vueuse/shared": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-7.5.5.tgz", + "integrity": "sha512-mzzTsotHQRPnPAChy8iCv6ek/90CKYhAFyMRgNsMxpT0afZJkbMO/X0OaOu/1NuGbgb8UVjlsWKmCUgKTOF5hA==", + "requires": { + "vue-demi": "*" + } + }, + "nanoid": { + "version": "3.1.31", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.31.tgz", + "integrity": "sha512-ZivnJm0o9bb13p2Ot5CpgC2rQdzB9Uxm/mFZweqm5eMViqOJe3PV6LU2E30SiLgheesmcPrjquqraoolONSA0A==" + }, + "vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "requires": {} + } + } + }, + "@aws-amplify/xr": { + "version": "3.0.61", + "resolved": "https://registry.npmjs.org/@aws-amplify/xr/-/xr-3.0.61.tgz", + "integrity": "sha512-r9bKl+eXbEz/Qj+VdZwrgOOduq6NNunmQCrmxWHIreoKEdSUe4ul+fRsAEfMib8PklPVbMuc0K7G5iAYTUPxDQ==", + "requires": { + "@aws-amplify/core": "4.7.12" + } + }, + "@aws-crypto/crc32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-2.0.0.tgz", + "integrity": "sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA==", + "requires": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "requires": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "@aws-sdk/types": { + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", + "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/ie11-detection": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz", + "integrity": "sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-1.2.2.tgz", + "integrity": "sha512-0tNR4kBtJp+9S0kis4+JLab3eg6QWuIeuPhzaYoYwNUXGBgsWIkktA2mnilet+EGWzf3n1zknJXC4X4DVyyXbg==", + "requires": { + "@aws-crypto/ie11-detection": "^1.0.0", + "@aws-crypto/sha256-js": "^1.2.2", + "@aws-crypto/supports-web-crypto": "^1.0.0", + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "1.0.0-alpha.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.0.0-alpha.0.tgz", + "integrity": "sha512-GidX2lccEtHZw8mXDKJQj6tea7qh3pAnsNSp1eZNxsN4MMu2OvSraPSqiB1EihsQkZBMg0IiZPpZHoACUX/QMQ==", + "requires": { + "@aws-sdk/types": "^1.0.0-alpha.0", + "@aws-sdk/util-utf8-browser": "^1.0.0-alpha.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-1.0.0-rc.10.tgz", + "integrity": "sha512-9gwhYnkTNuYZ+etCtM4T8gjpZ0SWSXbzQxY34UjSS+dt3C/UnbX0J22tMahp/9Z1yCa9pihtXrkD+nO2xn7nVQ==" + }, + "@aws-sdk/util-utf8-browser": { + "version": "1.0.0-rc.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-1.0.0-rc.8.tgz", + "integrity": "sha512-clncPMJ23rxCIkZ9LoUC8SowwZGxWyN2TwRb0XvW/Cv9EavkRgRCOrCpneGyC326lqtMKx36onnpaSRHxErUYw==", + "requires": { + "tslib": "^1.8.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-1.0.0.tgz", + "integrity": "sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "requires": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.6.1.tgz", + "integrity": "sha512-X81XkxX/2Tvv9YNcEto/rcQzPIdKJHFSnl9hBl/qkSdCFV/GaQ2XNWfKm5qFXMLlZNFS0Fn5CnBJ83qnBm47vg==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/chunked-blob-reader": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.6.1.tgz", + "integrity": "sha512-QBGUBoD8D5nsM/EKoc0rjpApa5NE5pQVzw1caE8sG00QMMPkCXWSB/gTVKVY0GOAhJFoA/VpVPQchIlZcOrBFg==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/chunked-blob-reader-native": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.6.1.tgz", + "integrity": "sha512-vP6bc2v9h442Srmo7t2QcIbPjk5IqLSf4jGnKDAes8z+7eyjCtKugRP3lOM1fJCfGlPIsJGYnexxYdEGw008vA==", + "requires": { + "@aws-sdk/util-base64-browser": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/client-cloudwatch-logs": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.6.1.tgz", + "integrity": "sha512-QOxIDnlVTpnwJ26Gap6RGz61cDLH6TKrIp30VqwdMeT1pCGy8mn9rWln6XA+ymkofHy/08RfpGp+VN4axwd4Lw==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-cognito-identity": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.6.1.tgz", + "integrity": "sha512-FMj2GR9R5oCKb3/NI16GIvWeHcE4uX42fBAaQKPbjg2gALFDx9CcJYsdOtDP37V89GtPyZilLv6GJxrwJKzYGg==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-comprehend": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-comprehend/-/client-comprehend-3.6.1.tgz", + "integrity": "sha512-Y2ixlSTjjAp2HJhkUArtYqC/X+zG5Qqu3Bl+Ez22u4u4YnG8HsNFD6FE1axuWSdSa5AFtWTEt+Cz2Ghj/tDySA==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@aws-sdk/client-firehose": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.6.1.tgz", + "integrity": "sha512-KhiKCm+cJmnRFuAEyO3DBpFVDNix1XcVikdxk2lvYbFWkM1oUZoBpudxaJ+fPf2W3stF3CXIAOP+TnGqSZCy9g==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-kinesis": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.6.1.tgz", + "integrity": "sha512-Ygo+92LxHeUZmiyhiHT+k7hIOhJd6S7ckCEVUsQs2rfwe9bAygUY/3cCoZSqgWy7exFRRKsjhzStcyV6i6jrVQ==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/eventstream-serde-browser": "3.6.1", + "@aws-sdk/eventstream-serde-config-resolver": "3.6.1", + "@aws-sdk/eventstream-serde-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "@aws-sdk/util-waiter": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-lex-runtime-service": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lex-runtime-service/-/client-lex-runtime-service-3.186.0.tgz", + "integrity": "sha512-EgjQvFxa/o1urxpnWV2A/D0k4m763NqrPLuL074LR+cOkNxVl9W27aYL/tddDBmmDzzx4KcuRL6/n+UBZIheTg==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.186.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "requires": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "requires": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "requires": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "requires": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "requires": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "requires": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "requires": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/client-lex-runtime-v2": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lex-runtime-v2/-/client-lex-runtime-v2-3.186.0.tgz", + "integrity": "sha512-oDN07yCWc9gsEYL44KSjPj8wdHHcf5Kti+w31fE7JHZqvRXxLsLx7G+kEcPmSTRk3Y4wDPXJozL6sDUAOAEb7A==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.186.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/eventstream-handler-node": "3.186.0", + "@aws-sdk/eventstream-serde-browser": "3.186.0", + "@aws-sdk/eventstream-serde-config-resolver": "3.186.0", + "@aws-sdk/eventstream-serde-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-eventstream": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "requires": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "requires": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "requires": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "requires": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/eventstream-serde-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.186.0.tgz", + "integrity": "sha512-0r2c+yugBdkP5bglGhGOgztjeHdHTKqu2u6bvTByM0nJShNO9YyqWygqPqDUOE5axcYQE1D0aFDGzDtP3mGJhw==", + "requires": { + "@aws-sdk/eventstream-serde-universal": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.186.0.tgz", + "integrity": "sha512-xhwCqYrAX5c7fg9COXVw6r7Sa3BO5cCfQMSR5S1QisE7do8K1GDKEHvUCheOx+RLon+P3glLjuNBMdD0HfCVNA==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/eventstream-serde-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.186.0.tgz", + "integrity": "sha512-9p/gdukJYfmA+OEYd6MfIuufxrrfdt15lBDM3FODuc9j09LSYSRHSxthkIhiM5XYYaaUM+4R0ZlSMdaC3vFDFQ==", + "requires": { + "@aws-sdk/eventstream-serde-universal": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/eventstream-serde-universal": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.186.0.tgz", + "integrity": "sha512-rIgPmwUxn2tzainBoh+cxAF+b7o01CcW+17yloXmawsi0kiR7QK7v9m/JTGQPWKtHSsPOrtRzuiWQNX57SlcsQ==", + "requires": { + "@aws-sdk/eventstream-codec": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "requires": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "requires": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "requires": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/client-location": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-location/-/client-location-3.186.0.tgz", + "integrity": "sha512-RXT1Z7jgYrPEdD1VkErH9Wm+z6y7c/ua1Pu9VQ8weu9vtD15S8Qnyd1m4HS8ZPQUUM/gTxs/fL9+s53wRWpfGQ==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.186.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "requires": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "requires": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "requires": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "requires": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "requires": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "requires": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "requires": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/client-personalize-events": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.6.1.tgz", + "integrity": "sha512-x9Jl/7emSQsB6GwBvjyw5BiSO26CnH4uvjNit6n54yNMtJ26q0+oIxkplnUDyjLTfLRe373c/z5/4dQQtDffkw==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-pinpoint": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-pinpoint/-/client-pinpoint-3.6.1.tgz", + "integrity": "sha512-dueBedp91EKAHxcWLR3aNx/eUEdxdF9niEQTzOO2O4iJL2yvO2Hh7ZYiO7B3g7FuuICTpWSHd//Y9mGmSVLMCg==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-polly": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-polly/-/client-polly-3.6.1.tgz", + "integrity": "sha512-y6fxVYndGS7z2KqHViPCqagBEOsZlxBUYUJZuD6WWTiQrI0Pwe5qG02oKJVaa5OmxE20QLf6bRBWj2rQpeF4IQ==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-rekognition": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-rekognition/-/client-rekognition-3.6.1.tgz", + "integrity": "sha512-Ia4FEog9RrI0IoDRbOJO6djwhVAAaEZutxEKrWbjrVz4bgib28L+V+yAio2SUneeirj8pNYXwBKPfoYOUqGHhA==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "@aws-sdk/util-waiter": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-s3": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.6.1.tgz", + "integrity": "sha512-59cTmZj92iwgNoAeJirK5sZNQNXLc/oI3luqrEHRNLuOh70bjdgad70T0a5k2Ysd/v/QNamqJxnCJMPuX1bhgw==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/eventstream-serde-browser": "3.6.1", + "@aws-sdk/eventstream-serde-config-resolver": "3.6.1", + "@aws-sdk/eventstream-serde-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-blob-browser": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/hash-stream-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/md5-js": "3.6.1", + "@aws-sdk/middleware-apply-body-checksum": "3.6.1", + "@aws-sdk/middleware-bucket-endpoint": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-expect-continue": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-location-constraint": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-sdk-s3": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-ssec": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "@aws-sdk/util-waiter": "3.6.1", + "@aws-sdk/xml-builder": "3.6.1", + "fast-xml-parser": "^3.16.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-sso": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.186.0.tgz", + "integrity": "sha512-qwLPomqq+fjvp42izzEpBEtGL2+dIlWH5pUCteV55hTEwHgo+m9LJPIrMWkPeoMBzqbNiu5n6+zihnwYlCIlEA==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "requires": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "requires": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "requires": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "requires": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "requires": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "requires": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "requires": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/client-sts": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.186.0.tgz", + "integrity": "sha512-lyAPI6YmIWWYZHQ9fBZ7QgXjGMTtktL5fk8kOcZ98ja+8Vu0STH1/u837uxqvZta8/k0wijunIL3jWUhjsNRcg==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-node": "3.186.0", + "@aws-sdk/fetch-http-handler": "3.186.0", + "@aws-sdk/hash-node": "3.186.0", + "@aws-sdk/invalid-dependency": "3.186.0", + "@aws-sdk/middleware-content-length": "3.186.0", + "@aws-sdk/middleware-host-header": "3.186.0", + "@aws-sdk/middleware-logger": "3.186.0", + "@aws-sdk/middleware-recursion-detection": "3.186.0", + "@aws-sdk/middleware-retry": "3.186.0", + "@aws-sdk/middleware-sdk-sts": "3.186.0", + "@aws-sdk/middleware-serde": "3.186.0", + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/middleware-user-agent": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/node-http-handler": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/smithy-client": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "@aws-sdk/util-base64-node": "3.186.0", + "@aws-sdk/util-body-length-browser": "3.186.0", + "@aws-sdk/util-body-length-node": "3.186.0", + "@aws-sdk/util-defaults-mode-browser": "3.186.0", + "@aws-sdk/util-defaults-mode-node": "3.186.0", + "@aws-sdk/util-user-agent-browser": "3.186.0", + "@aws-sdk/util-user-agent-node": "3.186.0", + "@aws-sdk/util-utf8-browser": "3.186.0", + "@aws-sdk/util-utf8-node": "3.186.0", + "entities": "2.2.0", + "fast-xml-parser": "3.19.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-crypto/ie11-detection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", + "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "requires": { + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "requires": { + "@aws-crypto/util": "^2.0.0", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", + "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", + "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", + "requires": { + "@aws-sdk/types": "^3.110.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz", + "integrity": "sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "requires": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz", + "integrity": "sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz", + "integrity": "sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz", + "integrity": "sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/credential-provider-ini": "3.186.0", + "@aws-sdk/credential-provider-process": "3.186.0", + "@aws-sdk/credential-provider-sso": "3.186.0", + "@aws-sdk/credential-provider-web-identity": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz", + "integrity": "sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz", + "integrity": "sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-base64-browser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz", + "integrity": "sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz", + "integrity": "sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz", + "integrity": "sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz", + "integrity": "sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz", + "integrity": "sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz", + "integrity": "sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/service-error-classification": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz", + "integrity": "sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz", + "integrity": "sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz", + "integrity": "sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz", + "integrity": "sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==", + "requires": { + "@aws-sdk/abort-controller": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/querystring-builder": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz", + "integrity": "sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz", + "integrity": "sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz", + "integrity": "sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==", + "requires": { + "@aws-sdk/middleware-stack": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "requires": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz", + "integrity": "sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz", + "integrity": "sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz", + "integrity": "sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz", + "integrity": "sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz", + "integrity": "sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz", + "integrity": "sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz", + "integrity": "sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz", + "integrity": "sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz", + "integrity": "sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==", + "requires": { + "@aws-sdk/util-buffer-from": "3.186.0", + "tslib": "^2.3.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "fast-xml-parser": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", + "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" + } + } + }, + "@aws-sdk/client-textract": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.6.1.tgz", + "integrity": "sha512-nLrBzWDt3ToiGVFF4lW7a/eZpI2zjdvu7lwmOWyXX8iiPzhBVVEfd5oOorRyJYBsGMslp4sqV8TBkU5Ld/a97Q==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + } + } + }, + "@aws-sdk/client-translate": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-translate/-/client-translate-3.6.1.tgz", + "integrity": "sha512-RIHY+Og1i43B5aWlfUUk0ZFnNfM7j2vzlYUwOqhndawV49GFf96M3pmskR5sKEZI+5TXY77qR9TgZ/r3UxVCRQ==", + "requires": { + "@aws-crypto/sha256-browser": "^1.0.0", + "@aws-crypto/sha256-js": "^1.0.0", + "@aws-sdk/config-resolver": "3.6.1", + "@aws-sdk/credential-provider-node": "3.6.1", + "@aws-sdk/fetch-http-handler": "3.6.1", + "@aws-sdk/hash-node": "3.6.1", + "@aws-sdk/invalid-dependency": "3.6.1", + "@aws-sdk/middleware-content-length": "3.6.1", + "@aws-sdk/middleware-host-header": "3.6.1", + "@aws-sdk/middleware-logger": "3.6.1", + "@aws-sdk/middleware-retry": "3.6.1", + "@aws-sdk/middleware-serde": "3.6.1", + "@aws-sdk/middleware-signing": "3.6.1", + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/middleware-user-agent": "3.6.1", + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/node-http-handler": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/url-parser": "3.6.1", + "@aws-sdk/url-parser-native": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "@aws-sdk/util-base64-node": "3.6.1", + "@aws-sdk/util-body-length-browser": "3.6.1", + "@aws-sdk/util-body-length-node": "3.6.1", + "@aws-sdk/util-user-agent-browser": "3.6.1", + "@aws-sdk/util-user-agent-node": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "@aws-sdk/util-utf8-node": "3.6.1", + "tslib": "^2.0.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@aws-sdk/config-resolver": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.6.1.tgz", + "integrity": "sha512-qjP1g3jLIm+XvOIJ4J7VmZRi87vsDmTRzIFePVeG+EFWwYQLxQjTGMdIj3yKTh1WuZ0HByf47mGcpiS4HZLm1Q==", + "requires": { + "@aws-sdk/signature-v4": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/credential-provider-cognito-identity": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.6.1.tgz", + "integrity": "sha512-uJ9q+yq+Dhdo32gcv0p/AT7sKSAUH0y4ts9XRK/vx0dW9Q3XJy99mOJlq/6fkh4LfWeavJJlaCo9lSHNMWXx4w==", + "requires": { + "@aws-sdk/client-cognito-identity": "3.6.1", + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.6.1.tgz", + "integrity": "sha512-coeFf/HnhpGidcAN1i1NuFgyFB2M6DeN1zNVy4f6s4mAh96ftr9DgWM1CcE3C+cLHEdpNqleVgC/2VQpyzOBLQ==", + "requires": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.6.1.tgz", + "integrity": "sha512-bf4LMI418OYcQbyLZRAW8Q5AYM2IKrNqOnIcfrFn2f17ulG7TzoWW3WN/kMOw4TC9+y+vIlCWOv87GxU1yP0Bg==", + "requires": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.6.1.tgz", + "integrity": "sha512-3jguW6+ttRNddRZvbrs1yb3F1jrUbqyv0UfRoHuOGthjTt+L9sDpJaJGugYnT3bS9WBu1NydLVE2kDV++mJGVw==", + "requires": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.6.1.tgz", + "integrity": "sha512-VAHOcsqkPrF1k/fA62pv9c75lUWe5bHpcbFX83C3EUPd2FXV10Lfkv6bdWhyZPQy0k8T+9/yikHH3c7ZQeFE5A==", + "requires": { + "@aws-sdk/credential-provider-env": "3.6.1", + "@aws-sdk/credential-provider-imds": "3.6.1", + "@aws-sdk/credential-provider-ini": "3.6.1", + "@aws-sdk/credential-provider-process": "3.6.1", + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.6.1.tgz", + "integrity": "sha512-d0/TpMoEV4qMYkdpyyjU2Otse9X2jC1DuxWajHOWZYEw8oejMvXYTZ10hNaXZvAcNM9q214rp+k4mkt6gIcI6g==", + "requires": { + "@aws-sdk/credential-provider-ini": "3.6.1", + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.186.0.tgz", + "integrity": "sha512-mJ+IZljgXPx99HCmuLgBVDPLepHrwqnEEC/0wigrLCx6uz3SrAWmGZsNbxSEtb2CFSAaczlTHcU/kIl7XZIyeQ==", + "requires": { + "@aws-sdk/client-sso": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + } + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz", + "integrity": "sha512-KqzI5eBV72FE+8SuOQAu+r53RXGVHg4AuDJmdXyo7Gc4wS/B9FNElA8jVUjjYgVnf0FSiri+l41VzQ44dCopSA==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + } + } + }, + "@aws-sdk/eventstream-codec": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.186.0.tgz", + "integrity": "sha512-3kLcJ0/H+zxFlhTlE1SGoFpzd/SitwXOsTSlYVwrwdISKRjooGg0BJpm1CSTkvmWnQIUlYijJvS96TAJ+fCPIA==", + "requires": { + "@aws-crypto/crc32": "2.0.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/eventstream-handler-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.186.0.tgz", + "integrity": "sha512-S8eAxCHyFAGSH7F6GHKU2ckpiwFPwJUQwMzewISLg3wzLQeu6lmduxBxVaV3/SoEbEMsbNmrgw9EXtw3Vt/odQ==", + "requires": { + "@aws-sdk/eventstream-codec": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + } + } + }, + "@aws-sdk/eventstream-marshaller": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-marshaller/-/eventstream-marshaller-3.6.1.tgz", + "integrity": "sha512-ZvN3Nvxn2Gul08L9MOSN123LwSO0E1gF/CqmOGZtEWzPnoSX/PWM9mhPPeXubyw2KdlXylOodYYw3EAATk3OmA==", + "requires": { + "@aws-crypto/crc32": "^1.0.0", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-hex-encoding": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "@aws-crypto/crc32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-1.2.2.tgz", + "integrity": "sha512-8K0b1672qbv05chSoKpwGZ3fhvVp28Fg3AVHVkEHFl2lTLChO7wD/hTyyo8ING7uc31uZRt7bNra/hA74Td7Tw==", + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/eventstream-serde-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.6.1.tgz", + "integrity": "sha512-J8B30d+YUfkBtgWRr7+9AfYiPnbG28zjMlFGsJf8Wxr/hDCfff+Z8NzlBYFEbS7McXXhRiIN8DHUvCtolJtWJQ==", + "requires": { + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/eventstream-serde-universal": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.6.1.tgz", + "integrity": "sha512-72pCzcT/KeD4gPgRVBSQzEzz4JBim8bNwPwZCGaIYdYAsAI8YMlvp0JNdis3Ov9DFURc87YilWKQlAfw7CDJxA==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/eventstream-serde-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.6.1.tgz", + "integrity": "sha512-rjBbJFjCrEcm2NxZctp+eJmyPxKYayG3tQZo8PEAQSViIlK5QexQI3fgqNAeCtK7l/SFAAvnOMRZF6Z3NdUY6A==", + "requires": { + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/eventstream-serde-universal": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/eventstream-serde-universal": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.6.1.tgz", + "integrity": "sha512-rpRu97yAGHr9GQLWMzcGICR2PxNu1dHU/MYc9Kb6UgGeZd4fod4o1zjhAJuj98cXn2xwHNFM4wMKua6B4zKrZg==", + "requires": { + "@aws-sdk/eventstream-marshaller": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.6.1.tgz", + "integrity": "sha512-N8l6ZbwhINuWG5hsl625lmIQmVjzsqRPmlgh061jm5D90IhsM5/3A3wUxpB/k0av1dmuMRw/m0YtBU5w4LOwvw==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/querystring-builder": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-base64-browser": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/hash-blob-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.6.1.tgz", + "integrity": "sha512-9jPaZ/e3F8gf9JZd44DD6MvbYV6bKnn99rkG3GFIINOy9etoxPrLehp2bH2DK/j0ow60RNuwgUjj5qHV/zF67g==", + "requires": { + "@aws-sdk/chunked-blob-reader": "3.6.1", + "@aws-sdk/chunked-blob-reader-native": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/hash-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.6.1.tgz", + "integrity": "sha512-iKEpzpyaG9PYCnaOGwTIf0lffsF/TpsXrzAfnBlfeOU/3FbgniW2z/yq5xBbtMDtLobtOYC09kUFwDnDvuveSA==", + "requires": { + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-buffer-from": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/hash-stream-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.6.1.tgz", + "integrity": "sha512-ePaWjCItIWxuSxA/UnUM/keQ3IAOsQz3FYSxu0KK8K0e1bKTEUgDIG9oMLBq7jIl9TzJG0HBXuPfMe73QHUNug==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.6.1.tgz", + "integrity": "sha512-d0RLqK7yeDCZJKopnGmGXo2rYkQNE7sGKVmBHQD1j1kKZ9lWwRoJeWqo834JNPZzY5XRvZG5SuIjJ1kFy8LpyQ==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.6.1.tgz", + "integrity": "sha512-qm2iDJmCrxlQE2dsFG+TujPe7jw4DF+4RTrsFMhk/e3lOl3MAzQ6Fc2kXtgeUcVrZVFTL8fQvXE1ByYyI6WbCw==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/md5-js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.6.1.tgz", + "integrity": "sha512-lzCqkZF1sbzGFDyq1dI+lR3AmlE33rbC/JhZ5fzw3hJZvfZ6Beq3Su7YwDo65IWEu0zOKYaNywTeOloXP/CkxQ==", + "requires": { + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-utf8-browser": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-apply-body-checksum": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-apply-body-checksum/-/middleware-apply-body-checksum-3.6.1.tgz", + "integrity": "sha512-IncmXR1MPk6aYvmD37It8dP6wVMzaxxzgrkIU2ACkN5UVwA+/0Sr3ZNd9dNwjpyoH1AwpL9BetnlJaWtT6K5ew==", + "requires": { + "@aws-sdk/is-array-buffer": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-bucket-endpoint": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.6.1.tgz", + "integrity": "sha512-Frcqn2RQDNHy+e2Q9hv3ejT3mQWtGlfZESbXEF6toR4M0R8MmEVqIB/ohI6VKBj11lRmGwvpPsR6zz+PJ8HS7A==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-arn-parser": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.6.1.tgz", + "integrity": "sha512-QRcocG9f5YjYzbjs2HjKla6ZIjvx8Y8tm1ZSFOPey81m18CLif1O7M3AtJXvxn+0zeSck9StFdhz5gfjVNYtDg==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-eventstream": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.186.0.tgz", + "integrity": "sha512-7yjFiitTGgfKL6cHK3u3HYFnld26IW5aUAFuEd6ocR/FjliysfBd8g0g1bw3bRfIMgCDD8OIOkXK8iCk2iYGWQ==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + } + } + }, + "@aws-sdk/middleware-expect-continue": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.6.1.tgz", + "integrity": "sha512-vvMOqVYU3uvdJzg/X6NHewZUEBZhSqND1IEcdahLb6RmvDhsS39iS97VZmEFsjj/UFGoePtYjrrdEgRG9Rm1kQ==", + "requires": { + "@aws-sdk/middleware-header-default": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-header-default": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-header-default/-/middleware-header-default-3.6.1.tgz", + "integrity": "sha512-YD137iIctXVH8Eut0WOBalvvA+uL0jM0UXZ9N2oKrC8kPQPpqjK9lYGFKZQFsl/XlQHAjJi+gCAFrYsBntRWJQ==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.6.1.tgz", + "integrity": "sha512-nwq8R2fGBRZQE0Fr/jiOgqfppfiTQCUoD8hyX3qSS7Qc2uqpsDOt2TnnoZl56mpQYkF/344IvMAkp+ew6wR73w==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-location-constraint": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.6.1.tgz", + "integrity": "sha512-nFisTc0O5D+4I+sRxiiLPasC/I4NDc3s+hgbPPt/b3uAdrujJjhwFBOSaTx8qQvz/xJPAA8pUA/bfWIyeZKi/w==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.6.1.tgz", + "integrity": "sha512-zxaSLpwKlja7JvK20UsDTxPqBZUo3rbDA1uv3VWwpxzOrEWSlVZYx/KLuyGWGkx9V71ZEkf6oOWWJIstS0wyQQ==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.186.0.tgz", + "integrity": "sha512-Za7k26Kovb4LuV5tmC6wcVILDCt0kwztwSlB991xk4vwNTja8kKxSt53WsYG8Q2wSaW6UOIbSoguZVyxbIY07Q==", + "requires": { + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + } + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.6.1.tgz", + "integrity": "sha512-WHeo4d2jsXxBP+cec2SeLb0btYXwYXuE56WLmNt0RvJYmiBzytUeGJeRa9HuwV574kgigAuHGCeHlPO36G4Y0Q==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/service-error-classification": "3.6.1", + "@aws-sdk/types": "3.6.1", + "react-native-get-random-values": "^1.4.0", + "tslib": "^1.8.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@aws-sdk/middleware-sdk-s3": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.6.1.tgz", + "integrity": "sha512-HEA9kynNTsOSIIz8p5GEEAH03pnn+SSohwPl80sGqkmI1yl1tzjqgYZRii0e6acJTh4j9655XFzSx36hYPeB2w==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-arn-parser": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.186.0.tgz", + "integrity": "sha512-GDcK0O8rjtnd+XRGnxzheq1V2jk4Sj4HtjrxW/ROyhzLOAOyyxutBt+/zOpDD6Gba3qxc69wE+Cf/qngOkEkDw==", + "requires": { + "@aws-sdk/middleware-signing": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz", + "integrity": "sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/protocol-http": "3.186.0", + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz", + "integrity": "sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.6.1.tgz", + "integrity": "sha512-EdQCFZRERfP3uDuWcPNuaa2WUR3qL1WFDXafhcx+7ywQxagdYqBUWKFJlLYi6njbkOKXFM+eHBzoXGF0OV3MJA==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.6.1.tgz", + "integrity": "sha512-1woKq+1sU3eausdl8BNdAMRZMkSYuy4mxhLsF0/qAUuLwo1eJLLUCOQp477tICawgu4O4q2OAyUHk7wMqYnQCg==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/signature-v4": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-ssec": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.6.1.tgz", + "integrity": "sha512-svuH6s91uKUTORt51msiL/ZBjtYSW32c3uVoWxludd/PEf6zO5wCmUEsKoyVwa88L7rrCq+81UBv5A8S5kc3Cw==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.6.1.tgz", + "integrity": "sha512-EPsIxMi8LtCt7YwTFpWGlVGYJc0q4kwFbOssY02qfqdCnyqi2y5wo089dH7OdxUooQ0D7CPsXM1zTTuzvm+9Fw==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.6.1.tgz", + "integrity": "sha512-YvXvwllNDVvxQ30vIqLsx+P6jjnfFEQUmhlv64n98gOme6h2BqoyQDcC3yHRGctuxRZEsR7W/H1ASTKC+iabbQ==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.6.1.tgz", + "integrity": "sha512-x2Z7lm0ZhHYqMybvkaI5hDKfBkaLaXhTDfgrLl9TmBZ3QHO4fIHgeL82VZ90Paol+OS+jdq2AheLmzbSxv3HrA==", + "requires": { + "@aws-sdk/property-provider": "3.6.1", + "@aws-sdk/shared-ini-file-loader": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.6.1.tgz", + "integrity": "sha512-6XSaoqbm9ZF6T4UdBCcs/Gn2XclwBotkdjj46AxO+9vRAgZDP+lH/8WwZsvfqJhhRhS0qxWrks98WGJwmaTG8g==", + "requires": { + "@aws-sdk/abort-controller": "3.6.1", + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/querystring-builder": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/property-provider": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.6.1.tgz", + "integrity": "sha512-2gR2DzDySXKFoj9iXLm1TZBVSvFIikEPJsbRmAZx5RBY+tp1IXWqZM6PESjaLdLg/ZtR0QhW2ZcRn0fyq2JfnQ==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/protocol-http": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.6.1.tgz", + "integrity": "sha512-WkQz7ncVYTLvCidDfXWouDzqxgSNPZDz3Bql+7VhZeITnzAEcr4hNMyEqMAVYBVugGmkG2W6YiUqNNs1goOcDA==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.6.1.tgz", + "integrity": "sha512-ESe255Yl6vB1AMNqaGSQow3TBYYnpw0AFjE40q2VyiNrkbaqKmW2EzjeCy3wEmB1IfJDHy3O12ZOMUMOnjFT8g==", + "requires": { + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-uri-escape": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.6.1.tgz", + "integrity": "sha512-hh6dhqamKrWWaDSuO2YULci0RGwJWygoy8hpCRxs/FpzzHIcbm6Cl6Jhrn5eKBzOBv+PhCcYwbfad0kIZZovcQ==", + "requires": { + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/s3-request-presigner": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.6.1.tgz", + "integrity": "sha512-OI7UHCKBwuiO/RmHHewBKnL2NYqdilXRmpX67TJ4tTszIrWP2+vpm3lIfrx/BM8nf8nKTzgkO98uFhoJsEhmTg==", + "requires": { + "@aws-sdk/protocol-http": "3.6.1", + "@aws-sdk/signature-v4": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-create-request": "3.6.1", + "@aws-sdk/util-format-url": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.6.1.tgz", + "integrity": "sha512-kZ7ZhbrN1f+vrSRkTJvXsu7BlOyZgym058nPA745+1RZ1Rtv4Ax8oknf2RvJyj/1qRUi8LBaAREjzQ3C8tmLBA==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.6.1.tgz", + "integrity": "sha512-BnLHtsNLOoow6rPV+QVi6jnovU5g1m0YzoUG0BQYZ1ALyVlWVr0VvlUX30gMDfdYoPMp+DHvF8GXdMuGINq6kQ==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/signature-v4": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.6.1.tgz", + "integrity": "sha512-EAR0qGVL4AgzodZv4t+BSuBfyOXhTNxDxom50IFI1MqidR9vI6avNZKcPHhgXbm7XVcsDGThZKbzQ2q7MZ2NTA==", + "requires": { + "@aws-sdk/is-array-buffer": "3.6.1", + "@aws-sdk/types": "3.6.1", + "@aws-sdk/util-hex-encoding": "3.6.1", + "@aws-sdk/util-uri-escape": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/smithy-client": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.6.1.tgz", + "integrity": "sha512-AVpRK4/iUxNeDdAm8UqP0ZgtgJMQeWcagTylijwelhWXyXzHUReY1sgILsWcdWnoy6gq845W7K2VBhBleni8+w==", + "requires": { + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/types": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.6.1.tgz", + "integrity": "sha512-4Dx3eRTrUHLxhFdLJL8zdNGzVsJfAxtxPYYGmIddUkO2Gj3WA1TGjdfG4XN/ClI6e1XonCHafQX3UYO/mgnH3g==" + }, + "@aws-sdk/url-parser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.6.1.tgz", + "integrity": "sha512-pWFIePDx0PMCleQRsQDWoDl17YiijOLj0ZobN39rQt+wv5PhLSZDz9PgJsqS48nZ6hqsKgipRcjiBMhn5NtFcQ==", + "requires": { + "@aws-sdk/querystring-parser": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/url-parser-native": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser-native/-/url-parser-native-3.6.1.tgz", + "integrity": "sha512-3O+ktsrJoE8YQCho9L41YXO8EWILXrSeES7amUaV3mgIV5w4S3SB/r4RkmylpqRpQF7Ry8LFiAnMqH1wa4WBPA==", + "requires": { + "@aws-sdk/querystring-parser": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0", + "url": "^0.11.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-arn-parser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.6.1.tgz", + "integrity": "sha512-NFdYeuhaSrgnBG6Pt3zHNU7QwvhHq6sKUTWZShUayLMJYYbQr6IjmYVlPST4c84b+lyDoK68y/Zga621VfIdBg==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-base64-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.6.1.tgz", + "integrity": "sha512-+DHAIgt0AFARDVC7J0Z9FkSmJhBMlkYdOPeAAgO0WaQoKj7rtsLQJ7P3v3aS1paKN5/sk5xNY7ziVB6uHtOvHA==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-base64-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.6.1.tgz", + "integrity": "sha512-oiqzpsvtTSS92+cL3ykhGd7t3qBJKeHvrgOwUyEf1wFWHQ2DPJR+dIMy5rMFRXWLKCl3w7IddY2rJCkLYMjaqQ==", + "requires": { + "@aws-sdk/util-buffer-from": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.6.1.tgz", + "integrity": "sha512-IdWwE3rm/CFDk2F+IwTZOFTnnNW5SB8y1lWiQ54cfc7y03hO6jmXNnpZGZ5goHhT+vf1oheNQt1J47m0pM/Irw==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.6.1.tgz", + "integrity": "sha512-CUG3gc18bSOsqViQhB3M4AlLpAWV47RE6yWJ6rLD0J6/rSuzbwbjzxM39q0YTAVuSo/ivdbij+G9c3QCirC+QQ==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.6.1.tgz", + "integrity": "sha512-OGUh2B5NY4h7iRabqeZ+EgsrzE1LUmNFzMyhoZv0tO4NExyfQjxIYXLQQvydeOq9DJUbCw+yrRZrj8vXNDQG+g==", + "requires": { + "@aws-sdk/is-array-buffer": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.186.0.tgz", + "integrity": "sha512-71Qwu/PN02XsRLApyxG0EUy/NxWh/CXxtl2C7qY14t+KTiRapwbDkdJ1cMsqYqghYP4BwJoj1M+EFMQSSlkZQQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-create-request": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-create-request/-/util-create-request-3.6.1.tgz", + "integrity": "sha512-jR1U8WpwXl+xZ9ThS42Jr5MXuegQ7QioHsZjQn3V5pbm8CXTkBF0B2BcULQu/2G1XtHOJb8qUZQlk/REoaORfQ==", + "requires": { + "@aws-sdk/middleware-stack": "3.6.1", + "@aws-sdk/smithy-client": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-defaults-mode-browser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.186.0.tgz", + "integrity": "sha512-U8GOfIdQ0dZ7RRVpPynGteAHx4URtEh+JfWHHVfS6xLPthPHWTbyRhkQX++K/F8Jk+T5U8Anrrqlea4TlcO2DA==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + } + } + }, + "@aws-sdk/util-defaults-mode-node": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.186.0.tgz", + "integrity": "sha512-N6O5bpwCiE4z8y7SPHd7KYlszmNOYREa+mMgtOIXRU3VXSEHVKVWTZsHKvNTTHpW0qMqtgIvjvXCo3vsch5l3A==", + "requires": { + "@aws-sdk/config-resolver": "3.186.0", + "@aws-sdk/credential-provider-imds": "3.186.0", + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/config-resolver": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz", + "integrity": "sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==", + "requires": { + "@aws-sdk/signature-v4": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-config-provider": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz", + "integrity": "sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==", + "requires": { + "@aws-sdk/node-config-provider": "3.186.0", + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/url-parser": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz", + "integrity": "sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz", + "integrity": "sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==", + "requires": { + "@aws-sdk/property-provider": "3.186.0", + "@aws-sdk/shared-ini-file-loader": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz", + "integrity": "sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz", + "integrity": "sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz", + "integrity": "sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==", + "requires": { + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz", + "integrity": "sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.186.0", + "@aws-sdk/types": "3.186.0", + "@aws-sdk/util-hex-encoding": "3.186.0", + "@aws-sdk/util-middleware": "3.186.0", + "@aws-sdk/util-uri-escape": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz", + "integrity": "sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==" + }, + "@aws-sdk/url-parser": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz", + "integrity": "sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==", + "requires": { + "@aws-sdk/querystring-parser": "3.186.0", + "@aws-sdk/types": "3.186.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz", + "integrity": "sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz", + "integrity": "sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/util-format-url": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.6.1.tgz", + "integrity": "sha512-FvhcXcqLyJ0j0WdlmGs7PtjCCv8NaY4zBuXYO2iwAmqoy2SIZXQL63uAvmilqWj25q47ASAsUwSFLReCCfMklQ==", + "requires": { + "@aws-sdk/querystring-builder": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.6.1.tgz", + "integrity": "sha512-pzsGOHtU2eGca4NJgFg94lLaeXDOg8pcS9sVt4f9LmtUGbrqRveeyBv0XlkHeZW2n0IZBssPHipVYQFlk7iaRA==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-middleware": { + "version": "3.186.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.186.0.tgz", + "integrity": "sha512-fddwDgXtnHyL9mEZ4s1tBBsKnVQHqTUmFbZKUUKPrg9CxOh0Y/zZxEa5Olg/8dS/LzM1tvg0ATkcyd4/kEHIhg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.6.1.tgz", + "integrity": "sha512-tgABiT71r0ScRJZ1pMX0xO0QPMMiISCtumph50IU5VDyZWYgeIxqkMhIcrL1lX0QbNCMgX0n6rZxGrrbjDNavA==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.6.1.tgz", + "integrity": "sha512-KhJ4VED4QpuBVPXoTjb5LqspX1xHWJTuL8hbPrKfxj+cAaRRW2CNEe7PPy2CfuHtPzP3dU3urtGTachbwNb0jg==", + "requires": { + "@aws-sdk/types": "3.6.1", + "bowser": "^2.11.0", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.6.1.tgz", + "integrity": "sha512-PWwL5EDRwhkXX40m5jjgttlBmLA7vDhHBen1Jcle0RPIDFRVPSE7GgvLF3y4r3SNH0WD6hxqadT50bHQynXW6w==", + "requires": { + "@aws-sdk/node-config-provider": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.6.1.tgz", + "integrity": "sha512-gZPySY6JU5gswnw3nGOEHl3tYE7vPKvtXGYoS2NRabfDKRejFvu+4/nNW6SSpoOxk6LSXsrWB39NO51k+G4PVA==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-utf8-node": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.6.1.tgz", + "integrity": "sha512-4s0vYfMUn74XLn13rUUhNsmuPMh0j1d4rF58wXtjlVUU78THxonnN8mbCLC48fI3fKDHTmDDkeEqy7+IWP9VyA==", + "requires": { + "@aws-sdk/util-buffer-from": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/util-waiter": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.6.1.tgz", + "integrity": "sha512-CQMRteoxW1XZSzPBVrTsOTnfzsEGs8N/xZ8BuBnXLBjoIQmRKVxIH9lgphm1ohCtVHoSWf28XH/KoOPFULQ4Tg==", + "requires": { + "@aws-sdk/abort-controller": "3.6.1", + "@aws-sdk/types": "3.6.1", + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/xml-builder": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.6.1.tgz", + "integrity": "sha512-+HOCH4a0XO+I09okd0xdVP5Q5c9ZsEsDvnogiOcBQxoMivWhPUCo9pjXP3buCvVKP2oDHXQplBKSjGHvGaKFdg==", + "requires": { + "tslib": "^1.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@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.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" + }, + "@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "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/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "requires": { + "@babel/types": "^7.20.2", + "@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==", + "peer": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "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.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "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.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@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.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "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.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + } + }, + "@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==", + "peer": true, + "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.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@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==", + "peer": true, + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "peer": true, + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + } + }, + "@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.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "peer": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@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==", + "peer": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "peer": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", + "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-default-from": "^7.18.6" + } + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "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==", + "peer": true, + "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==", + "peer": true, + "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.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "peer": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + } + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "peer": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", + "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "peer": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@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.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "peer": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "peer": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "peer": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@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==", + "peer": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "peer": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", + "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" + } + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/register": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "peer": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "peer": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "peer": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + } + } + }, + "@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "peer": true, + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@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.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "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==", + "dev": true + }, + "@choojs/findup": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", + "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", + "requires": { + "commander": "^2.15.1" + }, + "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==" + } + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@cypress/request": { + "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + } + }, + "@cypress/vue": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@cypress/vue/-/vue-4.2.2.tgz", + "integrity": "sha512-M5u8w3OwEwvhYo43tBwduYn3hra5m5yIIAak8mFt+mt58yCmkW57q6mkNkZNZNtVei2eMHIcCfAWLoZmpqg4fg==", + "dev": true, + "requires": {} + }, + "@cypress/webpack-dev-server": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cypress/webpack-dev-server/-/webpack-dev-server-2.5.0.tgz", + "integrity": "sha512-IWd6nFiGTMXh89Si6KC3Snq9FnV4raijLt4jDHYvRt4S7y6IoG8Uiw37UpFfzbUpwSFl8FVbWr8VosIotEj1Pw==", + "dev": true, + "requires": { + "find-up": "6.3.0", + "fs-extra": "9.1.0", + "html-webpack-plugin-4": "npm:html-webpack-plugin@^4", + "html-webpack-plugin-5": "npm:html-webpack-plugin@^5", + "local-pkg": "0.4.1", + "speed-measure-webpack-plugin": "1.4.2", + "tslib": "^2.3.1", + "webpack-dev-server": "^4.7.4", + "webpack-merge": "^5.4.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "local-pkg": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.1.tgz", + "integrity": "sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==", + "dev": true + }, + "locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@esbuild-plugins/node-globals-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", + "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", + "requires": {} + }, + "@esbuild/android-arm": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.14.tgz", + "integrity": "sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz", + "integrity": "sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==", + "optional": true + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.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": { + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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==", + "dev": true + } + } + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "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==", + "dev": true + }, + "@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==", + "dev": true + }, + "@interactjs/actions": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/actions/-/actions-1.10.17.tgz", + "integrity": "sha512-wyB1ZqpaZy5gmz6VDqK9KWh98xKnFgL7VyLvxHODFi9V0IYX4HJAAOBlhtfze0D1R1f1cY+gqPDK+dLaHMlE+w==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/auto-scroll": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/auto-scroll/-/auto-scroll-1.10.17.tgz", + "integrity": "sha512-IQcW7N3xOaoL8RnAGOGMk0Y2gue7L4S3BT6Id4VBBu8so163DtLiZVW6jXu9rKVntzbluaAeqNZlfAVyu3kIWg==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/auto-start": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/auto-start/-/auto-start-1.10.17.tgz", + "integrity": "sha512-qYVxhAbYnwxjD/NLEegUoAST7WASJ4VmWNjsyWRx/js5Op+I4E2zteARIeZGgrutcGIXMCcQzhCMgE3PjOpbpw==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/core": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.17.tgz", + "integrity": "sha512-rL9w+83HDRuXub8Ezqs+97CYLl/ne7bLT/sAeduUWaxYhsW9iOqBoob9JnkkCZOaOsYizWI1EWy0+fNc5ibtLQ==", + "requires": {} + }, + "@interactjs/dev-tools": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/dev-tools/-/dev-tools-1.10.17.tgz", + "integrity": "sha512-Oi9nEw3FfSwkNmW+V0WwdHqvzEkVHc24mH1v5EjRn60sqgrGLK9nTQ+NSuqcnUY8GxC3TkyuxnsOodxiadIRmA==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/inertia": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/inertia/-/inertia-1.10.17.tgz", + "integrity": "sha512-41vbYUjZIDCKt2/yhmjPrEW5+0uoL/hldFsll9pkvnLhmm12Xk0VXOlmR2zXKAmsTK3fJlKMyBYUX92qHLkyVQ==", + "requires": { + "@interactjs/interact": "1.10.17", + "@interactjs/offset": "1.10.17" + } + }, + "@interactjs/interact": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/interact/-/interact-1.10.17.tgz", + "integrity": "sha512-NyKsf8EFudvdahBjPz1Gt5QnynVwa/2LUfBc2/w8QOnOBiyzUm0HLloJSaB8a50QbQkSWN243/Lgpd8GTMQvuQ==", + "requires": { + "@interactjs/core": "1.10.17", + "@interactjs/types": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "@interactjs/interactjs": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/interactjs/-/interactjs-1.10.17.tgz", + "integrity": "sha512-hHmiukARbZhiM12zNKx0yQlFVl4C+NMeYNAYh6Mf9U3ZziQ47C+JEW8Gr7Zr/MxfNZyPu5nLKCpVQjh/JvBO9g==", + "requires": { + "@interactjs/actions": "1.10.17", + "@interactjs/auto-scroll": "1.10.17", + "@interactjs/auto-start": "1.10.17", + "@interactjs/core": "1.10.17", + "@interactjs/dev-tools": "1.10.17", + "@interactjs/inertia": "1.10.17", + "@interactjs/interact": "1.10.17", + "@interactjs/modifiers": "1.10.17", + "@interactjs/offset": "1.10.17", + "@interactjs/pointer-events": "1.10.17", + "@interactjs/reflow": "1.10.17", + "@interactjs/utils": "1.10.17" + } + }, + "@interactjs/modifiers": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/modifiers/-/modifiers-1.10.17.tgz", + "integrity": "sha512-Dxw8kv9VBIxnhNvQncR6CKAGMzKXczLvuAUIdSPFYtyerX/XiDulJUqhR+jVKNp/WjF1DvdBxWo0kGGLbM84LQ==", + "requires": { + "@interactjs/interact": "1.10.17", + "@interactjs/snappers": "1.10.17" + } + }, + "@interactjs/offset": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/offset/-/offset-1.10.17.tgz", + "integrity": "sha512-wWBnIQWgLrmJNTBbd/FdxHxAJjiXl/5ND8Jbw2DuP9gIGDxhFSdEt62Fgqimn9ICb8v8ycvSLObEmcvJF/8hQQ==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/pointer-events": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/pointer-events/-/pointer-events-1.10.17.tgz", + "integrity": "sha512-VsfluouEKb8QRGyH6jQATCW+QdAd/3dkENS7rj2m+EcVUhz2Ob5mpMRopjALi4pwltMowqTfuJ4LtwMSX2G29A==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/reflow": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/reflow/-/reflow-1.10.17.tgz", + "integrity": "sha512-ncpWP5k93FRQptEhjzPZsbuRRajd4rkW17lDavCrEjrDi/LHnYekWGqZTaFzfJ80n1x8xUm9ujDjxCTylNqEIA==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/snappers": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/snappers/-/snappers-1.10.17.tgz", + "integrity": "sha512-m753DGsNOts797e3zDT6wqELoc+BlpIC1w+TyMyISRxU6n1RlS8Q6LHBGgwAgV79LHLaahv/a5haFF9H1VG0FQ==", + "requires": { + "@interactjs/interact": "1.10.17" + } + }, + "@interactjs/types": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/types/-/types-1.10.17.tgz", + "integrity": "sha512-X2JpoM7xUw0p9Me0tMaI0HNfcF/Hd07ZZlzpnpEMpGerUZOLoyeThrV9P+CrBHxZrluWJrigJbcdqXliFd0YMA==" + }, + "@interactjs/utils": { + "version": "1.10.17", + "resolved": "https://registry.npmjs.org/@interactjs/utils/-/utils-1.10.17.tgz", + "integrity": "sha512-sZAW08CkqgvqRjUIaLRjScjObcCzN9D75yekLA21EClYAZIhi4A+GEt2z/WqOCOksTaEPLYmQyhkpXcboc0LhQ==" + }, + "@intlify/core-base": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz", + "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==", + "requires": { + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" + } + }, + "@intlify/devtools-if": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz", + "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==", + "requires": { + "@intlify/shared": "9.2.2" + } + }, + "@intlify/message-compiler": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz", + "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==", + "requires": { + "@intlify/shared": "9.2.2", + "source-map": "0.6.1" + } + }, + "@intlify/shared": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", + "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==" + }, + "@intlify/vue-devtools": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz", + "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==", + "requires": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" + } + }, + "@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==", + "dev": true + }, + "@jest/create-cache-key-function": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz", + "integrity": "sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==", + "peer": true, + "requires": { + "@jest/types": "^27.5.1" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "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==", + "dev": true + }, + "@lukeed/csprng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", + "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==" + }, + "@lukeed/uuid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", + "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", + "requires": { + "@lukeed/csprng": "^1.0.0" + } + }, + "@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "requires": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "dependencies": { + "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==" + } + } + }, + "@mapbox/geojson-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" + }, + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==" + }, + "@mapbox/mapbox-gl-supported": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", + "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", + "requires": {} + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "@mapbox/tiny-sdf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", + "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" + }, + "@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "requires": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" + }, + "@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==", + "dev": true, + "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==", + "dev": true + }, + "@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==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@openreplay/tracker": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@openreplay/tracker/-/tracker-4.1.7.tgz", + "integrity": "sha512-szOjfJgzb0mQ1jcCX4Jon39b6wpoDdSGylukoim8ILqY8rLI7UkhuwjO7HD+p2uMOvM+QWVlG2ha6QWYobJVuw==", + "requires": { + "error-stack-parser": "^2.0.6" + } + }, + "@plotly/d3": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.0.tgz", + "integrity": "sha512-L10iHgzvw3uSic/nQpYehlNzxUQvImwms5U7S95pJAEhrllzkrdQNy1Mc5DW9ab881Yr4fh300gJztKXWZDfkQ==" + }, + "@plotly/d3-sankey": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz", + "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==", + "requires": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + } + }, + "@plotly/d3-sankey-circular": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz", + "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==", + "requires": { + "d3-array": "^1.2.1", + "d3-collection": "^1.0.4", + "d3-shape": "^1.2.0", + "elementary-circuits-directed-graph": "^1.0.4" + } + }, + "@plotly/point-cluster": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz", + "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==", + "requires": { + "array-bounds": "^1.0.1", + "binary-search-bounds": "^2.0.4", + "clamp": "^1.0.1", + "defined": "^1.0.0", + "dtype": "^2.0.0", + "flatten-vertex-data": "^1.0.2", + "is-obj": "^1.0.1", + "math-log2": "^1.0.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@quasar/extras": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.15.6.tgz", + "integrity": "sha512-lG3wrcz47c86N/j1ULZugmyVfwpmnsJpjtSWh+LhaFfe0g1kTMdAnxkWGKsa3ouZ4QBcnkrNan0kYSnKc3MiBg==" + }, + "@quasar/vite-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@quasar/vite-plugin/-/vite-plugin-1.2.3.tgz", + "integrity": "sha512-ErSyY3cHz40GBIQUmqSI8OzzshJM5pLq33Yq3NEtYdWYh1NuIc4C766xkatUdxvhX9sLNnQQZax2ysJ5u7kUJA==", + "dev": true, + "requires": {} + }, + "@react-native-community/cli": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-9.3.2.tgz", + "integrity": "sha512-IAW4X0vmX/xozNpp/JVZaX7MrC85KV0OP2DF4o7lNGOfpUhzJAEWqTfkxFYS+VsRjZHDve4wSTiGIuXwE7FG1w==", + "peer": true, + "requires": { + "@react-native-community/cli-clean": "^9.2.1", + "@react-native-community/cli-config": "^9.2.1", + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-doctor": "^9.3.0", + "@react-native-community/cli-hermes": "^9.3.1", + "@react-native-community/cli-plugin-metro": "^9.2.1", + "@react-native-community/cli-server-api": "^9.2.1", + "@react-native-community/cli-tools": "^9.2.1", + "@react-native-community/cli-types": "^9.1.0", + "chalk": "^4.1.2", + "commander": "^9.4.0", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.0", + "semver": "^6.3.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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "commander": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "peer": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + } + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "requires": { + "pump": "^3.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==", + "peer": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "requires": { + "path-key": "^2.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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@react-native-community/cli-clean": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-9.2.1.tgz", + "integrity": "sha512-dyNWFrqRe31UEvNO+OFWmQ4hmqA07bR9Ief/6NnGwx67IO9q83D5PEAf/o96ML6jhSbDwCmpPKhPwwBbsyM3mQ==", + "peer": true, + "requires": { + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "prompts": "^2.4.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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "requires": { + "pump": "^3.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==", + "peer": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@react-native-community/cli-config": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-9.2.1.tgz", + "integrity": "sha512-gHJlBBXUgDN9vrr3aWkRqnYrPXZLztBDQoY97Mm5Yo6MidsEpYo2JIP6FH4N/N2p1TdjxJL4EFtdd/mBpiR2MQ==", + "peer": true, + "requires": { + "@react-native-community/cli-tools": "^9.2.1", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "glob": "^7.1.3", + "joi": "^17.2.1" + } + }, + "@react-native-community/cli-debugger-ui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-9.0.0.tgz", + "integrity": "sha512-7hH05ZwU9Tp0yS6xJW0bqcZPVt0YCK7gwj7gnRu1jDNN2kughf6Lg0Ys29rAvtZ7VO1PK5c1O+zs7yFnylQDUA==", + "peer": true, + "requires": { + "serve-static": "^1.13.1" + } + }, + "@react-native-community/cli-doctor": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-9.3.0.tgz", + "integrity": "sha512-/fiuG2eDGC2/OrXMOWI5ifq4X1gdYTQhvW2m0TT5Lk1LuFiZsbTCp1lR+XILKekuTvmYNjEGdVpeDpdIWlXdEA==", + "peer": true, + "requires": { + "@react-native-community/cli-config": "^9.2.1", + "@react-native-community/cli-platform-ios": "^9.3.0", + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "prompts": "^2.4.0", + "semver": "^6.3.0", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + } + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "requires": { + "pump": "^3.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==", + "peer": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "requires": { + "ansi-regex": "^4.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==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@react-native-community/cli-hermes": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-9.3.1.tgz", + "integrity": "sha512-Mq4PK8m5YqIdaVq5IdRfp4qK09aVO+aiCtd6vjzjNUgk1+1X5cgUqV6L65h4N+TFJYJHcp2AnB+ik1FAYXvYPQ==", + "peer": true, + "requires": { + "@react-native-community/cli-platform-android": "^9.3.1", + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-platform-android": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-9.3.1.tgz", + "integrity": "sha512-m0bQ6Twewl7OEZoVf79I2GZmsDqh+Gh0bxfxWgwxobsKDxLx8/RNItAo1lVtTCgzuCR75cX4EEO8idIF9jYhew==", + "peer": true, + "requires": { + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "logkitty": "^0.7.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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "requires": { + "pump": "^3.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==", + "peer": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@react-native-community/cli-platform-ios": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.3.0.tgz", + "integrity": "sha512-nihTX53BhF2Q8p4B67oG3RGe1XwggoGBrMb6vXdcu2aN0WeXJOXdBLgR900DAA1O8g7oy1Sudu6we+JsVTKnjw==", + "peer": true, + "requires": { + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "ora": "^5.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "requires": { + "pump": "^3.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==", + "peer": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "peer": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@react-native-community/cli-plugin-metro": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.2.1.tgz", + "integrity": "sha512-byBGBH6jDfUvcHGFA45W/sDwMlliv7flJ8Ns9foCh3VsIeYYPoDjjK7SawE9cPqRdMAD4SY7EVwqJnOtRbwLiQ==", + "peer": true, + "requires": { + "@react-native-community/cli-server-api": "^9.2.1", + "@react-native-community/cli-tools": "^9.2.1", + "chalk": "^4.1.2", + "metro": "0.72.3", + "metro-config": "0.72.3", + "metro-core": "0.72.3", + "metro-react-native-babel-transformer": "0.72.3", + "metro-resolver": "0.72.3", + "metro-runtime": "0.72.3", + "readline": "^1.3.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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-server-api": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-9.2.1.tgz", + "integrity": "sha512-EI+9MUxEbWBQhWw2PkhejXfkcRqPl+58+whlXJvKHiiUd7oVbewFs0uLW0yZffUutt4FGx6Uh88JWEgwOzAdkw==", + "peer": true, + "requires": { + "@react-native-community/cli-debugger-ui": "^9.0.0", + "@react-native-community/cli-tools": "^9.2.1", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.0", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^7.5.1" + }, + "dependencies": { + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "requires": {} + } + } + }, + "@react-native-community/cli-tools": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-9.2.1.tgz", + "integrity": "sha512-bHmL/wrKmBphz25eMtoJQgwwmeCylbPxqFJnFSbkqJPXQz3ManQ6q/gVVMqFyz7D3v+riaus/VXz3sEDa97uiQ==", + "peer": true, + "requires": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^6.3.0", + "shell-quote": "^1.7.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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-types": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-9.1.0.tgz", + "integrity": "sha512-KDybF9XHvafLEILsbiKwz5Iobd+gxRaPyn4zSaAerBxedug4er5VUWa8Szy+2GeYKZzMh/gsb1o9lCToUwdT/g==", + "peer": true, + "requires": { + "joi": "^17.2.1" + } + }, + "@react-native/assets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", + "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==", + "peer": true + }, + "@react-native/normalize-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", + "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", + "peer": true + }, + "@react-native/polyfills": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", + "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==", + "peer": true + }, + "@rollup/plugin-inject": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", + "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "estree-walker": "^2.0.1", + "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": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + } + } + }, + "@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==", + "dev": true + }, + "@segment/analytics-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.1.2.tgz", + "integrity": "sha512-F20iWeARLK1xE82RjzVaTl0g7sdHsKTyeXPiTy4jc/kx/ttvQ3WjyCqUjFgbviDJeN8VTsKBVIY/4yPq57efKg==", + "requires": { + "dset": "^3.1.2", + "tslib": "^2.4.0" + } + }, + "@segment/analytics-next": { + "version": "1.46.3", + "resolved": "https://registry.npmjs.org/@segment/analytics-next/-/analytics-next-1.46.3.tgz", + "integrity": "sha512-JGgaJjNqu3bnwjM9/iB5X7W2iCYwiJZFF3FKSp/Al1tHUtm9wsne2lr7YniTYFjedQt+YYR0bj9aoHPfzGS/oA==", + "requires": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-core": "1.1.2", + "@segment/analytics.js-video-plugins": "^0.2.1", + "@segment/facade": "^3.4.9", + "@segment/tsub": "1.0.1", + "dset": "^3.1.2", + "js-cookie": "3.0.1", + "node-fetch": "^2.6.7", + "spark-md5": "^3.0.1", + "tslib": "^2.4.0", + "unfetch": "^4.1.0" + } + }, + "@segment/analytics.js-video-plugins": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@segment/analytics.js-video-plugins/-/analytics.js-video-plugins-0.2.1.tgz", + "integrity": "sha512-lZwCyEXT4aaHBLNK433okEKdxGAuyrVmop4BpQqQSJuRz0DglPZgd9B/XjiiWs1UyOankg2aNYMN3VcS8t4eSQ==", + "requires": { + "unfetch": "^3.1.1" + }, + "dependencies": { + "unfetch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.2.tgz", + "integrity": "sha512-L0qrK7ZeAudGiKYw6nzFjnJ2D5WHblUBwmHIqtPS6oKUd+Hcpk7/hKsSmcHsTlpd1TbTNsiRBUKRq3bHLNIqIw==" + } + } + }, + "@segment/facade": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/@segment/facade/-/facade-3.4.9.tgz", + "integrity": "sha512-0RTLB0g4HiJASc6pTD2/Tru+Qz+VPGL1W+/EvkBGhY6WYk00cZhTjLsMJ8X5BO6iPqLb3vsxtfjVM/RREG5oQQ==", + "requires": { + "@segment/isodate-traverse": "^1.1.1", + "inherits": "^2.0.4", + "new-date": "^1.0.3", + "obj-case": "0.2.1" + } + }, + "@segment/isodate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@segment/isodate/-/isodate-1.0.3.tgz", + "integrity": "sha512-BtanDuvJqnACFkeeYje7pWULVv8RgZaqKHWwGFnL/g/TH/CcZjkIVTfGDp/MAxmilYHUkrX70SqwnYSTNEaN7A==" + }, + "@segment/isodate-traverse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@segment/isodate-traverse/-/isodate-traverse-1.1.1.tgz", + "integrity": "sha512-+G6e1SgAUkcq0EDMi+SRLfT48TNlLPF3QnSgFGVs0V9F3o3fq/woQ2rHFlW20W0yy5NnCUH0QGU3Am2rZy/E3w==", + "requires": { + "@segment/isodate": "^1.0.3" + } + }, + "@segment/tsub": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@segment/tsub/-/tsub-1.0.1.tgz", + "integrity": "sha512-rUpvlj/rRfOolk5rjwyrsbl0qzGLsaYgFNEiOSrwrWDryDPq1ZGdo+3Eb+E8+EC0yZOAO4F1DjJfLtaSifpx7w==", + "requires": { + "@stdlib/math-base-special-ldexp": "^0.0.5", + "dlv": "^1.1.3", + "dset": "^3.1.1", + "tiny-hashes": "^1.0.1" + } + }, + "@sentry/browser": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.21.1.tgz", + "integrity": "sha512-cS2Jz2+fs9+4pJqLJPtYqGyY97ywJDWAWIR1Yla3hs1QQuH6m0Nz3ojZD1gE2eKH9mHwkGbnNAh+hHcrYrfGzw==", + "requires": { + "@sentry/core": "7.21.1", + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/core": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.21.1.tgz", + "integrity": "sha512-Og5wEEsy24fNvT/T7IKjcV4EvVK5ryY2kxbJzKY6GU2eX+i+aBl+n/vp7U0Es351C/AlTkS+0NOUsp2TQQFxZA==", + "requires": { + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/tracing": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.21.1.tgz", + "integrity": "sha512-b1BTPsRaNQpohzegoz59KGuBl+To651vEq0vMS4tCzSyIdxkYso3JCrjDdEqW/2MliQYANNVrUai2bmwmU9h1g==", + "requires": { + "@sentry/core": "7.21.1", + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/types": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.21.1.tgz", + "integrity": "sha512-3/IKnd52Ol21amQvI+kz+WB76s8/LR5YvFJzMgIoI2S8d82smIr253zGijRXxHPEif8kMLX4Yt+36VzrLxg6+A==" + }, + "@sentry/utils": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.21.1.tgz", + "integrity": "sha512-F0W0AAi8tgtTx6ApZRI2S9HbXEA9ENX1phTZgdNNWcMFm1BNbc21XEwLqwXBNjub5nlA6CE8xnjXRgdZKx4kzQ==", + "requires": { + "@sentry/types": "7.21.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/vue": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.21.1.tgz", + "integrity": "sha512-dgXhkG9W2jkOj0/nNHdrHm97rJPvPs3BWA6VoG1xPbyAkdcA8XNLxEpHlrKgo4ZisJDXlHWuDFELPbbhqYf+RQ==", + "requires": { + "@sentry/browser": "7.21.1", + "@sentry/core": "7.21.1", + "@sentry/types": "7.21.1", + "@sentry/utils": "7.21.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@stdlib/array-float32": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-float32/-/array-float32-0.0.6.tgz", + "integrity": "sha512-QgKT5UaE92Rv7cxfn7wBKZAlwFFHPla8eXsMFsTGt5BiL4yUy36lwinPUh4hzybZ11rw1vifS3VAPuk6JP413Q==", + "requires": { + "@stdlib/assert-has-float32array-support": "^0.0.x" + } + }, + "@stdlib/array-float64": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-float64/-/array-float64-0.0.6.tgz", + "integrity": "sha512-oE8y4a84LyBF1goX5//sU1mOjet8gLI0/6wucZcjg+j/yMmNV1xFu84Az9GOGmFSE6Ze6lirGOhfBeEWNNNaJg==", + "requires": { + "@stdlib/assert-has-float64array-support": "^0.0.x" + } + }, + "@stdlib/array-uint16": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-uint16/-/array-uint16-0.0.6.tgz", + "integrity": "sha512-/A8Tr0CqJ4XScIDRYQawosko8ha1Uy+50wsTgJhjUtXDpPRp7aUjmxvYkbe7Rm+ImYYbDQVix/uCiPAFQ8ed4Q==", + "requires": { + "@stdlib/assert-has-uint16array-support": "^0.0.x" + } + }, + "@stdlib/array-uint32": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-uint32/-/array-uint32-0.0.6.tgz", + "integrity": "sha512-2hFPK1Fg7obYPZWlGDjW9keiIB6lXaM9dKmJubg/ergLQCsJQJZpYsG6mMAfTJi4NT1UF4jTmgvyKD+yf0D9cA==", + "requires": { + "@stdlib/assert-has-uint32array-support": "^0.0.x" + } + }, + "@stdlib/array-uint8": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/array-uint8/-/array-uint8-0.0.7.tgz", + "integrity": "sha512-qYJQQfGKIcky6TzHFIGczZYTuVlut7oO+V8qUBs7BJC9TwikVnnOmb3hY3jToY4xaoi5p9OvgdJKPInhyIhzFg==", + "requires": { + "@stdlib/assert-has-uint8array-support": "^0.0.x" + } + }, + "@stdlib/assert-has-float32array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-float32array-support/-/assert-has-float32array-support-0.0.8.tgz", + "integrity": "sha512-Yrg7K6rBqwCzDWZ5bN0VWLS5dNUWcoSfUeU49vTERdUmZID06J069CDc07UUl8vfQWhFgBWGocH3rrpKm1hi9w==", + "requires": { + "@stdlib/assert-is-float32array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-float64-pinf": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-has-float64array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-float64array-support/-/assert-has-float64array-support-0.0.8.tgz", + "integrity": "sha512-UVQcoeWqgMw9b8PnAmm/sgzFnuWkZcNhJoi7xyMjbiDV/SP1qLCrvi06mq86cqS3QOCma1fEayJdwgteoXyyuw==", + "requires": { + "@stdlib/assert-is-float64array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-has-node-buffer-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-node-buffer-support/-/assert-has-node-buffer-support-0.0.8.tgz", + "integrity": "sha512-fgI+hW4Yg4ciiv4xVKH+1rzdV7e5+6UKgMnFbc1XDXHcxLub3vOr8+H6eDECdAIfgYNA7X0Dxa/DgvX9dwDTAQ==", + "requires": { + "@stdlib/assert-is-buffer": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-has-own-property": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-own-property/-/assert-has-own-property-0.0.7.tgz", + "integrity": "sha512-3YHwSWiUqGlTLSwxAWxrqaD1PkgcJniGyotJeIt5X0tSNmSW0/c9RWroCImTUUB3zBkyBJ79MyU9Nf4Qgm59fQ==" + }, + "@stdlib/assert-has-symbol-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-symbol-support/-/assert-has-symbol-support-0.0.8.tgz", + "integrity": "sha512-PoQ9rk8DgDCuBEkOIzGGQmSnjtcdagnUIviaP5YskB45/TJHXseh4NASWME8FV77WFW9v/Wt1MzKFKMzpDFu4Q==", + "requires": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-has-tostringtag-support": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-tostringtag-support/-/assert-has-tostringtag-support-0.0.9.tgz", + "integrity": "sha512-UTsqdkrnQ7eufuH5BeyWOJL3ska3u5nvDWKqw3onNNZ2mvdgkfoFD7wHutVGzAA2rkTsSJAMBHVwWLsm5SbKgw==", + "requires": { + "@stdlib/assert-has-symbol-support": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-has-uint16array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-uint16array-support/-/assert-has-uint16array-support-0.0.8.tgz", + "integrity": "sha512-vqFDn30YrtzD+BWnVqFhB130g3cUl2w5AdOxhIkRkXCDYAM5v7YwdNMJEON+D4jI8YB4D5pEYjqKweYaCq4nyg==", + "requires": { + "@stdlib/assert-is-uint16array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-uint16-max": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-has-uint32array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-uint32array-support/-/assert-has-uint32array-support-0.0.8.tgz", + "integrity": "sha512-tJtKuiFKwFSQQUfRXEReOVGXtfdo6+xlshSfwwNWXL1WPP2LrceoiUoQk7zMCMT6VdbXgGH92LDjVcPmSbH4Xw==", + "requires": { + "@stdlib/assert-is-uint32array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-uint32-max": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-has-uint8array-support": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-has-uint8array-support/-/assert-has-uint8array-support-0.0.8.tgz", + "integrity": "sha512-ie4vGTbAS/5Py+LLjoSQi0nwtYBp+WKk20cMYCzilT0rCsBI/oez0RqHrkYYpmt4WaJL4eJqC+/vfQ5NsI7F5w==", + "requires": { + "@stdlib/assert-is-uint8array": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/constants-uint8-max": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-is-array": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-array/-/assert-is-array-0.0.7.tgz", + "integrity": "sha512-/o6KclsGkNcZ5hiROarsD9XUs6xQMb4lTwF6O71UHbKWTtomEF/jD0rxLvlvj0BiCxfKrReddEYd2CnhUyskMA==", + "requires": { + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-big-endian": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-big-endian/-/assert-is-big-endian-0.0.7.tgz", + "integrity": "sha512-BvutsX84F76YxaSIeS5ZQTl536lz+f+P7ew68T1jlFqxBhr4v7JVYFmuf24U040YuK1jwZ2sAq+bPh6T09apwQ==", + "requires": { + "@stdlib/array-uint16": "^0.0.x", + "@stdlib/array-uint8": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-is-boolean": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-boolean/-/assert-is-boolean-0.0.8.tgz", + "integrity": "sha512-PRCpslMXSYqFMz1Yh4dG2K/WzqxTCtlKbgJQD2cIkAtXux4JbYiXCtepuoV7l4Wv1rm0a1eU8EqNPgnOmWajGw==", + "requires": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-buffer": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-buffer/-/assert-is-buffer-0.0.8.tgz", + "integrity": "sha512-SYmGwOXkzZVidqUyY1IIx6V6QnSL36v3Lcwj8Rvne/fuW0bU2OomsEBzYCFMvcNgtY71vOvgZ9VfH3OppvV6eA==", + "requires": { + "@stdlib/assert-is-object-like": "^0.0.x" + } + }, + "@stdlib/assert-is-float32array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-float32array/-/assert-is-float32array-0.0.8.tgz", + "integrity": "sha512-Phk0Ze7Vj2/WLv5Wy8Oo7poZIDMSTiTrEnc1t4lBn3Svz2vfBXlvCufi/i5d93vc4IgpkdrOEwfry6nldABjNQ==", + "requires": { + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-float64array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-float64array/-/assert-is-float64array-0.0.8.tgz", + "integrity": "sha512-UC0Av36EEYIgqBbCIz1lj9g7qXxL5MqU1UrWun+n91lmxgdJ+Z77fHy75efJbJlXBf6HXhcYXECIsc0u3SzyDQ==", + "requires": { + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-function": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-function/-/assert-is-function-0.0.8.tgz", + "integrity": "sha512-M55Dt2njp5tnY8oePdbkKBRIypny+LpCMFZhEjJIxjLE4rA6zSlHs1yRMqD4PmW+Wl9WTeEM1GYO4AQHl1HAjA==", + "requires": { + "@stdlib/utils-type-of": "^0.0.x" + } + }, + "@stdlib/assert-is-little-endian": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-little-endian/-/assert-is-little-endian-0.0.7.tgz", + "integrity": "sha512-SPObC73xXfDXY0dOewXR0LDGN3p18HGzm+4K8azTj6wug0vpRV12eB3hbT28ybzRCa6TAKUjwM/xY7Am5QzIlA==", + "requires": { + "@stdlib/array-uint16": "^0.0.x", + "@stdlib/array-uint8": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/assert-is-number": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-number/-/assert-is-number-0.0.7.tgz", + "integrity": "sha512-mNV4boY1cUOmoWWfA2CkdEJfXA6YvhcTvwKC0Fzq+HoFFOuTK/scpTd9HanUyN6AGBlWA8IW+cQ1ZwOT3XMqag==", + "requires": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/number-ctor": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-object": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-object/-/assert-is-object-0.0.8.tgz", + "integrity": "sha512-ooPfXDp9c7w+GSqD2NBaZ/Du1JRJlctv+Abj2vRJDcDPyrnRTb1jmw+AuPgcW7Ca7op39JTbArI+RVHm/FPK+Q==", + "requires": { + "@stdlib/assert-is-array": "^0.0.x" + } + }, + "@stdlib/assert-is-object-like": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-object-like/-/assert-is-object-like-0.0.8.tgz", + "integrity": "sha512-pe9selDPYAu/lYTFV5Rj4BStepgbzQCr36b/eC8EGSJh6gMgRXgHVv0R+EbdJ69KNkHvKKRjnWj0A/EmCwW+OA==", + "requires": { + "@stdlib/assert-tools-array-function": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/assert-is-plain-object": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-plain-object/-/assert-is-plain-object-0.0.7.tgz", + "integrity": "sha512-t/CEq2a083ajAgXgSa5tsH8l3kSoEqKRu1qUwniVLFYL4RGv3615CrpJUDQKVtEX5S/OKww5q0Byu3JidJ4C5w==", + "requires": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-object": "^0.0.x", + "@stdlib/utils-get-prototype-of": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-regexp": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-regexp/-/assert-is-regexp-0.0.7.tgz", + "integrity": "sha512-ty5qvLiqkDq6AibHlNJe0ZxDJ9Mg896qolmcHb69mzp64vrsORnPPOTzVapAq0bEUZbXoypeijypLPs9sCGBSQ==", + "requires": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-regexp-string": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-regexp-string/-/assert-is-regexp-string-0.0.9.tgz", + "integrity": "sha512-FYRJJtH7XwXEf//X6UByUC0Eqd0ZYK5AC8or5g5m5efQrgr2lOaONHyDQ3Scj1A2D6QLIJKZc9XBM4uq5nOPXA==", + "requires": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/regexp-eol": "^0.0.x", + "@stdlib/regexp-regexp": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x" + } + }, + "@stdlib/assert-is-string": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-string/-/assert-is-string-0.0.8.tgz", + "integrity": "sha512-Uk+bR4cglGBbY0q7O7HimEJiW/DWnO1tSzr4iAGMxYgf+VM2PMYgI5e0TLy9jOSOzWon3YS39lc63eR3a9KqeQ==", + "requires": { + "@stdlib/assert-has-tostringtag-support": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-uint16array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-uint16array/-/assert-is-uint16array-0.0.8.tgz", + "integrity": "sha512-M+qw7au+qglRXcXHjvoUZVLlGt1mPjuKudrVRto6KL4+tDsP2j+A89NDP3Fz8/XIUD+5jhj+65EOKHSMvDYnng==", + "requires": { + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-uint32array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-uint32array/-/assert-is-uint32array-0.0.8.tgz", + "integrity": "sha512-cnZi2DicYcplMnkJ3dBxBVKsRNFjzoGpmG9A6jXq4KH5rFl52SezGAXSVY9o5ZV7bQGaF5JLyCLp6n9Y74hFGg==", + "requires": { + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-is-uint8array": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/assert-is-uint8array/-/assert-is-uint8array-0.0.8.tgz", + "integrity": "sha512-8cqpDQtjnJAuVtRkNAktn45ixq0JHaGJxVsSiK79k7GRggvMI6QsbzO6OvcLnZ/LimD42FmgbLd13Yc2esDmZw==", + "requires": { + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/assert-tools-array-function": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/assert-tools-array-function/-/assert-tools-array-function-0.0.7.tgz", + "integrity": "sha512-3lqkaCIBMSJ/IBHHk4NcCnk2NYU52tmwTYbbqhAmv7vim8rZPNmGfj3oWkzrCsyCsyTF7ooD+In2x+qTmUbCtQ==", + "requires": { + "@stdlib/assert-is-array": "^0.0.x" + } + }, + "@stdlib/buffer-ctor": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/buffer-ctor/-/buffer-ctor-0.0.7.tgz", + "integrity": "sha512-4IyTSGijKUQ8+DYRaKnepf9spvKLZ+nrmZ+JrRcB3FrdTX/l9JDpggcUcC/Fe+A4KIZOnClfxLn6zfIlkCZHNA==", + "requires": { + "@stdlib/assert-has-node-buffer-support": "^0.0.x" + } + }, + "@stdlib/buffer-from-string": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/buffer-from-string/-/buffer-from-string-0.0.8.tgz", + "integrity": "sha512-Dws5ZbK2M9l4Bkn/ODHFm3lNZ8tWko+NYXqGS/UH/RIQv3PGp+1tXFUSvjwjDneM6ppjQVExzVedUH1ftABs9A==", + "requires": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/buffer-ctor": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + } + }, + "@stdlib/cli-ctor": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@stdlib/cli-ctor/-/cli-ctor-0.0.3.tgz", + "integrity": "sha512-0zCuZnzFyxj66GoF8AyIOhTX5/mgGczFvr6T9h4mXwegMZp8jBC/ZkOGMwmp+ODLBTvlcnnDNpNFkDDyR6/c2g==", + "requires": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-noop": "^0.0.x", + "minimist": "^1.2.0" + } + }, + "@stdlib/complex-float32": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/complex-float32/-/complex-float32-0.0.7.tgz", + "integrity": "sha512-POCtQcBZnPm4IrFmTujSaprR1fcOFr/MRw2Mt7INF4oed6b1nzeG647K+2tk1m4mMrMPiuXCdvwJod4kJ0SXxQ==", + "requires": { + "@stdlib/assert-is-number": "^0.0.x", + "@stdlib/number-float64-base-to-float32": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-define-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/complex-float64": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/complex-float64/-/complex-float64-0.0.8.tgz", + "integrity": "sha512-lUJwsXtGEziOWAqCcnKnZT4fcVoRsl6t6ECaCJX45Z7lAc70yJLiwUieLWS5UXmyoADHuZyUXkxtI4oClfpnaw==", + "requires": { + "@stdlib/assert-is-number": "^0.0.x", + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-define-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/complex-reim": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/complex-reim/-/complex-reim-0.0.6.tgz", + "integrity": "sha512-28WXfPSIFMtHb0YgdatkGS4yxX5sPYea5MiNgqPv3E78+tFcg8JJG52NQ/MviWP2wsN9aBQAoCPeu8kXxSPdzA==", + "requires": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/complex-float64": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/complex-reimf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@stdlib/complex-reimf/-/complex-reimf-0.0.1.tgz", + "integrity": "sha512-P9zu05ZW2i68Oppp3oHelP7Tk0D7tGBL0hGl1skJppr2vY9LltuNbeYI3C96tQe/7Enw/5GyAWgxoQI4cWccQA==", + "requires": { + "@stdlib/array-float32": "^0.0.x", + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-exponent-bias": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-exponent-bias/-/constants-float64-exponent-bias-0.0.8.tgz", + "integrity": "sha512-IzBJQw9hYgWCki7VoC/zJxEA76Nmf8hmY+VkOWnJ8IyfgTXClgY8tfDGS1cc4l/hCOEllxGp9FRvVdn24A5tKQ==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-high-word-abs-mask": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-high-word-abs-mask/-/constants-float64-high-word-abs-mask-0.0.1.tgz", + "integrity": "sha512-1vy8SUyMHFBwqUUVaZFA7r4/E3cMMRKSwsaa/EZ15w7Kmc01W/ZmaaTLevRcIdACcNgK+8i8813c8H7LScXNcQ==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-high-word-exponent-mask": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-high-word-exponent-mask/-/constants-float64-high-word-exponent-mask-0.0.8.tgz", + "integrity": "sha512-z28/EQERc0VG7N36bqdvtrRWjFc8600PKkwvl/nqx6TpKAzMXNw55BS1xT4C28Sa9Z7uBWeUj3UbIFedbkoyMw==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-high-word-sign-mask": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-high-word-sign-mask/-/constants-float64-high-word-sign-mask-0.0.1.tgz", + "integrity": "sha512-hmTr5caK1lh1m0eyaQqt2Vt3y+eEdAx57ndbADEbXhxC9qSGd0b4bLSzt/Xp4MYBYdQkHAE/BlkgUiRThswhCg==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-max-base2-exponent": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-max-base2-exponent/-/constants-float64-max-base2-exponent-0.0.8.tgz", + "integrity": "sha512-xBAOtso1eiy27GnTut2difuSdpsGxI8dJhXupw0UukGgvy/3CSsyNm+a1Suz/dhqK4tPOTe5QboIdNMw5IgXKQ==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-max-base2-exponent-subnormal": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-max-base2-exponent-subnormal/-/constants-float64-max-base2-exponent-subnormal-0.0.8.tgz", + "integrity": "sha512-YGBZykSiXFebznnJfWFDwhho2Q9xhUWOL+X0lZJ4ItfTTo40W6VHAyNYz98tT/gJECFype0seNzzo1nUxCE7jQ==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-min-base2-exponent-subnormal": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-min-base2-exponent-subnormal/-/constants-float64-min-base2-exponent-subnormal-0.0.8.tgz", + "integrity": "sha512-bt81nBus/91aEqGRQBenEFCyWNsf8uaxn4LN1NjgkvY92S1yVxXFlC65fJHsj9FTqvyZ+uj690/gdMKUDV3NjQ==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-ninf": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-ninf/-/constants-float64-ninf-0.0.8.tgz", + "integrity": "sha512-bn/uuzCne35OSLsQZJlNrkvU1/40spGTm22g1+ZI1LL19J8XJi/o4iupIHRXuLSTLFDBqMoJlUNphZlWQ4l8zw==", + "requires": { + "@stdlib/number-ctor": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-pinf": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-pinf/-/constants-float64-pinf-0.0.8.tgz", + "integrity": "sha512-I3R4rm2cemoMuiDph07eo5oWZ4ucUtpuK73qBJiJPDQKz8fSjSe4wJBAigq2AmWYdd7yJHsl5NJd8AgC6mP5Qw==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-float64-smallest-normal": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/constants-float64-smallest-normal/-/constants-float64-smallest-normal-0.0.8.tgz", + "integrity": "sha512-Qwxpn5NA3RXf+mQcffCWRcsHSPTUQkalsz0+JDpblDszuz2XROcXkOdDr5LKgTAUPIXsjOgZzTsuRONENhsSEg==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/constants-uint16-max": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/constants-uint16-max/-/constants-uint16-max-0.0.7.tgz", + "integrity": "sha512-7TPoku7SlskA67mAm7mykIAjeEnkQJemw1cnKZur0mT5W4ryvDR6iFfL9xBiByVnWYq/+ei7DHbOv6/2b2jizw==" + }, + "@stdlib/constants-uint32-max": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/constants-uint32-max/-/constants-uint32-max-0.0.7.tgz", + "integrity": "sha512-8+NK0ewqc1vnEZNqzwFJgFSy3S543Eft7i8WyW/ygkofiqEiLAsujvYMHzPAB8/3D+PYvjTSe37StSwRwvQ6uw==" + }, + "@stdlib/constants-uint8-max": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/constants-uint8-max/-/constants-uint8-max-0.0.7.tgz", + "integrity": "sha512-fqV+xds4jgwFxwWu08b8xDuIoW6/D4/1dtEjZ1sXVeWR7nf0pjj1cHERq4kdkYxsvOGu+rjoR3MbjzpFc4fvSw==" + }, + "@stdlib/fs-exists": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/fs-exists/-/fs-exists-0.0.8.tgz", + "integrity": "sha512-mZktcCxiLmycCJefm1+jbMTYkmhK6Jk1ShFmUVqJvs+Ps9/2EEQXfPbdEniLoVz4HeHLlcX90JWobUEghOOnAQ==", + "requires": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-cwd": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/fs-read-file": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/fs-read-file/-/fs-read-file-0.0.8.tgz", + "integrity": "sha512-pIZID/G91+q7ep4x9ECNC45+JT2j0+jdz/ZQVjCHiEwXCwshZPEvxcPQWb9bXo6coOY+zJyX5TwBIpXBxomWFg==", + "requires": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/fs-resolve-parent-path": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/fs-resolve-parent-path/-/fs-resolve-parent-path-0.0.8.tgz", + "integrity": "sha512-ok1bTWsAziChibQE3u7EoXwbCQUDkFjjRAHSxh7WWE5JEYVJQg1F0o3bbjRr4D/wfYYPWLAt8AFIKBUDmWghpg==", + "requires": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-plain-object": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-exists": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-cwd": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/math-base-assert-is-infinite": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-assert-is-infinite/-/math-base-assert-is-infinite-0.0.9.tgz", + "integrity": "sha512-JuPDdmxd+AtPWPHu9uaLvTsnEPaZODZk+zpagziNbDKy8DRiU1cy+t+QEjB5WizZt0A5MkuxDTjZ/8/sG5GaYQ==", + "requires": { + "@stdlib/constants-float64-ninf": "^0.0.x", + "@stdlib/constants-float64-pinf": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/math-base-assert-is-nan": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-assert-is-nan/-/math-base-assert-is-nan-0.0.8.tgz", + "integrity": "sha512-m+gCVBxLFW8ZdAfdkATetYMvM7sPFoMKboacHjb1pe21jHQqVb+/4bhRSDg6S7HGX7/8/bSzEUm9zuF7vqK5rQ==", + "requires": { + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/math-base-napi-binary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-napi-binary/-/math-base-napi-binary-0.0.8.tgz", + "integrity": "sha512-B8d0HBPhfXefbdl/h0h5c+lM2sE+/U7Fb7hY/huVeoQtBtEx0Jbx/qKvPSVxMjmWCKfWlbPpbgKpN5GbFgLiAg==", + "requires": { + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/complex-float64": "^0.0.x", + "@stdlib/complex-reim": "^0.0.x", + "@stdlib/complex-reimf": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/math-base-napi-unary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-napi-unary/-/math-base-napi-unary-0.0.8.tgz", + "integrity": "sha512-xKbGBxbgrEe7dxCDXJrooXPhXSDUl/QPqsN74Qa0+8Svsc4sbYVdU3yHSN5vDgrcWt3ZkH51j0vCSBIjvLL15g==", + "requires": { + "@stdlib/complex-float32": "^0.0.x", + "@stdlib/complex-float64": "^0.0.x", + "@stdlib/complex-reim": "^0.0.x", + "@stdlib/complex-reimf": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/math-base-special-abs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-special-abs/-/math-base-special-abs-0.0.6.tgz", + "integrity": "sha512-FaaMUnYs2qIVN3kI5m/qNlBhDnjszhDOzEhxGEoQWR/k0XnxbCsTyjNesR2DkpiKuoAXAr9ojoDe2qBYdirWoQ==", + "requires": { + "@stdlib/math-base-napi-unary": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/math-base-special-copysign": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-special-copysign/-/math-base-special-copysign-0.0.7.tgz", + "integrity": "sha512-7Br7oeuVJSBKG8BiSk/AIRFTBd2sbvHdV3HaqRj8tTZHX8BQomZ3Vj4Qsiz3kPyO4d6PpBLBTYlGTkSDlGOZJA==", + "requires": { + "@stdlib/constants-float64-high-word-abs-mask": "^0.0.x", + "@stdlib/constants-float64-high-word-sign-mask": "^0.0.x", + "@stdlib/math-base-napi-binary": "^0.0.x", + "@stdlib/number-float64-base-from-words": "^0.0.x", + "@stdlib/number-float64-base-get-high-word": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/math-base-special-ldexp": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@stdlib/math-base-special-ldexp/-/math-base-special-ldexp-0.0.5.tgz", + "integrity": "sha512-RLRsPpCdcJZMhwb4l4B/FsmGfEPEWAsik6KYUkUSSHb7ok/gZWt8LgVScxGMpJMpl5IV0v9qG4ZINVONKjX5KA==", + "requires": { + "@stdlib/constants-float64-exponent-bias": "^0.0.x", + "@stdlib/constants-float64-max-base2-exponent": "^0.0.x", + "@stdlib/constants-float64-max-base2-exponent-subnormal": "^0.0.x", + "@stdlib/constants-float64-min-base2-exponent-subnormal": "^0.0.x", + "@stdlib/constants-float64-ninf": "^0.0.x", + "@stdlib/constants-float64-pinf": "^0.0.x", + "@stdlib/math-base-assert-is-infinite": "^0.0.x", + "@stdlib/math-base-assert-is-nan": "^0.0.x", + "@stdlib/math-base-special-copysign": "^0.0.x", + "@stdlib/number-float64-base-exponent": "^0.0.x", + "@stdlib/number-float64-base-from-words": "^0.0.x", + "@stdlib/number-float64-base-normalize": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x" + } + }, + "@stdlib/number-ctor": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/number-ctor/-/number-ctor-0.0.7.tgz", + "integrity": "sha512-kXNwKIfnb10Ro3RTclhAYqbE3DtIXax+qpu0z1/tZpI2vkmTfYDQLno2QJrzJsZZgdeFtXIws+edONN9kM34ow==" + }, + "@stdlib/number-float64-base-exponent": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-exponent/-/number-float64-base-exponent-0.0.6.tgz", + "integrity": "sha512-wLXsG+cvynmapoffmj5hVNDH7BuHIGspBcTCdjPaD+tnqPDIm03qV5Z9YBhDh91BdOCuPZQ8Ovu2WBpX+ySeGg==", + "requires": { + "@stdlib/constants-float64-exponent-bias": "^0.0.x", + "@stdlib/constants-float64-high-word-exponent-mask": "^0.0.x", + "@stdlib/number-float64-base-get-high-word": "^0.0.x" + } + }, + "@stdlib/number-float64-base-from-words": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-from-words/-/number-float64-base-from-words-0.0.6.tgz", + "integrity": "sha512-r0elnekypCN831aw9Gp8+08br8HHAqvqtc5uXaxEh3QYIgBD/QM5qSb3b7WSAQ0ZxJJKdoykupODWWBkWQTijg==", + "requires": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/array-uint32": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/number-float64-base-get-high-word": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-get-high-word/-/number-float64-base-get-high-word-0.0.6.tgz", + "integrity": "sha512-jSFSYkgiG/IzDurbwrDKtWiaZeSEJK8iJIsNtbPG1vOIdQMRyw+t0bf3Kf3vuJu/+bnSTvYZLqpCO6wzT/ve9g==", + "requires": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/array-uint32": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/number-float64-base-to-words": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/number-float64-base-normalize": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-normalize/-/number-float64-base-normalize-0.0.9.tgz", + "integrity": "sha512-+rm7RQJEj8zHkqYFE2a6DgNQSB5oKE/IydHAajgZl40YB91BoYRYf/ozs5/tTwfy2Fc04+tIpSfFtzDr4ZY19Q==", + "requires": { + "@stdlib/constants-float64-smallest-normal": "^0.0.x", + "@stdlib/math-base-assert-is-infinite": "^0.0.x", + "@stdlib/math-base-assert-is-nan": "^0.0.x", + "@stdlib/math-base-special-abs": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/number-float64-base-to-float32": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-to-float32/-/number-float64-base-to-float32-0.0.7.tgz", + "integrity": "sha512-PNUSi6+cqfFiu4vgFljUKMFY2O9PxI6+T+vqtIoh8cflf+PjSGj3v4QIlstK9+6qU40eGR5SHZyLTWdzmNqLTQ==", + "requires": { + "@stdlib/array-float32": "^0.0.x" + } + }, + "@stdlib/number-float64-base-to-words": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/number-float64-base-to-words/-/number-float64-base-to-words-0.0.7.tgz", + "integrity": "sha512-7wsYuq+2MGp9rAkTnQ985rah7EJI9TfgHrYSSd4UIu4qIjoYmWIKEhIDgu7/69PfGrls18C3PxKg1pD/v7DQTg==", + "requires": { + "@stdlib/array-float64": "^0.0.x", + "@stdlib/array-uint32": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/os-byte-order": "^0.0.x", + "@stdlib/os-float-word-order": "^0.0.x", + "@stdlib/types": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/os-byte-order": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/os-byte-order/-/os-byte-order-0.0.7.tgz", + "integrity": "sha512-rRJWjFM9lOSBiIX4zcay7BZsqYBLoE32Oz/Qfim8cv1cN1viS5D4d3DskRJcffw7zXDnG3oZAOw5yZS0FnlyUg==", + "requires": { + "@stdlib/assert-is-big-endian": "^0.0.x", + "@stdlib/assert-is-little-endian": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/os-float-word-order": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/os-float-word-order/-/os-float-word-order-0.0.7.tgz", + "integrity": "sha512-gXIcIZf+ENKP7E41bKflfXmPi+AIfjXW/oU+m8NbP3DQasqHaZa0z5758qvnbO8L1lRJb/MzLOkIY8Bx/0cWEA==", + "requires": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/os-byte-order": "^0.0.x", + "@stdlib/utils-library-manifest": "^0.0.x" + } + }, + "@stdlib/process-cwd": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/process-cwd/-/process-cwd-0.0.8.tgz", + "integrity": "sha512-GHINpJgSlKEo9ODDWTHp0/Zc/9C/qL92h5Mc0QlIFBXAoUjy6xT4FB2U16wCNZMG3eVOzt5+SjmCwvGH0Wbg3Q==", + "requires": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x" + } + }, + "@stdlib/process-read-stdin": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/process-read-stdin/-/process-read-stdin-0.0.7.tgz", + "integrity": "sha512-nep9QZ5iDGrRtrZM2+pYAvyCiYG4HfO0/9+19BiLJepjgYq4GKeumPAQo22+1xawYDL7Zu62uWzYszaVZcXuyw==", + "requires": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/buffer-ctor": "^0.0.x", + "@stdlib/buffer-from-string": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/utils-next-tick": "^0.0.x" + } + }, + "@stdlib/regexp-eol": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-eol/-/regexp-eol-0.0.7.tgz", + "integrity": "sha512-BTMpRWrmlnf1XCdTxOrb8o6caO2lmu/c80XSyhYCi1DoizVIZnqxOaN5yUJNCr50g28vQ47PpsT3Yo7J3SdlRA==", + "requires": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-is-boolean": "^0.0.x", + "@stdlib/assert-is-plain-object": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/regexp-extended-length-path": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-extended-length-path/-/regexp-extended-length-path-0.0.7.tgz", + "integrity": "sha512-z6uqzMWq3WPDKbl4MIZJoNA5ZsYLQI9G3j2TIvhU8X2hnhlku8p4mvK9F+QmoVvgPxKliwNnx/DAl7ltutSDKw==", + "requires": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/regexp-function-name": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-function-name/-/regexp-function-name-0.0.7.tgz", + "integrity": "sha512-MaiyFUUqkAUpUoz/9F6AMBuMQQfA9ssQfK16PugehLQh4ZtOXV1LhdY8e5Md7SuYl9IrvFVg1gSAVDysrv5ZMg==", + "requires": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/regexp-regexp": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/regexp-regexp/-/regexp-regexp-0.0.8.tgz", + "integrity": "sha512-S5PZICPd/XRcn1dncVojxIDzJsHtEleuJHHD7ji3o981uPHR7zI2Iy9a1eV2u7+ABeUswbI1Yuix6fXJfcwV1w==", + "requires": { + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + } + }, + "@stdlib/streams-node-stdin": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/streams-node-stdin/-/streams-node-stdin-0.0.7.tgz", + "integrity": "sha512-gg4lgrjuoG3V/L29wNs32uADMCqepIcmoOFHJCTAhVe0GtHDLybUVnLljaPfdvmpPZmTvmusPQtIcscbyWvAyg==" + }, + "@stdlib/string-base-format-interpolate": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-interpolate/-/string-base-format-interpolate-0.0.4.tgz", + "integrity": "sha512-8FC8+/ey+P5hf1B50oXpXzRzoAgKI1rikpyKZ98Xmjd5rcbSq3NWYi8TqOF8mUHm9hVZ2CXWoNCtEe2wvMQPMg==" + }, + "@stdlib/string-base-format-tokenize": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-tokenize/-/string-base-format-tokenize-0.0.4.tgz", + "integrity": "sha512-+vMIkheqAhDeT/iF5hIQo95IMkt5IzC68eR3CxW1fhc48NMkKFE2UfN73ET8fmLuOanLo/5pO2E90c2G7PExow==" + }, + "@stdlib/string-format": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@stdlib/string-format/-/string-format-0.0.3.tgz", + "integrity": "sha512-1jiElUQXlI/tTkgRuzJi9jUz/EjrO9kzS8VWHD3g7gdc3ZpxlA5G9JrIiPXGw/qmZTi0H1pXl6KmX+xWQEQJAg==", + "requires": { + "@stdlib/string-base-format-interpolate": "^0.0.x", + "@stdlib/string-base-format-tokenize": "^0.0.x" + } + }, + "@stdlib/string-lowercase": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/string-lowercase/-/string-lowercase-0.0.9.tgz", + "integrity": "sha512-tXFFjbhIlDak4jbQyV1DhYiSTO8b1ozS2g/LELnsKUjIXECDKxGFyWYcz10KuyAWmFotHnCJdIm8/blm2CfDIA==", + "requires": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + } + }, + "@stdlib/string-replace": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@stdlib/string-replace/-/string-replace-0.0.11.tgz", + "integrity": "sha512-F0MY4f9mRE5MSKpAUfL4HLbJMCbG6iUTtHAWnNeAXIvUX1XYIw/eItkA58R9kNvnr1l5B08bavnjrgTJGIKFFQ==", + "requires": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/assert-is-regexp": "^0.0.x", + "@stdlib/assert-is-regexp-string": "^0.0.x", + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/regexp-eol": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/string-format": "^0.0.x", + "@stdlib/utils-escape-regexp-string": "^0.0.x", + "@stdlib/utils-regexp-from-string": "^0.0.x" + } + }, + "@stdlib/types": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@stdlib/types/-/types-0.0.14.tgz", + "integrity": "sha512-AP3EI9/il/xkwUazcoY+SbjtxHRrheXgSbWZdEGD+rWpEgj6n2i63hp6hTOpAB5NipE0tJwinQlDGOuQ1lCaCw==" + }, + "@stdlib/utils-constructor-name": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-constructor-name/-/utils-constructor-name-0.0.8.tgz", + "integrity": "sha512-GXpyNZwjN8u3tyYjL2GgGfrsxwvfogUC3gg7L7NRZ1i86B6xmgfnJUYHYOUnSfB+R531ET7NUZlK52GxL7P82Q==", + "requires": { + "@stdlib/assert-is-buffer": "^0.0.x", + "@stdlib/regexp-function-name": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/utils-convert-path": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-convert-path/-/utils-convert-path-0.0.8.tgz", + "integrity": "sha512-GNd8uIswrcJCctljMbmjtE4P4oOjhoUIfMvdkqfSrRLRY+ZqPB2xM+yI0MQFfUq/0Rnk/xtESlGSVLz9ZDtXfA==", + "requires": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-read-file": "^0.0.x", + "@stdlib/process-read-stdin": "^0.0.x", + "@stdlib/regexp-eol": "^0.0.x", + "@stdlib/regexp-extended-length-path": "^0.0.x", + "@stdlib/streams-node-stdin": "^0.0.x", + "@stdlib/string-lowercase": "^0.0.x", + "@stdlib/string-replace": "^0.0.x" + } + }, + "@stdlib/utils-define-nonenumerable-read-only-property": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/utils-define-nonenumerable-read-only-property/-/utils-define-nonenumerable-read-only-property-0.0.7.tgz", + "integrity": "sha512-c7dnHDYuS4Xn3XBRWIQBPcROTtP/4lkcFyq0FrQzjXUjimfMgHF7cuFIIob6qUTnU8SOzY9p0ydRR2QJreWE6g==", + "requires": { + "@stdlib/types": "^0.0.x", + "@stdlib/utils-define-property": "^0.0.x" + } + }, + "@stdlib/utils-define-property": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.0.9.tgz", + "integrity": "sha512-pIzVvHJvVfU/Lt45WwUAcodlvSPDDSD4pIPc9WmIYi4vnEBA9U7yHtiNz2aTvfGmBMTaLYTVVFIXwkFp+QotMA==", + "requires": { + "@stdlib/types": "^0.0.x" + } + }, + "@stdlib/utils-escape-regexp-string": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/utils-escape-regexp-string/-/utils-escape-regexp-string-0.0.9.tgz", + "integrity": "sha512-E+9+UDzf2mlMLgb+zYrrPy2FpzbXh189dzBJY6OG+XZqEJAXcjWs7DURO5oGffkG39EG5KXeaQwDXUavcMDCIw==", + "requires": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + } + }, + "@stdlib/utils-get-prototype-of": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/utils-get-prototype-of/-/utils-get-prototype-of-0.0.7.tgz", + "integrity": "sha512-fCUk9lrBO2ELrq+/OPJws1/hquI4FtwG0SzVRH6UJmJfwb1zoEFnjcwyDAy+HWNVmo3xeRLsrz6XjHrJwer9pg==", + "requires": { + "@stdlib/assert-is-function": "^0.0.x", + "@stdlib/utils-native-class": "^0.0.x" + } + }, + "@stdlib/utils-global": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@stdlib/utils-global/-/utils-global-0.0.7.tgz", + "integrity": "sha512-BBNYBdDUz1X8Lhfw9nnnXczMv9GztzGpQ88J/6hnY7PHJ71av5d41YlijWeM9dhvWjnH9I7HNE3LL7R07yw0kA==", + "requires": { + "@stdlib/assert-is-boolean": "^0.0.x" + } + }, + "@stdlib/utils-library-manifest": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-library-manifest/-/utils-library-manifest-0.0.8.tgz", + "integrity": "sha512-IOQSp8skSRQn9wOyMRUX9Hi0j/P5v5TvD8DJWTqtE8Lhr8kVVluMBjHfvheoeKHxfWAbNHSVpkpFY/Bdh/SHgQ==", + "requires": { + "@stdlib/cli-ctor": "^0.0.x", + "@stdlib/fs-resolve-parent-path": "^0.0.x", + "@stdlib/utils-convert-path": "^0.0.x", + "debug": "^2.6.9", + "resolve": "^1.1.7" + }, + "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==" + } + } + }, + "@stdlib/utils-native-class": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-native-class/-/utils-native-class-0.0.8.tgz", + "integrity": "sha512-0Zl9me2V9rSrBw/N8o8/9XjmPUy8zEeoMM0sJmH3N6C9StDsYTjXIAMPGzYhMEWaWHvGeYyNteFK2yDOVGtC3w==", + "requires": { + "@stdlib/assert-has-own-property": "^0.0.x", + "@stdlib/assert-has-tostringtag-support": "^0.0.x" + } + }, + "@stdlib/utils-next-tick": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-next-tick/-/utils-next-tick-0.0.8.tgz", + "integrity": "sha512-l+hPl7+CgLPxk/gcWOXRxX/lNyfqcFCqhzzV/ZMvFCYLY/wI9lcWO4xTQNMALY2rp+kiV+qiAiO9zcO+hewwUg==" + }, + "@stdlib/utils-noop": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@stdlib/utils-noop/-/utils-noop-0.0.13.tgz", + "integrity": "sha512-JRWHGWYWP5QK7SQ2cOYiL8NETw8P33LriZh1p9S2xC4e0rBoaY849h1A2IL2y1+x3s29KNjSaBWMrMUIV5HCSw==" + }, + "@stdlib/utils-regexp-from-string": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@stdlib/utils-regexp-from-string/-/utils-regexp-from-string-0.0.9.tgz", + "integrity": "sha512-3rN0Mcyiarl7V6dXRjFAUMacRwe0/sYX7ThKYurf0mZkMW9tjTP+ygak9xmL9AL0QQZtbrFFwWBrDO+38Vnavw==", + "requires": { + "@stdlib/assert-is-string": "^0.0.x", + "@stdlib/regexp-regexp": "^0.0.x", + "@stdlib/string-format": "^0.0.x" + } + }, + "@stdlib/utils-type-of": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-type-of/-/utils-type-of-0.0.8.tgz", + "integrity": "sha512-b4xqdy3AnnB7NdmBBpoiI67X4vIRxvirjg3a8BfhM5jPr2k0njby1jAbG9dUxJvgAV6o32S4kjUgfIdjEYpTNQ==", + "requires": { + "@stdlib/utils-constructor-name": "^0.0.x", + "@stdlib/utils-global": "^0.0.x" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@turf/area": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", + "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", + "requires": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + } + }, + "@turf/bbox": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", + "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", + "requires": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + } + }, + "@turf/boolean-clockwise": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz", + "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==", + "requires": { + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + } + }, + "@turf/centroid": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.5.0.tgz", + "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==", + "requires": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + } + }, + "@turf/helpers": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==" + }, + "@turf/invariant": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", + "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", + "requires": { + "@turf/helpers": "^6.5.0" + } + }, + "@turf/meta": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", + "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", + "requires": { + "@turf/helpers": "^6.5.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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "dev": true + }, + "@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", + "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@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==" + }, + "@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "@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==", + "dev": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/js-cookie": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", + "dev": true + }, + "@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, + "@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/lodash": { + "version": "4.14.190", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", + "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", + "dev": true + }, + "@types/lodash-es": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz", + "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" + }, + "@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "@types/plotly.js": { + "version": "2.12.9", + "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.12.9.tgz", + "integrity": "sha512-ML5pFv06KSozZqRO74Yt2XQg7A6Q2vtL3qGmO7nbKGpkk39vNdHYHD9w96Y4XK2TrhZKOxGirFjkou7IK5xdoA==", + "dev": true + }, + "@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==", + "dev": true + }, + "@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==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", + "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "@types/webpack": { + "version": "4.41.33", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", + "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "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==", + "dev": true + } + } + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "peer": true, + "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==", + "peer": true + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.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": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vitejs/plugin-vue": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz", + "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==", + "dev": true, + "requires": {} + }, + "@vitejs/plugin-vue-jsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-2.1.1.tgz", + "integrity": "sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-typescript": "^7.20.0", + "@vue/babel-plugin-jsx": "^1.1.1" + } + }, + "@vitest/ui": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.18.1.tgz", + "integrity": "sha512-JgYewAWfx9fN/cjOW6fPh63j9EDiHmDpVXzvp7UJeza+26QoYHXVsgjCmnzP/jjH3i/LkOXlJLqEJw/nJQ+IJg==", + "dev": true, + "requires": { + "sirv": "^2.0.2" + } + }, + "@volar/code-gen": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.9.tgz", + "integrity": "sha512-n6LClucfA+37rQeskvh9vDoZV1VvCVNy++MAPKj2dT4FT+Fbmty/SDQqnsEBtdEe6E3OQctFvA/IcKsx3Mns0A==", + "dev": true, + "requires": { + "@volar/source-map": "0.38.9" + } + }, + "@volar/source-map": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.9.tgz", + "integrity": "sha512-ba0UFoHDYry+vwKdgkWJ6xlQT+8TFtZg1zj9tSjj4PykW1JZDuM0xplMotLun4h3YOoYfY9K1huY5gvxmrNLIw==", + "dev": true + }, + "@volar/vue-code-gen": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.9.tgz", + "integrity": "sha512-tzj7AoarFBKl7e41MR006ncrEmNPHALuk8aG4WdDIaG387X5//5KhWC5Ff3ZfB2InGSeNT+CVUd74M0gS20rjA==", + "dev": true, + "requires": { + "@volar/code-gen": "0.38.9", + "@volar/source-map": "0.38.9", + "@vue/compiler-core": "^3.2.37", + "@vue/compiler-dom": "^3.2.37", + "@vue/shared": "^3.2.37" + } + }, + "@volar/vue-typescript": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.9.tgz", + "integrity": "sha512-iJMQGU91ADi98u8V1vXd2UBmELDAaeSP0ZJaFjwosClQdKlJQYc6MlxxKfXBZisHqfbhdtrGRyaryulnYtliZw==", + "dev": true, + "requires": { + "@volar/code-gen": "0.38.9", + "@volar/source-map": "0.38.9", + "@volar/vue-code-gen": "0.38.9", + "@vue/compiler-sfc": "^3.2.37", + "@vue/reactivity": "^3.2.37" + } + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/compiler-core": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz", + "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz", + "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==", + "requires": { + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz", + "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-ssr": "3.2.45", + "@vue/reactivity-transform": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz", + "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==", + "requires": { + "@vue/compiler-dom": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/devtools-api": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz", + "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==" + }, + "@vue/eslint-config-prettier": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", + "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", + "dev": true, + "requires": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + } + }, + "@vue/eslint-config-typescript": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.2.tgz", + "integrity": "sha512-EiKud1NqlWmSapBFkeSrE994qpKx7/27uCGnhdqzllYDpQZroyX/O6bwjEpeuyKamvLbsGdO6PMR2faIf+zFnw==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^9.0.0" + } + }, + "@vue/reactivity": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz", + "integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==", + "requires": { + "@vue/shared": "3.2.45" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz", + "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz", + "integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==", + "requires": { + "@vue/reactivity": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/runtime-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz", + "integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==", + "requires": { + "@vue/runtime-core": "3.2.45", + "@vue/shared": "3.2.45", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz", + "integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==", + "requires": { + "@vue/compiler-ssr": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/shared": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz", + "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==" + }, + "@vue/test-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.2.3.tgz", + "integrity": "sha512-MbqIS11cPEuZmqvyKNCnTdGxfNS4FhvQx7HO1JFQHlZRIM3ql2iwjPv9L1AFiLl4taW/5RTQz0r54d47xJuurA==", + "dev": true, + "requires": {} + }, + "@vue/tsconfig": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.1.3.tgz", + "integrity": "sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==", + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "peer": true, + "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==", + "peer": true + }, + "@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==", + "peer": true + }, + "@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==", + "peer": true + }, + "@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==", + "peer": true, + "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==", + "peer": true + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true + }, + "@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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xstate/vue": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@xstate/vue/-/vue-0.8.1.tgz", + "integrity": "sha512-m4Ejd08eUHzlTD7P6aGscwpjeHRXVZQ5iVyv5RxYi5WKoFqOMeurO2dxvI8QDfTxF27NqODj30LWYsMzZZ9lsg==", + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==" + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA==", + "peer": true + }, + "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": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "requires": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "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==", + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "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==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peer": true, + "requires": {} + }, + "almost-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-1.1.0.tgz", + "integrity": "sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==" + }, + "amazon-cognito-identity-js": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-5.2.12.tgz", + "integrity": "sha512-YfoH2xNgBOb9fC9wen3u4inMpb2YK+58s0uiTn+C9gdZ1GxdW83Fk+YSWUyp/duaStOU1cGFXXgTHt+5lOAXUg==", + "requires": { + "buffer": "4.9.2", + "crypto-js": "^4.1.1", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + } + } + }, + "anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "peer": true + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "peer": true, + "requires": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "peer": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "peer": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "peer": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "peer": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "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==", + "dev": true + }, + "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" + } + }, + "appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", + "peer": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "peer": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "peer": true + }, + "array-bounds": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz", + "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==" + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-normalize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz", + "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==", + "requires": { + "array-bounds": "^1.0.0" + } + }, + "array-range": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz", + "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==" + }, + "array-rearrange": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/array-rearrange/-/array-rearrange-2.2.2.tgz", + "integrity": "sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "peer": true + }, + "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==", + "dev": true, + "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" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "peer": true + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "peer": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "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==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "peer": true + }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==" + }, + "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==" + }, + "aws-amplify": { + "version": "4.3.43", + "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-4.3.43.tgz", + "integrity": "sha512-uUVAvbYerm4QNIVZyzFNK3dnAK3tf5RQEMszd83wJsTjD490cmCj97ELpRDzUIzh6XhZU6wrC9M1ZOszZR4xTQ==", + "requires": { + "@aws-amplify/analytics": "5.2.28", + "@aws-amplify/api": "4.0.61", + "@aws-amplify/auth": "4.6.14", + "@aws-amplify/cache": "4.0.63", + "@aws-amplify/core": "4.7.12", + "@aws-amplify/datastore": "3.14.4", + "@aws-amplify/geo": "1.3.24", + "@aws-amplify/interactions": "4.1.9", + "@aws-amplify/predictions": "4.0.61", + "@aws-amplify/pubsub": "4.5.11", + "@aws-amplify/storage": "4.5.14", + "@aws-amplify/ui": "2.0.7", + "@aws-amplify/xr": "3.0.61" + }, + "dependencies": { + "@aws-amplify/ui": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@aws-amplify/ui/-/ui-2.0.7.tgz", + "integrity": "sha512-tT7onRv+OCznFhUE2mKPpbGHHV+oODZk4VDX3lYNIfJ7LXv1hVtllQbPNJF5beNBRw9r6uotlXpeJrkph6v07A==" + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "peer": true + }, + "babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "peer": true, + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "peer": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "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==", + "dev": true + }, + "batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "binary-search-bounds": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", + "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==" + }, + "bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==" + }, + "bitmap-sdf": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", + "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==" + }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "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" + } + } + } + }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "dev": true, + "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==", + "dev": true + }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + }, + "dependencies": { + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + } + } + }, + "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==", + "peer": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "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==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "peer": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "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" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "peer": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "peer": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "peer": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "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-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + } + } + }, + "caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" + }, + "canvas-fit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/canvas-fit/-/canvas-fit-1.5.0.tgz", + "integrity": "sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==", + "requires": { + "element-size": "^1.1.1" + } + }, + "capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "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" + } + }, + "change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "requires": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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==", + "dev": true, + "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==", + "peer": true + }, + "ci-info": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "peer": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true + } + } + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "peer": true + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "peer": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "peer": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-alpha": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz", + "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==", + "requires": { + "color-parse": "^1.3.8" + } + }, + "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-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz", + "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==", + "requires": { + "clamp": "^1.0.1" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "color-normalize": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", + "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", + "requires": { + "clamp": "^1.0.1", + "color-rgba": "^2.1.1", + "dtype": "^2.0.0" + } + }, + "color-parse": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.3.8.tgz", + "integrity": "sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA==", + "requires": { + "color-name": "^1.0.0", + "defined": "^1.0.0", + "is-plain-obj": "^1.1.0" + } + }, + "color-rgba": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.1.1.tgz", + "integrity": "sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw==", + "requires": { + "clamp": "^1.0.1", + "color-parse": "^1.3.8", + "color-space": "^1.14.6" + } + }, + "color-space": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-1.16.0.tgz", + "integrity": "sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg==", + "requires": { + "hsluv": "^0.0.3", + "mumath": "^3.3.4" + } + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "peer": true + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "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==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "peer": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "peer": true + }, + "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==" + } + } + }, + "compute-dims": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/compute-dims/-/compute-dims-1.1.0.tgz", + "integrity": "sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg==", + "requires": { + "utils-copy": "^1.0.0", + "validate.io-array": "^1.0.6", + "validate.io-matrix-like": "^1.0.2", + "validate.io-ndarray-like": "^1.0.0", + "validate.io-positive-integer": "^1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "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" + } + } + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "peer": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "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==", + "peer": true + } + } + }, + "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==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "const-max-uint32": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/const-max-uint32/-/const-max-uint32-1.0.2.tgz", + "integrity": "sha512-T8/9bffg5RThuejasJWrwqxs3Q0fsJvyl7/33IB6svroD8JC93E7X60AuuOnDE8RlP6Jlb5FxmlrVDpl9KiU2Q==" + }, + "const-pinf-float64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz", + "integrity": "sha512-wfs+V4HdSN7C3CWJWR7hVa24yTPn3mDJthwhRIObZBh6UjTjkUMUrCP3UrNGozB/HjTpcScnGXtQUNa+yjsIJQ==" + }, + "constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "peer": true + }, + "core-js": { + "version": "3.27.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", + "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==" + }, + "core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "peer": true, + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "peer": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "peer": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "peer": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "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==", + "peer": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "peer": true + } + } + }, + "country-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", + "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==" + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "css-font": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz", + "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==", + "requires": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-global-keywords": "^1.0.1", + "css-system-font-keywords": "^1.0.0", + "pick-by-alias": "^1.2.0", + "string-split-by": "^1.0.0", + "unquote": "^1.1.0" + } + }, + "css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==" + }, + "css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==" + }, + "css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==" + }, + "css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" + }, + "css-global-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz", + "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==" + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==" + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "cypress": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz", + "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==", + "dev": true, + "requires": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.6", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "14.18.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", + "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cypress-localstorage-commands": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cypress-localstorage-commands/-/cypress-localstorage-commands-2.2.1.tgz", + "integrity": "sha512-m7IwoM+BMOJj7FzzN4It268c/i/Ur72CQX8JwLICkQ6ZgF1XNJOIKlQ7Rszg45ATLTjVTL1QElKCZECoU8cthQ==", + "dev": true, + "requires": {} + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + }, + "d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "requires": { + "d3-array": "1" + } + }, + "d3-geo-projection": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz", + "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==", + "requires": { + "commander": "2", + "d3-array": "1", + "d3-geo": "^1.12.0", + "resolve": "^1.1.10" + }, + "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==" + } + } + }, + "d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + } + }, + "dayjs": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", + "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==" + }, + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "decimal.js": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "peer": true + }, + "deep-eql": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "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": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", + "peer": true + }, + "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==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "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" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "peer": true, + "requires": { + "clone": "^1.0.2" + } + }, + "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==", + "dev": true + }, + "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" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "peer": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.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==", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", + "peer": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-kerning": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", + "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==" + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==" + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "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" + } + }, + "draw-svg-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/draw-svg-path/-/draw-svg-path-1.0.0.tgz", + "integrity": "sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==", + "requires": { + "abs-svg-path": "~0.1.1", + "normalize-svg-path": "~0.1.0" + } + }, + "dset": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==" + }, + "dtype": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", + "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==" + }, + "dup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz", + "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==" + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "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" + } + } + } + }, + "earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "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==" + }, + "element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "requires": { + "batch-processor": "1.0.0" + } + }, + "element-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/element-size/-/element-size-1.1.1.tgz", + "integrity": "sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==" + }, + "elementary-circuits-directed-graph": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz", + "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==", + "requires": { + "strongly-connected-components": "^1.0.1" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "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==", + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true + } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "peer": true + }, + "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" + } + }, + "errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "peer": true, + "requires": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + } + }, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "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", + "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.5", + "string.prototype.trimstart": "^1.0.5", + "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==", + "dev": true + }, + "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==", + "peer": true + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "esbuild": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.14.tgz", + "integrity": "sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==", + "requires": { + "@esbuild/android-arm": "0.15.14", + "@esbuild/linux-loong64": "0.15.14", + "esbuild-android-64": "0.15.14", + "esbuild-android-arm64": "0.15.14", + "esbuild-darwin-64": "0.15.14", + "esbuild-darwin-arm64": "0.15.14", + "esbuild-freebsd-64": "0.15.14", + "esbuild-freebsd-arm64": "0.15.14", + "esbuild-linux-32": "0.15.14", + "esbuild-linux-64": "0.15.14", + "esbuild-linux-arm": "0.15.14", + "esbuild-linux-arm64": "0.15.14", + "esbuild-linux-mips64le": "0.15.14", + "esbuild-linux-ppc64le": "0.15.14", + "esbuild-linux-riscv64": "0.15.14", + "esbuild-linux-s390x": "0.15.14", + "esbuild-netbsd-64": "0.15.14", + "esbuild-openbsd-64": "0.15.14", + "esbuild-sunos-64": "0.15.14", + "esbuild-windows-32": "0.15.14", + "esbuild-windows-64": "0.15.14", + "esbuild-windows-arm64": "0.15.14" + } + }, + "esbuild-android-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz", + "integrity": "sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz", + "integrity": "sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz", + "integrity": "sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz", + "integrity": "sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz", + "integrity": "sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz", + "integrity": "sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz", + "integrity": "sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz", + "integrity": "sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz", + "integrity": "sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz", + "integrity": "sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz", + "integrity": "sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz", + "integrity": "sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz", + "integrity": "sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz", + "integrity": "sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz", + "integrity": "sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz", + "integrity": "sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz", + "integrity": "sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz", + "integrity": "sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz", + "integrity": "sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz", + "integrity": "sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==", + "optional": true + }, + "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": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "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==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": 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==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@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.15.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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "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==", + "dev": true + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "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==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-plugin-cypress": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", + "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", + "dev": true, + "requires": { + "globals": "^11.12.0" + } + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-vue": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.7.0.tgz", + "integrity": "sha512-DrOO3WZCZEwcLsnd3ohFwqCoipGRSTKTBTnLwdhqAbYZtzWl0o7D+D8ZhlmiZvABKTEl8AFsqH1GHGdybyoQmw==", + "dev": true, + "requires": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "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" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "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==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "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==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "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==" + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "peer": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + } + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "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==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "peer": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "peer": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true + } + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + }, + "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-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-isnumeric": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz", + "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==", + "requires": { + "is-string-blank": "^1.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==" + }, + "fast-xml-parser": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "requires": { + "strnum": "^1.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "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==", + "dev": true, + "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==", + "peer": true, + "requires": { + "bser": "2.1.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fflate": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz", + "integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-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==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "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" + } + }, + "filter-obj": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", + "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==" + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "peer": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "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==", + "peer": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "peer": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "peer": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "peer": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "flatten-vertex-data": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", + "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", + "requires": { + "dtype": "^2.0.0" + } + }, + "flip-pixels": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flip-pixels/-/flip-pixels-1.0.2.tgz", + "integrity": "sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA==" + }, + "flow-parser": { + "version": "0.121.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", + "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==", + "peer": true + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "font-atlas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz", + "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==", + "requires": { + "css-font": "^1.0.0" + } + }, + "font-measure": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz", + "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==", + "requires": { + "css-font": "^1.2.0" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "peer": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "peer": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "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" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==" + }, + "geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, + "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-canvas-context": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", + "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, + "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-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "peer": true + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gl-mat4": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", + "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==" + }, + "gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "gl-text": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.3.1.tgz", + "integrity": "sha512-/f5gcEMiZd+UTBJLTl3D+CkCB/0UFGTx3nflH8ZmyWcLkZhsZ1+Xx5YYkw2rgWAzgPeE35xCqBuHSoMKQVsR+w==", + "requires": { + "bit-twiddle": "^1.0.2", + "color-normalize": "^1.5.0", + "css-font": "^1.2.0", + "detect-kerning": "^2.1.2", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "font-atlas": "^2.1.0", + "font-measure": "^1.2.2", + "gl-util": "^3.1.2", + "is-plain-obj": "^1.1.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "parse-unit": "^1.0.1", + "pick-by-alias": "^1.2.0", + "regl": "^2.0.0", + "to-px": "^1.0.1", + "typedarray-pool": "^1.1.0" + } + }, + "gl-util": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz", + "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==", + "requires": { + "is-browser": "^2.0.1", + "is-firefox": "^1.0.3", + "is-plain-obj": "^1.1.0", + "number-is-integer": "^1.0.1", + "object-assign": "^4.1.0", + "pick-by-alias": "^1.2.0", + "weak-map": "^1.0.5" + } + }, + "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==", + "dev": true, + "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==", + "peer": true + }, + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "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==", + "dev": true, + "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" + } + }, + "glsl-inject-defines": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", + "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", + "requires": { + "glsl-token-inject-block": "^1.0.0", + "glsl-token-string": "^1.0.1", + "glsl-tokenizer": "^2.0.2" + } + }, + "glsl-resolve": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", + "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", + "requires": { + "resolve": "^0.6.1", + "xtend": "^2.1.2" + }, + "dependencies": { + "resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==" + }, + "xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==" + } + } + }, + "glsl-token-assignments": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", + "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==" + }, + "glsl-token-defines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", + "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", + "requires": { + "glsl-tokenizer": "^2.0.0" + } + }, + "glsl-token-depth": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", + "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==" + }, + "glsl-token-descope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", + "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", + "requires": { + "glsl-token-assignments": "^2.0.0", + "glsl-token-depth": "^1.1.0", + "glsl-token-properties": "^1.0.0", + "glsl-token-scope": "^1.1.0" + } + }, + "glsl-token-inject-block": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", + "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==" + }, + "glsl-token-properties": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", + "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==" + }, + "glsl-token-scope": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", + "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==" + }, + "glsl-token-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", + "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==" + }, + "glsl-token-whitespace-trim": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", + "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==" + }, + "glsl-tokenizer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", + "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "requires": { + "through2": "^0.6.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "glslify": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", + "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", + "requires": { + "bl": "^2.2.1", + "concat-stream": "^1.5.2", + "duplexify": "^3.4.5", + "falafel": "^2.1.0", + "from2": "^2.3.0", + "glsl-resolve": "0.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glslify-bundle": "^5.0.0", + "glslify-deps": "^1.2.5", + "minimist": "^1.2.5", + "resolve": "^1.1.5", + "stack-trace": "0.0.9", + "static-eval": "^2.0.5", + "through2": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "glslify-bundle": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", + "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", + "requires": { + "glsl-inject-defines": "^1.0.1", + "glsl-token-defines": "^1.0.0", + "glsl-token-depth": "^1.1.1", + "glsl-token-descope": "^1.0.2", + "glsl-token-scope": "^1.1.1", + "glsl-token-string": "^1.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glsl-tokenizer": "^2.0.2", + "murmurhash-js": "^1.0.0", + "shallow-copy": "0.0.1" + } + }, + "glslify-deps": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", + "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", + "requires": { + "@choojs/findup": "^0.2.0", + "events": "^3.2.0", + "glsl-resolve": "0.0.1", + "glsl-tokenizer": "^2.0.0", + "graceful-fs": "^4.1.2", + "inherits": "^2.0.1", + "map-limit": "0.0.1", + "resolve": "^1.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==", + "dev": true + }, + "graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==" + }, + "grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "happy-dom": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-6.0.4.tgz", + "integrity": "sha512-b+ID23Ms0BY08UNLymsOMG7EI2jSlwEt4cbJs938GZfeNAg+fqgkSO3TokQMgSOFoHznpjWmpVjBUL5boJ9PWw==", + "dev": true, + "requires": { + "css.escape": "^1.5.1", + "he": "^1.2.0", + "node-fetch": "^2.x.x", + "sync-request": "^6.1.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-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==", + "dev": true + }, + "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-hover": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz", + "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==", + "requires": { + "is-browser": "^2.0.1" + } + }, + "has-passive-events": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", + "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", + "requires": { + "is-browser": "^2.0.1" + } + }, + "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" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "peer": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "peer": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "requires": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "hermes-estree": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", + "integrity": "sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q==", + "peer": true + }, + "hermes-parser": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.8.0.tgz", + "integrity": "sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA==", + "peer": true, + "requires": { + "hermes-estree": "0.8.0" + } + }, + "hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "peer": true, + "requires": { + "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==", + "peer": true + } + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "hsluv": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/hsluv/-/hsluv-0.0.3.tgz", + "integrity": "sha512-08iL2VyCRbkQKBySkSh6m8zMUa3sADAxGVWs3Z1aPcUkTJeK0ETG4Fc27tEmQBGUAXZjIsXOZqBvacuVNSC/fQ==" + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "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==", + "dev": true + } + } + } + } + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + }, + "html-webpack-plugin-4": { + "version": "npm:html-webpack-plugin@4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + } + }, + "html-webpack-plugin-5": { + "version": "npm:html-webpack-plugin@5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "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" + }, + "dependencies": { + "@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==", + "dev": true + }, + "clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "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==", + "dev": true, + "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" + } + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "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" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "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==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "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==", + "dev": true, + "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" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "requires": { + "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + } + } + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + }, + "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==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "idb": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/idb/-/idb-5.0.6.tgz", + "integrity": "sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "image-palette": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/image-palette/-/image-palette-2.1.0.tgz", + "integrity": "sha512-3ImSEWD26+xuQFdP0RWR4WSXadZwvgrFhjGNpMEapTG1tf2XrBFS2dlKK5hNgH4UIaSQlSUFRn1NeA+zULIWbQ==", + "requires": { + "color-id": "^1.1.0", + "pxls": "^2.0.0", + "quantize": "^1.0.2" + } + }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", + "peer": true + }, + "immer": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", + "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==" + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "peer": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "peer": true + }, + "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==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "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==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-base64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", + "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "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==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-blob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", + "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==" + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", + "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==" + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "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-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "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-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "peer": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "peer": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + }, + "is-firefox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz", + "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==" + }, + "is-float-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-float-array/-/is-float-array-1.0.0.tgz", + "integrity": "sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ==" + }, + "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-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-iexplorer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-iexplorer/-/is-iexplorer-1.0.0.tgz", + "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==" + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "peer": true + }, + "is-mobile": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-2.2.2.tgz", + "integrity": "sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg==" + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "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==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-string-blank": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", + "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==" + }, + "is-svg-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz", + "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==" + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "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==", + "requires": { + "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-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "peer": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "peer": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "requires": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "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==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "peer": true + }, + "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==", + "peer": true + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "peer": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "peer": true, + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", + "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==" + }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsc-android": { + "version": "250230.2.1", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", + "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==", + "peer": true + }, + "jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "peer": true, + "requires": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.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==", + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "peer": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "peer": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "requires": { + "is-extendable": "^0.1.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==", + "peer": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "peer": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "peer": true, + "requires": { + "rimraf": "~2.6.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "peer": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "jsdom": { + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.2.tgz", + "integrity": "sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "acorn": "^8.8.0", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.9.0", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "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==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "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==", + "peer": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "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" + } + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, + "kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, + "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==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "peer": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true + }, + "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==", + "peer": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "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==", + "peer": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true + }, + "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-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "peer": true + }, + "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.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "peer": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.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==" + }, + "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" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.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==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "peer": true, + "requires": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.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==", + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "peer": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "peer": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "peer": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "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==", + "peer": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "requires": { + "get-func-name": "^2.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": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.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==", + "dev": true, + "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==", + "peer": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "peer": true + }, + "map-limit": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", + "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", + "requires": { + "once": "~1.3.0" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "requires": { + "wrappy": "1" + } + } + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "peer": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "mapbox-gl": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.10.1.tgz", + "integrity": "sha512-0aHt+lFUpYfvh0kMIqXqNXqoYMuhuAsMlw87TbhWrw78Tx2zfuPI0Lx31/YPUgJ+Ire0tzQ4JnuBL7acDNXmMg==", + "requires": { + "@mapbox/geojson-rewind": "^0.5.0", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "minimist": "^1.2.5", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.0.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + } + }, + "math-log2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", + "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "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==", + "dev": true + }, + "memfs": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "peer": true + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "metro": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.72.3.tgz", + "integrity": "sha512-Hb3xTvPqex8kJ1hutQNZhQadUKUwmns/Du9GikmWKBFrkiG3k3xstGAyO5t5rN9JSUEzQT6y9SWzSSOGogUKIg==", + "peer": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "accepts": "^1.3.7", + "async": "^3.2.2", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.8.0", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-worker": "^27.2.0", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.72.3", + "metro-cache": "0.72.3", + "metro-cache-key": "0.72.3", + "metro-config": "0.72.3", + "metro-core": "0.72.3", + "metro-file-map": "0.72.3", + "metro-hermes-compiler": "0.72.3", + "metro-inspector-proxy": "0.72.3", + "metro-minify-uglify": "0.72.3", + "metro-react-native-babel-preset": "0.72.3", + "metro-resolver": "0.72.3", + "metro-runtime": "0.72.3", + "metro-source-map": "0.72.3", + "metro-symbolicate": "0.72.3", + "metro-transform-plugins": "0.72.3", + "metro-transform-worker": "0.72.3", + "mime-types": "^2.1.27", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "temp": "0.8.3", + "throat": "^5.0.0", + "ws": "^7.5.1", + "yargs": "^15.3.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==", + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "peer": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.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==", + "peer": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "peer": true, + "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==", + "peer": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "requires": {} + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "peer": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "peer": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "peer": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "metro-babel-transformer": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.3.tgz", + "integrity": "sha512-PTOR2zww0vJbWeeM3qN90WKENxCLzv9xrwWaNtwVlhcV8/diNdNe82sE1xIxLFI6OQuAVwNMv1Y7VsO2I7Ejrw==", + "peer": true, + "requires": { + "@babel/core": "^7.14.0", + "hermes-parser": "0.8.0", + "metro-source-map": "0.72.3", + "nullthrows": "^1.1.1" + } + }, + "metro-cache": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.72.3.tgz", + "integrity": "sha512-++eyZzwkXvijWRV3CkDbueaXXGlVzH9GA52QWqTgAOgSHYp5jWaDwLQ8qpsMkQzpwSyIF4LLK9aI3eA7Xa132A==", + "peer": true, + "requires": { + "metro-core": "0.72.3", + "rimraf": "^2.5.4" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "metro-cache-key": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.72.3.tgz", + "integrity": "sha512-kQzmF5s3qMlzqkQcDwDxrOaVxJ2Bh6WRXWdzPnnhsq9LcD3B3cYqQbRBS+3tSuXmathb4gsOdhWslOuIsYS8Rg==", + "peer": true + }, + "metro-config": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.72.3.tgz", + "integrity": "sha512-VEsAIVDkrIhgCByq8HKTWMBjJG6RlYwWSu1Gnv3PpHa0IyTjKJtB7wC02rbTjSaemcr82scldf2R+h6ygMEvsw==", + "peer": true, + "requires": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^26.5.2", + "metro": "0.72.3", + "metro-cache": "0.72.3", + "metro-core": "0.72.3", + "metro-runtime": "0.72.3" + } + }, + "metro-core": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.72.3.tgz", + "integrity": "sha512-KuYWBMmLB4+LxSMcZ1dmWabVExNCjZe3KysgoECAIV+wyIc2r4xANq15GhS94xYvX1+RqZrxU1pa0jQ5OK+/6A==", + "peer": true, + "requires": { + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.72.3" + } + }, + "metro-file-map": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.72.3.tgz", + "integrity": "sha512-LhuRnuZ2i2uxkpFsz1XCDIQSixxBkBG7oICAFyLyEMDGbcfeY6/NexphfLdJLTghkaoJR5ARFMiIxUg9fIY/pA==", + "peer": true, + "requires": { + "abort-controller": "^3.0.0", + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "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==", + "peer": true + } + } + }, + "metro-hermes-compiler": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.72.3.tgz", + "integrity": "sha512-QWDQASMiXNW3j8uIQbzIzCdGYv5PpAX/ZiF4/lTWqKRWuhlkP4auhVY4eqdAKj5syPx45ggpjkVE0p8hAPDZYg==", + "peer": true + }, + "metro-inspector-proxy": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.72.3.tgz", + "integrity": "sha512-UPFkaq2k93RaOi+eqqt7UUmqy2ywCkuxJLasQ55+xavTUS+TQSyeTnTczaYn+YKw+izLTLllGcvqnQcZiWYhGw==", + "peer": true, + "requires": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "ws": "^7.5.1", + "yargs": "^15.3.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==", + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "peer": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "peer": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "peer": true, + "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==", + "peer": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "requires": {} + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "peer": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "peer": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "peer": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "metro-minify-uglify": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.72.3.tgz", + "integrity": "sha512-dPXqtMI8TQcj0g7ZrdhC8X3mx3m3rtjtMuHKGIiEXH9CMBvrET8IwrgujQw2rkPcXiSiX8vFDbGMIlfxefDsKA==", + "peer": true, + "requires": { + "uglify-es": "^3.1.9" + } + }, + "metro-react-native-babel-preset": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz", + "integrity": "sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==", + "peer": true, + "requires": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-react-native-babel-transformer": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.3.tgz", + "integrity": "sha512-Ogst/M6ujYrl/+9mpEWqE3zF7l2mTuftDTy3L8wZYwX1pWUQWQpfU1aJBeWiLxt1XlIq+uriRjKzKoRoIK57EA==", + "peer": true, + "requires": { + "@babel/core": "^7.14.0", + "babel-preset-fbjs": "^3.4.0", + "hermes-parser": "0.8.0", + "metro-babel-transformer": "0.72.3", + "metro-react-native-babel-preset": "0.72.3", + "metro-source-map": "0.72.3", + "nullthrows": "^1.1.1" + } + }, + "metro-resolver": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.72.3.tgz", + "integrity": "sha512-wu9zSMGdxpKmfECE7FtCdpfC+vrWGTdVr57lDA0piKhZV6VN6acZIvqQ1yZKtS2WfKsngncv5VbB8Y5eHRQP3w==", + "peer": true, + "requires": { + "absolute-path": "^0.0.0" + } + }, + "metro-runtime": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.3.tgz", + "integrity": "sha512-3MhvDKfxMg2u7dmTdpFOfdR71NgNNo4tzAyJumDVQKwnHYHN44f2QFZQqpPBEmqhWlojNeOxsqFsjYgeyMx6VA==", + "peer": true, + "requires": { + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-source-map": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.3.tgz", + "integrity": "sha512-eNtpjbjxSheXu/jYCIDrbNEKzMGOvYW6/ePYpRM7gDdEagUOqKOCsi3St8NJIQJzZCsxD2JZ2pYOiomUSkT1yQ==", + "peer": true, + "requires": { + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.72.3", + "nullthrows": "^1.1.1", + "ob1": "0.72.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true + } + } + }, + "metro-symbolicate": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.3.tgz", + "integrity": "sha512-eXG0NX2PJzJ/jTG4q5yyYeN2dr1cUqUaY7worBB0SP5bRWRc3besfb+rXwfh49wTFiL5qR0oOawkU4ZiD4eHXw==", + "peer": true, + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.72.3", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true + } + } + }, + "metro-transform-plugins": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.72.3.tgz", + "integrity": "sha512-D+TcUvCKZbRua1+qujE0wV1onZvslW6cVTs7dLCyC2pv20lNHjFr1GtW01jN2fyKR2PcRyMjDCppFd9VwDKnSg==", + "peer": true, + "requires": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.14.0", + "nullthrows": "^1.1.1" + } + }, + "metro-transform-worker": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.72.3.tgz", + "integrity": "sha512-WsuWj9H7i6cHuJuy+BgbWht9DK5FOgJxHLGAyULD5FJdTG9rSMFaHDO5WfC0OwQU5h4w6cPT40iDuEGksM7+YQ==", + "peer": true, + "requires": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.4.0", + "metro": "0.72.3", + "metro-babel-transformer": "0.72.3", + "metro-cache": "0.72.3", + "metro-cache-key": "0.72.3", + "metro-hermes-compiler": "0.72.3", + "metro-source-map": "0.72.3", + "metro-transform-plugins": "0.72.3", + "nullthrows": "^1.1.1" + } + }, + "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" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "peer": true + }, + "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==" + }, + "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==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "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==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "peer": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "peer": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "monaco-editor": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.34.1.tgz", + "integrity": "sha512-FKc80TyiMaruhJKKPz5SpJPIjL+dflGvz4CpuThaPMc94AyN7SeC9HQ8hrvaxX7EyHdJcUY5i4D0gNyJj1vSZQ==", + "dev": true, + "peer": true + }, + "monaco-editor-vue": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/monaco-editor-vue/-/monaco-editor-vue-1.0.10.tgz", + "integrity": "sha512-FO6rioCXkonKmDZYB2WDhDNekXuNJgjxoAPfzwYX+5NTMaxRJcWl3bcUByRpL6LQQ1bTEYLZ+ZdDpoJ+la2trQ==", + "requires": { + "monaco-editor": "^0.19.3", + "vue": "^2.6.11" + }, + "dependencies": { + "@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "requires": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "monaco-editor": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.19.3.tgz", + "integrity": "sha512-2n1vJBVQF2Hhi7+r1mMeYsmlf18hjVb6E0v5SoMZyb4aeOmYPKun+CE3gYpiNA1KEvtSdaDHFBqH9d7Wd9vREg==" + }, + "vue": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "requires": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + } + } + }, + "mouse-change": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz", + "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==", + "requires": { + "mouse-event": "^1.0.0" + } + }, + "mouse-event": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz", + "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==" + }, + "mouse-event-offset": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", + "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==" + }, + "mouse-wheel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz", + "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==", + "requires": { + "right-now": "^1.0.0", + "signum": "^1.0.0", + "to-px": "^1.0.1" + } + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mumath": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/mumath/-/mumath-3.3.4.tgz", + "integrity": "sha512-VAFIOG6rsxoc7q/IaY3jdjmrsuX9f15KlRLYTHmixASBZkZEKC1IFqE2BC5CdhXmK6WLM1Re33z//AGmeRI6FA==", + "requires": { + "almost-equal": "^1.1.0" + } + }, + "murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "peer": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "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==", + "dev": true + }, + "needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "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" + } + }, + "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" + } + } + } + }, + "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==" + }, + "new-date": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/new-date/-/new-date-1.0.3.tgz", + "integrity": "sha512-0fsVvQPbo2I18DT2zVHpezmeeNYV2JaJSrseiHLc17GNOxJzUdx5mvSigPu8LtIfZSij5i1wXnXFspEs2CD6hA==", + "requires": { + "@segment/isodate": "1.0.3" + } + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "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" + } + }, + "nocache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", + "peer": true + }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "peer": true, + "requires": { + "minimatch": "^3.0.2" + } + }, + "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" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "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==" + }, + "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" + } + } + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "peer": true + }, + "node-polyfill-webpack-plugin": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-2.0.1.tgz", + "integrity": "sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==", + "requires": { + "assert": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^4.22.0", + "events": "^3.3.0", + "filter-obj": "^2.0.2", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^4.0.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tty-browserify": "^0.0.1", + "type-fest": "^2.14.0", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.1.2" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + } + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node-sql-parser": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.6.4.tgz", + "integrity": "sha512-OPzbsiN5VX37/HM5BgGxcoDt1ggvFUc6gdzyQzoPjk8orTOHBlgHuDUugP5oRU+CcOw8GniilvV3pt5FBxp47A==", + "requires": { + "big-integer": "^1.6.48" + } + }, + "node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "peer": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-svg-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz", + "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==" + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "peer": true + }, + "number-is-integer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz", + "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==", + "requires": { + "is-finite": "^1.0.1" + } + }, + "nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "dev": true + }, + "ob1": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.3.tgz", + "integrity": "sha512-OnVto25Sj7Ghp0vVm2THsngdze3tVq0LOg9LUHsAVXMecpqOP0Y8zaATW8M9gEgs2lNEAcCqV0P/hlmOPhVRvg==", + "peer": true + }, + "obj-case": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/obj-case/-/obj-case-0.2.1.tgz", + "integrity": "sha512-PquYBBTy+Y6Ob/O2574XHhDtHJlV1cJHMCgW+rDRc9J5hhmRelJB3k5dTK/3cVmFVtzvAKuENeuLpoyTzMzkOg==" + }, + "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-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "peer": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "peer": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "dev": true, + "requires": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "peer": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "peer": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "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": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "peer": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "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" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "peer": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "peer": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "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==", + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "peer": true + }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "peer": true + }, + "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-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "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==" + }, + "paho-mqtt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/paho-mqtt/-/paho-mqtt-1.1.0.tgz", + "integrity": "sha512-KPbL9KAB0ASvhSDbOrZBaccXS+/s7/LIofbPyERww8hM5Ko71GUJQ6Nmg0BWqj8phAIT8zdf/Sd/RftHU9i2HA==" + }, + "pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "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==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parenthesis": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", + "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==" + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", + "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==", + "requires": { + "pick-by-alias": "^1.2.0" + } + }, + "parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==" + }, + "parse-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", + "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==" + }, + "parse5": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + }, + "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" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "peer": true + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "requires": { + "dot-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==", + "dev": true + }, + "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==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "pick-by-alias": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", + "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==" + }, + "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==" + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "peer": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "peer": true, + "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==", + "peer": true + } + } + }, + "plotly.js": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.16.3.tgz", + "integrity": "sha512-l/2vpjJxiaNOdsnRx/sK8W2b+25JP4XFrkT5Lo4i5b5WNxrsqK7QdProvfflufZkHmByuFe6YnrOv9JNSiE6ZA==", + "requires": { + "@plotly/d3": "3.8.0", + "@plotly/d3-sankey": "0.7.2", + "@plotly/d3-sankey-circular": "0.33.1", + "@turf/area": "^6.4.0", + "@turf/bbox": "^6.4.0", + "@turf/centroid": "^6.0.2", + "canvas-fit": "^1.5.0", + "color-alpha": "1.0.4", + "color-normalize": "1.5.0", + "color-parse": "1.3.8", + "color-rgba": "2.1.1", + "country-regex": "^1.1.0", + "d3-force": "^1.2.1", + "d3-format": "^1.4.5", + "d3-geo": "^1.12.1", + "d3-geo-projection": "^2.9.0", + "d3-hierarchy": "^1.1.9", + "d3-interpolate": "^1.4.0", + "d3-time": "^1.1.0", + "d3-time-format": "^2.2.3", + "fast-isnumeric": "^1.1.4", + "gl-mat4": "^1.2.0", + "gl-text": "^1.3.1", + "glslify": "^7.1.1", + "has-hover": "^1.0.1", + "has-passive-events": "^1.0.0", + "is-mobile": "^2.2.2", + "mapbox-gl": "1.10.1", + "mouse-change": "^1.4.0", + "mouse-event-offset": "^3.0.2", + "mouse-wheel": "^1.2.0", + "native-promise-only": "^0.8.1", + "parse-svg-path": "^0.1.2", + "point-in-polygon": "^1.1.0", + "polybooljs": "^1.2.0", + "probe-image-size": "^7.2.3", + "regl": "npm:@plotly/regl@^2.1.2", + "regl-error2d": "^2.0.12", + "regl-line2d": "^3.1.2", + "regl-scatter2d": "^3.2.8", + "regl-splom": "^1.0.14", + "strongly-connected-components": "^1.0.1", + "superscript-text": "^1.0.0", + "svg-path-sdf": "^1.1.3", + "tinycolor2": "^1.4.2", + "to-px": "1.0.1", + "topojson-client": "^3.1.0", + "webgl-context": "^2.2.0", + "world-calendars": "^1.0.3" + } + }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + }, + "point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" + }, + "polybooljs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.0.tgz", + "integrity": "sha512-mKjR5nolISvF+q2BtC1fi/llpxBPTQ3wLWN8+ldzdw2Hocpc8C72ZqnamCM4Z6z+68GVVjkeM01WJegQmZ8MEQ==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "peer": true + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "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==", + "dev": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "peer": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "peer": true, + "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==", + "peer": true, + "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==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "probe-image-size": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", + "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", + "requires": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "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==", + "peer": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "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==", + "dev": true, + "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==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pxls": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/pxls/-/pxls-2.3.2.tgz", + "integrity": "sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw==", + "requires": { + "arr-flatten": "^1.1.0", + "compute-dims": "^1.1.0", + "flip-pixels": "^1.0.2", + "is-browser": "^2.1.0", + "is-buffer": "^2.0.3", + "to-uint8": "^1.4.1" + } + }, + "qrcode": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==", + "requires": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.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" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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==" + }, + "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" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "quantize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quantize/-/quantize-1.0.2.tgz", + "integrity": "sha512-25P7wI2UoDbIQsQp50ARkt+5pwPsOq7G/BqvT5xAbapnRoNWMN8/p55H9TXd5MuENiJnm5XICB2H2aDZGwts7w==" + }, + "quasar": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.10.2.tgz", + "integrity": "sha512-y6suu0f2hJKrnFPHzx+p2EBVGzDF6xHaqYGkDIsMNkhxsrO9Qi2+dZCjq1J6+48EJiqPEOn8t9X/gT7yLSSnLw==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "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" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "react": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", + "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", + "peer": true, + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-devtools-core": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.0.tgz", + "integrity": "sha512-Rw7FzYOOzcfyUPaAm9P3g0tFdGqGq2LLiAI+wjYcp6CsF3DeeMrRS3HZAho4s273C29G/DJhx0e8BpRE/QZNGg==", + "peer": true, + "requires": { + "shell-quote": "^1.6.1", + "ws": "^7" + }, + "dependencies": { + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "peer": true, + "requires": {} + } + } + }, + "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==", + "peer": true + }, + "react-native": { + "version": "0.70.6", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.70.6.tgz", + "integrity": "sha512-xtQdImPHnwgraEx3HIZFOF+D1hJ9bC5mfpIdUGoMHRws6OmvHAjmFpO6qfdnaQ29vwbmZRq7yf14sbury74R/w==", + "peer": true, + "requires": { + "@jest/create-cache-key-function": "^27.0.1", + "@react-native-community/cli": "9.3.2", + "@react-native-community/cli-platform-android": "9.3.1", + "@react-native-community/cli-platform-ios": "9.3.0", + "@react-native/assets": "1.0.0", + "@react-native/normalize-color": "2.0.0", + "@react-native/polyfills": "2.0.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "invariant": "^2.2.4", + "jsc-android": "^250230.2.1", + "memoize-one": "^5.0.0", + "metro-react-native-babel-transformer": "0.72.3", + "metro-runtime": "0.72.3", + "metro-source-map": "0.72.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "4.24.0", + "react-native-codegen": "^0.70.6", + "react-native-gradle-plugin": "^0.70.3", + "react-refresh": "^0.4.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "^0.22.0", + "stacktrace-parser": "^0.1.3", + "use-sync-external-store": "^1.0.0", + "whatwg-fetch": "^3.0.0", + "ws": "^6.1.4" + }, + "dependencies": { + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "peer": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "react-native-codegen": { + "version": "0.70.6", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.70.6.tgz", + "integrity": "sha512-kdwIhH2hi+cFnG5Nb8Ji2JwmcCxnaOOo9440ov7XDzSvGfmUStnCzl+MCW8jLjqHcE4icT7N9y+xx4f50vfBTw==", + "peer": true, + "requires": { + "@babel/parser": "^7.14.0", + "flow-parser": "^0.121.0", + "jscodeshift": "^0.13.1", + "nullthrows": "^1.1.1" + } + }, + "react-native-get-random-values": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.8.0.tgz", + "integrity": "sha512-H/zghhun0T+UIJLmig3+ZuBCvF66rdbiWUfRSNS6kv5oDSpa1ZiVyvRWtuPesQpT8dXj+Bv7WJRQOUP+5TB1sA==", + "requires": { + "fast-base64-decode": "^1.0.0" + } + }, + "react-native-gradle-plugin": { + "version": "0.70.3", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", + "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==", + "peer": true + }, + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "peer": true + }, + "react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "peer": true, + "requires": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", + "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "peer": true + }, + "recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "peer": true, + "requires": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "peer": true + }, + "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==", + "peer": true, + "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==", + "peer": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "peer": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "peer": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regex-regex/-/regex-regex-1.0.0.tgz", + "integrity": "sha512-FPbEhFTLpxKNgHKay3zMfkHzFK2ebViAlyvsz5euO4kwekH0T6fAL4Sdo2CgQ7Y1tGB5HqQm8SBq7pW5GegvVA==" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "peer": true, + "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==", + "peer": true + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "peer": true, + "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==", + "peer": true + } + } + }, + "regl": { + "version": "npm:@plotly/regl@2.1.2", + "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz", + "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==" + }, + "regl-error2d": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz", + "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==", + "requires": { + "array-bounds": "^1.0.1", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "regl-line2d": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.2.tgz", + "integrity": "sha512-nmT7WWS/WxmXAQMkgaMKWXaVmwJ65KCrjbqHGOUjjqQi6shfT96YbBOvelXwO9hG7/hjvbzjtQ2UO0L3e7YaXQ==", + "requires": { + "array-bounds": "^1.0.1", + "array-find-index": "^1.0.2", + "array-normalize": "^1.1.4", + "color-normalize": "^1.5.0", + "earcut": "^2.1.5", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0" + } + }, + "regl-scatter2d": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.2.8.tgz", + "integrity": "sha512-bqrqJyeHkGBa9mEfuBnRd7FUtdtZ1l+gsM2C5Ugr1U3vJG5K3mdWdVWtOAllZ5FHHyWJV/vgjVvftgFUg6CDig==", + "requires": { + "@plotly/point-cluster": "^3.1.9", + "array-range": "^1.0.1", + "array-rearrange": "^2.2.2", + "clamp": "^1.0.1", + "color-id": "^1.1.0", + "color-normalize": "^1.5.0", + "color-rgba": "^2.1.1", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "image-palette": "^2.1.0", + "is-iexplorer": "^1.0.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "regl-splom": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz", + "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==", + "requires": { + "array-bounds": "^1.0.1", + "array-range": "^1.0.1", + "color-alpha": "^1.0.4", + "flatten-vertex-data": "^1.0.2", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "raf": "^3.4.1", + "regl-scatter2d": "^3.2.3" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "peer": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "peer": true + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "peer": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "peer": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "right-now": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", + "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "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-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "requires": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } + } + }, + "rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "requires": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "rollup-plugin-polyfill-node": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.2.tgz", + "integrity": "sha512-5GMywXiLiuQP6ZzED/LO/Q0HyDi2W6b8VN+Zd3oB0opIjyRs494Me2ZMaqKWDNbGiW4jvvzl6L2n4zRgxS9cSQ==", + "requires": { + "@rollup/plugin-inject": "^4.0.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } + } + }, + "rudder-sdk-js": { + "version": "2.22.3", + "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.22.3.tgz", + "integrity": "sha512-yCosdPm4Ozr9kuv0G7owcALSyu9nFSWb2ZCh/TPGwOYL57PoixiAAym37k1N8jsq26H4IRHkJ+AGAW4y/TpQLw==" + }, + "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==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "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": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "peer": true, + "requires": { + "ret": "~0.1.10" + } + }, + "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==", + "dev": true, + "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==" + }, + "sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", + "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "dev": true, + "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": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scheduler": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", + "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", + "peer": true, + "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==", + "peer": true, + "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==", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "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==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "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" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "peer": true + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.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" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "peer": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "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==", + "dev": true, + "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==" + }, + "signum": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signum/-/signum-1.0.0.tgz", + "integrity": "sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==" + }, + "sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "peer": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "peer": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "peer": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "peer": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "peer": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "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-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "peer": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.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" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "peer": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.4.2.tgz", + "integrity": "sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==", + "dev": true, + "requires": { + "chalk": "^4.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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "peer": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "peer": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==" + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "peer": true, + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "peer": true + } + } + }, + "start-server-and-test": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.14.0.tgz", + "integrity": "sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==", + "dev": true, + "requires": { + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.2", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "6.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "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" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "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==" + }, + "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" + } + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "peer": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "peer": true + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "requires": { + "debug": "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==" + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "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-split-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", + "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", + "requires": { + "parenthesis": "^3.1.5" + } + }, + "string-to-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz", + "integrity": "sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q==", + "requires": { + "atob-lite": "^2.0.0", + "is-base64": "^0.1.0" + } + }, + "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" + } + }, + "string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "peer": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "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==", + "dev": true + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "strongly-connected-components": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz", + "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==" + }, + "style-dictionary": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-3.7.0.tgz", + "integrity": "sha512-BL4AQS5kNDBXbFHWJhlCve6+ojnHgHkiwhf2nNByU698elXWdyK5b27OprphT4q0/tJ52zB+lodhqxIxbNOajQ==", + "requires": { + "chalk": "^4.0.0", + "change-case": "^4.1.2", + "commander": "^8.3.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "json5": "^2.2.0", + "jsonc-parser": "^3.0.0", + "lodash": "^4.17.15", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "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==" + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "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" + } + }, + "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" + } + } + } + }, + "sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "peer": true + }, + "supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "requires": { + "kdbush": "^3.0.0" + } + }, + "superscript-text": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/superscript-text/-/superscript-text-1.0.0.tgz", + "integrity": "sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==" + }, + "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-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-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==" + }, + "svg-path-bounds": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz", + "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==", + "requires": { + "abs-svg-path": "^0.1.1", + "is-svg-path": "^1.0.1", + "normalize-svg-path": "^1.0.0", + "parse-svg-path": "^0.1.2" + }, + "dependencies": { + "normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "requires": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + } + } + }, + "svg-path-sdf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz", + "integrity": "sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==", + "requires": { + "bitmap-sdf": "^1.0.0", + "draw-svg-path": "^1.0.0", + "is-svg-path": "^1.0.1", + "parse-svg-path": "^0.1.2", + "svg-path-bounds": "^1.0.1" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "requires": { + "get-port": "^3.1.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha512-jtnWJs6B1cZlHs9wPG7BrowKxZw/rf6+UpGAkr8AaYmiTyTO7zQlLoST8zx/8TcUPnZmeBoB+H8ARuHZaSijVw==", + "peer": true, + "requires": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==", + "peer": true + } + } + }, + "terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "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==", + "peer": true, + "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==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + } + } + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "peer": true + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "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" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tiny-hashes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tiny-hashes/-/tiny-hashes-1.0.1.tgz", + "integrity": "sha512-knIN5zj4fl7kW4EBU5sLP20DWUvi/rVouvJezV0UAym2DkQaqm365Nyc8F3QEiOvunNDMxR8UhcXd1d5g+Wg1g==" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "tinypool": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz", + "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==", + "dev": true + }, + "tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + }, + "tinyspy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", + "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "peer": true + }, + "to-array-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz", + "integrity": "sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==", + "requires": { + "flatten-vertex-data": "^1.0.2", + "is-blob": "^2.0.1", + "string-to-arraybuffer": "^1.0.0" + } + }, + "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-float32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz", + "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-px": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.0.1.tgz", + "integrity": "sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==", + "requires": { + "parse-unit": "^1.0.1" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "peer": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "to-uint8": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/to-uint8/-/to-uint8-1.4.1.tgz", + "integrity": "sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg==", + "requires": { + "arr-flatten": "^1.1.0", + "clamp": "^1.0.1", + "is-base64": "^0.1.0", + "is-float-array": "^1.0.0", + "to-array-buffer": "^3.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==" + }, + "topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "requires": { + "commander": "2" + }, + "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==" + } + } + }, + "totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "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==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "type-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", + "integrity": "sha512-kkgkuqR/jKdKO5oh/I2SMu2dGbLXoJq0zkdgbxaqYK+hr9S9edwVVGf+tMUFTx2gH9TN2+Zu9JZ/Njonb3cjhA==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "typedarray-pool": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", + "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", + "requires": { + "bit-twiddle": "^1.0.0", + "dup": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "peer": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "peer": true + } + } + }, + "ulid": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz", + "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==" + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + }, + "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==", + "peer": true + }, + "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==", + "peer": true, + "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==", + "peer": true + }, + "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==", + "peer": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "peer": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "peer": true + } + } + }, + "universal-cookie": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz", + "integrity": "sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==", + "requires": { + "@types/cookie": "^0.3.3", + "cookie": "^0.4.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==" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "peer": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "peer": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "peer": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "peer": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "peer": true + } + } + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, + "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" + } + }, + "update-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", + "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==" + }, + "upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "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" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "peer": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + } + } + }, + "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==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "peer": true + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peer": true, + "requires": {} + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "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==", + "dev": true + }, + "utils-copy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/utils-copy/-/utils-copy-1.1.1.tgz", + "integrity": "sha512-+NhJVV+PcxjdpkMrVTqXhQHPldlFGca5XR9YnGyNn7kQ0fMi+DqNLzdnhJ4TJ1HNy/HzB7c+FPg3y+4icY99ZA==", + "requires": { + "const-pinf-float64": "^1.0.0", + "object-keys": "^1.0.9", + "type-name": "^2.0.0", + "utils-copy-error": "^1.0.0", + "utils-indexof": "^1.0.0", + "utils-regex-from-string": "^1.0.0", + "validate.io-array": "^1.0.3", + "validate.io-buffer": "^1.0.1", + "validate.io-nonnegative-integer": "^1.0.0" + } + }, + "utils-copy-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-copy-error/-/utils-copy-error-1.0.1.tgz", + "integrity": "sha512-RbJcGPZ6Ru2HQk9SWkvbdWNPX58pt4MO5uXsOQRu4LEGWB3LglkRrmnE/Ph1qWg6ywQ0qj95wTz1OeqQ2l8DCA==", + "requires": { + "object-keys": "^1.0.9", + "utils-copy": "^1.1.0" + } + }, + "utils-indexof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-indexof/-/utils-indexof-1.0.0.tgz", + "integrity": "sha512-76QBfRJpn4A0P5uTO1x00x+Yog36w2Pab0n+aT9UfUvVa4l+e8k3p7YwNpDvfQ6+aKGZdxZpxcNotNS4YjFcyg==", + "requires": { + "validate.io-array-like": "^1.0.1", + "validate.io-integer-primitive": "^1.0.0" + } + }, + "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==" + }, + "utils-regex-from-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz", + "integrity": "sha512-xKfdmEF19iUu9TKxFiohQUlQTuqYdV80/CxHiudVI37iEV/OA4HHlXZoc4qvuO1B74EcBVpErBreRO/dpdLeYA==", + "requires": { + "regex-regex": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" + }, + "validate.io-array-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz", + "integrity": "sha512-rGLiN0cvY9OWzQcWP+RtqZR/MK9RUz3gKDTCcRLtEQ/BvlanMF5PyqtVIN+CgrIBCv/ypfme9v7r4yMJPYpbNA==", + "requires": { + "const-max-uint32": "^1.0.2", + "validate.io-integer-primitive": "^1.0.0" + } + }, + "validate.io-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz", + "integrity": "sha512-6Tad+/QYOxWEXsesKYak1mHOzGdPYS4QeHFImWn7ECi4GR0x3vh7+6+1yoLKNXiklKuTFOxHLG3kZy9tPX0GvQ==" + }, + "validate.io-integer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", + "requires": { + "validate.io-number": "^1.0.3" + } + }, + "validate.io-integer-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz", + "integrity": "sha512-4ARGKA4FImVWJgrgttLYsYJmDGwxlhLfDCdq09gyVgohLKKRUfD3VAo1L2vTRCLt6hDhDtFKdZiuYUTWyBggwg==", + "requires": { + "validate.io-number-primitive": "^1.0.0" + } + }, + "validate.io-matrix-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz", + "integrity": "sha512-86mqLUIkZCRAOVKZvpCB7sDCw1dKBjBkY+C6WO/wLo/jQx0sOqQZz3LLtDw0DCfuAKxRuhSmIpX3nzr0nWrbdw==" + }, + "validate.io-ndarray-like": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz", + "integrity": "sha512-OV85AosxraPFSXJwzv/d7Cu5/dLiyLtsHmxtHTJcHW1N0uscd0eJ2df1Zk+HdID0eUctUllW/1YuQPUJFv1pTA==" + }, + "validate.io-nonnegative-integer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz", + "integrity": "sha512-uOMekPwcl84yg8NR7zgIZCZ9pHCtd9CK1Ri51N+ZJLTe1HyLbmdFdy7ZmfkiHkMvB1pOxeQmd1/LBjKhUD1L3A==", + "requires": { + "validate.io-integer": "^1.0.5" + } + }, + "validate.io-number": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" + }, + "validate.io-number-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz", + "integrity": "sha512-8rlCe7N0TRTd50dwk4WNoMXNbX/4+RdtqE3TO6Bk0GJvAgbQlfL5DGr/Pl9ZLbWR6CutMjE2cu+yOoCnFWk+Qw==" + }, + "validate.io-positive-integer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz", + "integrity": "sha512-eg4LSdyqjICNUZWRilcQ5l+YayRlu6yi+GQsWw1bCmtG9yayOPmLa1fPymEHPPhbvWPAv3w0LLbCsf03pBHZkg==", + "requires": { + "validate.io-integer": "^1.0.5" + } + }, + "validate.io-string-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz", + "integrity": "sha512-TORbkLMdOFkEbPtfdx76FSVQGSAzyUEMxI+pBq5pfFm1ZzIesP+XiGc6eIK75aKu7RA7a8EcqUv5OrY5wfog5w==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vite": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", + "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + }, + "vite-plugin-monaco-editor": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-monaco-editor/-/vite-plugin-monaco-editor-1.1.0.tgz", + "integrity": "sha512-IvtUqZotrRoVqwT0PBBDIZPNraya3BxN/bfcNfnxZ5rkJiGcNtO5eAOWWSgT7zullIAEqQwxMU83yL9J5k7gww==", + "dev": true, + "requires": {} + }, + "vitest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.18.1.tgz", + "integrity": "sha512-4F/1K/Vn4AvJwe7i2YblR02PT5vMKcw9KN4unDq2KD0YcSxX0B/6D6Qu9PJaXwVuxXMFTQ5ovd4+CQaW3bwofA==", + "dev": true, + "requires": { + "@types/chai": "^4.3.1", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "tinypool": "^0.2.4", + "tinyspy": "^1.0.0", + "vite": "^2.9.12 || ^3.0.0-0" + } + }, + "vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "peer": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "requires": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "vue": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz", + "integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==", + "requires": { + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-sfc": "3.2.45", + "@vue/runtime-dom": "3.2.45", + "@vue/server-renderer": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "vue-drag-resize": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/vue-drag-resize/-/vue-drag-resize-1.5.4.tgz", + "integrity": "sha512-SR3U7n6TAZEBgP7zw7bR9mjtAlYBjqIoaWTDPz5HXN/nYhOxKSA31aD7p71fmq1jtyt9reAnCx62valNL9ZAcg==", + "requires": { + "vue-drag-resize": "^1.5.0-rc3" + } + }, + "vue-eslint-parser": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz", + "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "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==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vue-i18n": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz", + "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==", + "requires": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" + } + }, + "vue-monaco-singleline": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vue-monaco-singleline/-/vue-monaco-singleline-1.1.1.tgz", + "integrity": "sha512-zRZQCLi73VAtIdtdr8asUPOzh9gNx/TMvxMPAeWps8gHD596zqqPg4PGgP5ovNHuUaIwLmZcyYtuB8DqHSz/BQ==", + "requires": { + "core-js": "^3.6.5", + "monaco-editor-vue": "^1.0.10", + "vue": "^2.6.11" + }, + "dependencies": { + "@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "requires": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "vue": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "requires": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + } + } + }, + "vue-router": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz", + "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==", + "requires": { + "@vue/devtools-api": "^6.4.5" + } + }, + "vue-tsc": { + "version": "0.38.9", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.9.tgz", + "integrity": "sha512-Yoy5phgvGqyF98Fb4mYqboR4Q149jrdcGv5kSmufXJUq++RZJ2iMVG0g6zl+v3t4ORVWkQmRpsV4x2szufZ0LQ==", + "dev": true, + "requires": { + "@volar/vue-typescript": "0.38.9" + } + }, + "vue3-grid-layout": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vue3-grid-layout/-/vue3-grid-layout-1.0.0.tgz", + "integrity": "sha512-rFiHnlBFxkY9ojh0YB+cSKCE9A9/mhdbgaPARWD7r2yHPWxV9tHDPbMAN+uycsIDF7ikBpNgeQ9PfeiGaXHUWw==", + "requires": { + "@interactjs/actions": "^1.10.2", + "@interactjs/auto-start": "^1.10.2", + "@interactjs/dev-tools": "^1.10.2", + "@interactjs/interactjs": "^1.10.2", + "@interactjs/modifiers": "^1.10.2", + "element-resize-detector": "^1.2.1", + "lodash": "^4.17.21" + } + }, + "vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "requires": { + "@vue/devtools-api": "^6.0.0-beta.11" + } + }, + "w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "wait-on": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz", + "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==", + "dev": true, + "requires": { + "axios": "^0.21.1", + "joi": "^17.4.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.1.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "peer": true, + "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==", + "peer": true, + "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==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "peer": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" + }, + "webgl-context": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz", + "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==", + "requires": { + "get-canvas-context": "^1.0.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "peer": true, + "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==", + "peer": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true + } + } + }, + "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==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "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==", + "dev": true, + "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.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "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==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "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==", + "dev": true + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "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==", + "peer": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "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==", + "dev": true + }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.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==", + "peer": true + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "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==", + "requires": { + "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" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "world-calendars": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.3.tgz", + "integrity": "sha512-sAjLZkBnsbHkHWVhrsCU5Sa/EVuf9QqgvrN8zyJ2L/F9FR9Oc6CvVK0674+PGAtmmmYQMH98tCUSO4QLQv3/TQ==", + "requires": { + "object-assign": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "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": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xstate": { + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.34.0.tgz", + "integrity": "sha512-MFnYz7cJrWuXSZ8IPkcCyLB1a2T3C71kzMeShXKmNaEjBR/JQebKZPHTtxHKZpymESaWO31rA3IQ30TC6LW+sw==" + }, + "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==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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==" + }, + "zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + }, + "zen-observable-ts": { + "version": "0.8.19", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.19.tgz", + "integrity": "sha512-u1a2rpE13G+jSzrg3aiCqXU5tN2kw41b+cBZGmnc+30YimdkKiDj9bTowcB41eL77/17RF/h+393AuVgShyheQ==", + "requires": { + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "zen-push": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/zen-push/-/zen-push-0.2.1.tgz", + "integrity": "sha512-Qv4qvc8ZIue51B/0zmeIMxpIGDVhz4GhJALBvnKs/FRa2T7jy4Ori9wFwaHVt0zWV7MIFglKAHbgnVxVTw7U1w==", + "requires": { + "zen-observable": "^0.7.0" + }, + "dependencies": { + "zen-observable": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.7.1.tgz", + "integrity": "sha512-OI6VMSe0yeqaouIXtedC+F55Sr6r9ppS7+wTbSexkYdHbdt4ctTuPNXP/rwm7GTVI63YBc+EBT0b0tl7YnJLRg==" + } + } + } + } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000000..39b323e1ac --- /dev/null +++ b/web/package.json @@ -0,0 +1,83 @@ +{ + "name": "zinc-oxide-web", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "run-p type-check build-only", + "postbuild": "run-p copy", + "preview": "vite preview", + "copy": "cp -r src/assets/* dist/assets/", + "test:unit": "vitest --environment jsdom --root src/", + "test:e2e": "start-server-and-test preview :4173 'cypress run --e2e'", + "test:e2e:dev": "start-server-and-test 'vite dev --port 4173' :4173 'cypress open --e2e'", + "build-only": "vite build", + "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" + }, + "dependencies": { + "@aws-amplify/ui-vue": "^2.4.16", + "@esbuild-plugins/node-globals-polyfill": "^0.1.1", + "@openreplay/tracker": "^4.1.5", + "@quasar/extras": "^1.14.3", + "@segment/analytics-next": "^1.45.0", + "@sentry/tracing": "^7.17.4", + "@sentry/vue": "^7.17.4", + "aws-amplify": "latest", + "js-cookie": "^3.0.1", + "jwt-decode": "^3.1.2", + "lodash-es": "^4.17.21", + "moment": "^2.15.2", + "node-polyfill-webpack-plugin": "^2.0.1", + "node-sql-parser": "^4.6.4", + "plotly.js": "^2.14.0", + "quasar": "^2.7.5", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-polyfill-node": "^0.10.2", + "rudder-sdk-js": "^2.20.0", + "vue": "^3.2.37", + "vue-drag-resize": "^1.5.4", + "vue-i18n": "^9.1.10", + "vue-monaco-singleline": "^1.1.1", + "vue-router": "^4.1.2", + "vue3-grid-layout": "^1.0.0", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@cypress/vue": "^4.0.0", + "@cypress/webpack-dev-server": "^2.0.0", + "@quasar/vite-plugin": "^1.0.10", + "@rushstack/eslint-patch": "^1.1.0", + "@types/js-cookie": "^3.0.2", + "@types/jsdom": "^16.2.14", + "@types/lodash-es": "^4.17.6", + "@types/node": "^16.11.45", + "@types/plotly.js": "^2.12.4", + "@vitejs/plugin-vue": "^3.0.1", + "@vitejs/plugin-vue-jsx": "^2.0.0", + "@vitest/ui": "^0.18.1", + "@vue/eslint-config-prettier": "^7.0.0", + "@vue/eslint-config-typescript": "^11.0.0", + "@vue/test-utils": "^2.0.2", + "@vue/tsconfig": "^0.1.3", + "c8": "^7.11.3", + "cypress": "^10.3.0", + "cypress-localstorage-commands": "^2.2.1", + "eslint": "^8.5.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-cypress": "^2.12.1", + "eslint-plugin-vue": "^9.5.1", + "happy-dom": "^6.0.4", + "jsdom": "^20.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.5.1", + "sass": "^1.32.0", + "sass-loader": "^13.0.2", + "start-server-and-test": "^1.14.0", + "typescript": "~4.7.4", + "vite": "^3.0.1", + "vite-plugin-monaco-editor": "^1.1.0", + "vitest": "^0.18.1", + "vue": "^3.2.37", + "vue-tsc": "^0.38.8" + } +} \ No newline at end of file diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ab1f0a4773296f734059170958c1f575724283a2 GIT binary patch literal 15086 zcmeI3-)me|5XVnxp^xo+1~pZesp&^P~pw($ooEd@nxqf>hIr zO`@SR5JVfBR01`cG(;h!X)zl}ZQ8~d)YKwPj`KO)+1$OoyL)%b&*Y0PhOZKp`?zr4+uPHFJ8w2?06kTBOB zJ^4^n`)jS;F1%Ox6X6BnW)Zr3gu$}C8gA}OyWRBJSbwl4G80t5(kEbcSF%CwV`nq{ zUCm!$I}l|<3t)G)73QME2Dw4ZOu7cG@rQYEu_TgQB~M$8$Oo-6S&sQgzZT+%e0@K% zL2F#>5tywM_hGLtWU0=F!96~=c5ZRX4vl}7I$ykc&fZz}UpD%G_{hH1v(LVLrag5& z{p~wmZCLwj#de*4U2s2db7x;nof(($nPVTs{C4&pu^ne$NFBTSLv8R8OVp;3>4ApW zKtA}QtJg=I4gTV&-I5DFi5RUl7qB-DQy;+Z`&ks%2J!`4i3#E_4l~D%Ao2`fRf;8Q zt?zh9Vk>o(=YrOdumnH%m1qxViNM2i8SLTu8peNXV%(0M$k~+}b6GOM&}MReYnlfWEYu=Ynq{mWWfHqiM76I^^3oamM$N z-*NP&*ruh|&&3a|ynn&I7khX97lKm^7=|ju{ocZ!bt}#Rdq-|hUS!MepXy$=*pT(T zcY)}LSa)%w*i~{}ILq}2Y?0UlHV{kXLzZ$HEUwll&T3NHs~wZgc*YfU;%|IOTtt39 zvwi;&)o|EmtLyx!fh(EqqfrZDLHu-W7#GuJ0F~5%x{!*dN5exv&qLBW+nPrSnVN@#<-(F}HGkZc{&dc;FC8On@yZp=a^RSXsu_$n|c)G5*1Oi7^!I z!?qfkm>@P8qh2bR-x~FUS1}~X&!UeDb6bxems(29~kSlxi93q?EnYItoH7N4Z$%u4%$@4h7vrC zF*5zN!+`w#ryp&8_&eGZZ7t~#eX@Z+;MswGJ9PA*lZ;)B?k(T7D|6QzFVD`{iIX1| zf8R`h{;8X%N@J)#bi(1^1dNA{anO}2YVD_Tfh(WO&Y&R e@`t{`{C&ihfSr1%m|fpd){12vv{s@Ieg6kiydQ4> literal 0 HcmV?d00001 diff --git a/web/quasar.conf.js b/web/quasar.conf.js new file mode 100644 index 0000000000..b8ea1ee400 --- /dev/null +++ b/web/quasar.conf.js @@ -0,0 +1,16 @@ +module.exports = function (ctx) { + return { + framework: { + directives: ["table-resizable"], + }, + build: { + chainWebpack (chain) { + const nodePolyfillWebpackPlugin = require('node-polyfill-webpack-plugin') + chain.plugin('node-polyfill').use(nodePolyfillWebpackPlugin) + }, + vitePlugins: [ + [ 'vite-plugin-monaco-editor', { /* ..options.. */ } ] + ] + }, + }, +} \ No newline at end of file diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000000..7ea14cd26a --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,19 @@ + + + \ No newline at end of file diff --git a/web/src/assets/base.css b/web/src/assets/base.css new file mode 100644 index 0000000000..88633bc047 --- /dev/null +++ b/web/src/assets/base.css @@ -0,0 +1,74 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + position: relative; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: 'Nunito Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/web/src/assets/images/common/add_icon.svg b/web/src/assets/images/common/add_icon.svg new file mode 100644 index 0000000000..27d51c86c9 --- /dev/null +++ b/web/src/assets/images/common/add_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/app_logo.png b/web/src/assets/images/common/app_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d8f6f04f67154b13f4d8e10ba2608ca046ea9d15 GIT binary patch literal 6334 zcmV;v7(wTWP)EX>4Tx04R}tkv&MmKpe$iTT7)>9qb^*AwzYtAS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRjWHa-`QDULg#c~(3vY`@B5yur(qkMnP zWrgz=XSG^q?R)YUMhe=>GS_JiBZWmQL4*JqbyQG=g#@h{DJC+spY-s@9KT2|nOqex zax9<*6_Voz|AXJ%n#IWpHz|??f-koHF#?2kfmXw|zmILZbpiyQfh(=!uQh?0PtqG5 zEq(+HYy%h99ZlW?E_Z;TCtWfmM+(sN7mL9A8GTb87`z3-Yi@7teVjf3S?Vf%0~{Oz zqb15-_jq@2cW?imY4`U7Qi^h#j(&5&00006VoOIv0Q~>}02aM7n!*48010qNS#tmY zE+YT{E+YYWr9XB6000McNliru<_ZN4BrhQVOIZK_02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{02Y=>L_t(|+U;FybX?VW-TT}-qtRHBWm&Svnvtwv6}%K6 zh7vFd0Yehk0RrV=2gf8aNmJ4`ZPKnbZPTUz!gWR<8 z(Um0r0YW3nKmzMR8(k_SCSZ4ER5_nEUofRopF-LOI@|BOxcN~4%kShSTmESbfNU8ne zr4LnCR9cbK5@<_TJ{}RYkTBN@Xf4laFi0@+uG;XNib^YTS^~|`zW~AwfEJYNBqWUr z$QarBib^YT+5v6l%6mhQT@2!VWeYN3gf!1tYwx=M-fMnVQE5fWQ4UFlT*LfN96^5MRVLYxFyN$AcSd za@l>Ioy+`_wK%a@tX#0=gnQ}I~ zO-)U+!c|r8x6*tA%pmDmYxh`Vw&wHs&Aq+7+kVwS6N|-`7@!fxI5wAi-3^7dCK8Fk zW6#m5b3K7<^*u87k>eelg*nSWp93)e7)g)41U5_h*H^Q-=ejzt%>z8CK`qI%9r9za z_Nc}j3WZ+l=;#<285wDV=Y7&jA0$viU~6-8b2^<)Zz;pg6Lo+kFlLFYZ8gR;0ti{j z!k95b?x_w2--^Xz|2^BU2W0XTM`b$)AE7Qn_6 zF}M}CJksL}R}$u^fhH+SVw1IeU?h}zv}@I^xl^>J^^oR+TyT`*tr-~^F`nnmb&Pp0 zr3;D*nrW=<0I;RZK-OT4dB3DjQo596sj(?FcJFb>XdjtrYHC{F*VmW*70tKWL7odB z1Sw*S2_0AHc&xJM*|-Y;>lfYTg9WeS1%l(u<+mTh;|4))6zqKu{>QazPVt%!0O*De zVYrP6L8=E3c}M6iIg&gAIY|KmA{i{hJpCM6dn?FGi-saeppWFR03#qwpt(55OK1!N zfxs^oEn4*E`t|F*N(OeEIoh#EJRUc1>_ofkVPMhiw-2lbJOE&B+$YS)QTph9NsszK zXXmQleCkv$j_>DX z6Qo-J)Bw1|b=`%VH*fBpDr71hLpU6^%a$$k;_tPbJZ~GqZ?!5on?q7x#N~hEP0Q#r;zN4wB zCTq;c09;rMuq?@8Yi%--NO%A|q*7mLYHGSO7z{>IsnjVsU9e@#mY6XnYK(CKVC&Yc z831n_?AqaAFzS+R1f~_eZ)$ro`PUQQCzHuB06%VPYa5W~HG{mNXob!Tg+l)`m407- z`Q=D;b#;tn)$s7}zB}){GYKGbq;tsU^9x8;0YGnW??4l=jg9{-zX1SqqtVRvRBCxCd*uK(0BDDl z5%93tw{M-Tsrdqdg#bdu+^Ac=zjnvYolhUa1Jrw-cZCCdWpYmGI8LrL7TXHo+dawT zHx9!9P31Ml1SI)($lMVyre?Ai@;q;$1N;-n4wUSH>Z+>j+*oX*58RPVCfC2is{n2y z5{cPB;0px4IQjcMvJa{b?Gr0ze0V{ZWe(2w-k3w!sI!HZ(N!?9kBAA?vipm|$Bpx|hSQD(87)bhA99_m>5jC2-TQ z=l*y!^|KL_spO_j`!fQUN}5g*khVzrx*G^=n8Z-c1G%vH=K&kUNV7zq%R*wEkn|>M zYi}g*;R%odfFaMfz@pYz?D3vt@*SJ-j5E$?&5w_N(s7*MgLJSio&d=XNndJ<#X1tn z^GuC)Sx#C|Fy2n;|a-&|J)q#|{A5v}ylLX%T?g0ICjRa27bg*QZaP z{K$e&XhjS@&kY*G~S&%RK(l=h)H~vi5s%5!y1XxE$M{sa(@InBe zDJnf6saxdtec$g)A11^&jD$$e0*5E^b~*#DLpQ0@Ai!8E$)vq4H*Kt0)Q*&L*a1vks{6x;*3}$ zX)nkJ2)s;d`ymYiFwM=)4IpojR8P{8^bE_}b(Sf}nwn~chll3}j9H1orU!t%lzsqfA35G4v?PyY z+L!K2rqgRm^0sQ z-qtBLTJq<)TyAK;6$yo2q_hy^Ig)}TFK`@Z9e{ygFqqBda+^rz4e+}4y!8wOGP&__ z9{{SVs`^20DFIR>m^+MKH#dh}U;%&#Nl4l$YoGLhwdox@dM0jd z2DZA<=!ZxKY$3!S3K}z2chn$(&7QRnrqbyR#rwlVHj@MPE9M`B%GcJDf4-I0{uYe+ zO!4DUNiSI6UzN;cj=QK&a!l5~mQ1C-eE?gPOm48z=$SNTWg%T-oGmFx>rAEUTb9HrfwO_LFt0x(j^Ygjf z3;^2_iNsiYdwcKb=;&q#=%?#861c9qy4oq`Tmb-WN3on)Z+!e8)4O;70>J(;1cSk# z^}I_;7X4Ma?uK+vPtO5tGceLBb&AYD%K2m$TsJv|g-rO?{?7!+Chm_)-*d^U07M8h zx<_GgdHed?oi}!(-MF{|#1aZMhp2(Q+d2pRJ_jHOqF=zneoo(9yZX9U${A$OJ@;H| zRUq&|7D5+DvLrXk_y0bb$^868{Enm{kgrbuJOPZg0l88i#BjKM_wL>OD0sC4);5_; z9<&tF-P6+r;O5DnH#IfYOb-U@y+FVn85x1=y8Ven;+p`z+1%XRXpEU>$oV8c1Yj|w zStQ%xIDZrj2EPbki}C%iN-Vx1KVO_wsU8{TP79jzDkSA`|b}JIH1~R*#mGwWoY7s;jC#p9faL_s>Eh7yAZ)_@p}GPnw&XA9r2%dIJAeWK(}5 zXv}OJdplVqP^^;ym~Y5068O{!TFW6bHfB%B0+QXb_8rEp56HFwo{k1+OCO3iY~6vy zbnz7yY7WOFfxPeK9XA0mUR%X=cipvYq?|!kEJ*)ukzuSU(#gY~wTtTO>$}qFbh+h| z!DuwP;9!OEmX?;YDaAqVfVG=7KK_Fp{r$Tv(BqOl0?sxDLLb6R>$KpMSouukV-}Cl340kWW7JH_@sQe#`)O5Qir{N@Rg!b-*O% z&3n1u_w>iLL9Dy$u8)>A$N*qpDD(#;uNDw3#tHqt^vBbuPw(pL>M9G633ye~M95k1 z81se6*UX(ecMgEXBtK%vPt%yMxuH;FahInokSc~jH6(9nZ)m8Syf=zn7b_AB)A7w6?T-CmM||EN!uJ3pv>S94k*owIu*~j|~QIYHe=*sRwMy=Z`FUZ)z_ZeT@B6Qw6rg?lzW9a4;13{tP(mYlR3MwmS!;b9r%kuFB!_RG6LA5| zHssB)hYtTI&ZBj8b)EDvI#pG#*nECA$%P=#1JFqFV-9eEtlekG21v7L%p7a2PatJI z?@q^YvH-NbzrSzJoH@@0jd=vXO~n$z5(9L=adsKNqf`T64vlG+1V}yb{kx4Zy8ys- z-K6JvKLl_o3U#vRzUDQr7qV?bX%Q`8|8~z)DFPg-zayqQ-#}W3^78`{JTUuJaYJfWcL{R9MX?Be{SHJ+Q z4bzzRi8>pk=MC^*liR*d2+)?_ecL6*;6?%;5E0?AZdB^>Pppnllg05Srem&$#Hw53 ziC-e_41flZ4Mzabnvszab1DXvNF)YhvDjtF-WiZz=K>`a! z@gT_gu(pkpx^0d`eBXZ*#+*lB3CS4AMgWa05Ox#!+X%@2mGnJ3KE584N+!n*wB`54 z=Q}R`0>BlM8-tI*Bm5RDZa4uURK|1hIDl`SVsH&eN|GEq%6X54!(m$_3I;jR<0vI2 zCF5C0nF5QCq^7dW#*Ct*PqOs+0FX>3yCadvy@5cWpVlrWc@_#?B|!jrkRy<`d(soR zbb3wSq)jt8I5=2SQ}eulK_h*fiv*B^0(-WXWG|&BN7Ct4eZW4H99u~ylLJjn zO{=S1ce_J=UgT^_wIBlktO~{bomTp8GL>3Y`unL=YFle0@*NpdL+N4w^&o>R?3;d& zPgvuMDpdfQ^t6$-7ek`KNo?Dzt}&}&Z6nF7 zo#LN#ACj!m6GQ z{izdTz!2RPbyeiF1)6JdhooyJC$8n?(6EzvR9^R8k<%Aw001OJ~G{E;dm&LOcbyeiF1)2=X@|_%l_KJ80!V{z0D*rOKBB#4Y zE4=NeyoAUSd=}uh^3~YT8IR{Gs;bCoouiTHhhTxS2_Lf(p7%!ar@d*twf^+!i>ydR zrUsgPq-Zbz{qk8y6^fbPUHysp%8F_#^8ZQx57dUTt}Fz-b^rhX07*qoM6N<$g6fXv AegFUf literal 0 HcmV?d00001 diff --git a/web/src/assets/images/common/case_insensitive_icon.svg b/web/src/assets/images/common/case_insensitive_icon.svg new file mode 100644 index 0000000000..4acd77f75f --- /dev/null +++ b/web/src/assets/images/common/case_insensitive_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/images/common/clipboard_icon.svg b/web/src/assets/images/common/clipboard_icon.svg new file mode 100644 index 0000000000..2d242bceac --- /dev/null +++ b/web/src/assets/images/common/clipboard_icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/close_icon.svg b/web/src/assets/images/common/close_icon.svg new file mode 100644 index 0000000000..bbc809dbf7 --- /dev/null +++ b/web/src/assets/images/common/close_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/collapse_sidebar_icon.svg b/web/src/assets/images/common/collapse_sidebar_icon.svg new file mode 100644 index 0000000000..30adf7455a --- /dev/null +++ b/web/src/assets/images/common/collapse_sidebar_icon.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/copy_icon.svg b/web/src/assets/images/common/copy_icon.svg new file mode 100644 index 0000000000..51c6cef13c --- /dev/null +++ b/web/src/assets/images/common/copy_icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/delete_icon.svg b/web/src/assets/images/common/delete_icon.svg new file mode 100644 index 0000000000..03c7faf74c --- /dev/null +++ b/web/src/assets/images/common/delete_icon.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/expand_sidebar_icon.svg b/web/src/assets/images/common/expand_sidebar_icon.svg new file mode 100644 index 0000000000..e06ed551b1 --- /dev/null +++ b/web/src/assets/images/common/expand_sidebar_icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/web/src/assets/images/common/input_search_icon.svg b/web/src/assets/images/common/input_search_icon.svg new file mode 100644 index 0000000000..d75fa1db56 --- /dev/null +++ b/web/src/assets/images/common/input_search_icon.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/language_menu_arrow.svg b/web/src/assets/images/common/language_menu_arrow.svg new file mode 100644 index 0000000000..79d6e8e6b6 --- /dev/null +++ b/web/src/assets/images/common/language_menu_arrow.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/list_icon.svg b/web/src/assets/images/common/list_icon.svg new file mode 100644 index 0000000000..5926453131 --- /dev/null +++ b/web/src/assets/images/common/list_icon.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/menu_icon.svg b/web/src/assets/images/common/menu_icon.svg new file mode 100644 index 0000000000..c10413302b --- /dev/null +++ b/web/src/assets/images/common/menu_icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/mini_logo.svg b/web/src/assets/images/common/mini_logo.svg new file mode 100644 index 0000000000..12d3138424 --- /dev/null +++ b/web/src/assets/images/common/mini_logo.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/pointer-to-demo-2.svg b/web/src/assets/images/common/pointer-to-demo-2.svg new file mode 100644 index 0000000000..cc1e13f027 --- /dev/null +++ b/web/src/assets/images/common/pointer-to-demo-2.svg @@ -0,0 +1,4 @@ + + + +
Check the Demo Organization 
Check the Demo Organization 
Haven't started ingesting data yet?
Haven't started ingesting data yet?
Text is not SVG - cannot display
\ No newline at end of file diff --git a/web/src/assets/images/common/pointer-to-demo.svg b/web/src/assets/images/common/pointer-to-demo.svg new file mode 100644 index 0000000000..605050d2fc --- /dev/null +++ b/web/src/assets/images/common/pointer-to-demo.svg @@ -0,0 +1,4 @@ + + + +
Check the Demo Organization 
Check the Demo Organization 
Text is not SVG - cannot display
\ No newline at end of file diff --git a/web/src/assets/images/common/profile.svg b/web/src/assets/images/common/profile.svg new file mode 100644 index 0000000000..3b72406c02 --- /dev/null +++ b/web/src/assets/images/common/profile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/images/common/refresh_icon.png b/web/src/assets/images/common/refresh_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bee471e0c824a6fb117b96ad04fa70443f34eb91 GIT binary patch literal 1305 zcmV+!1?KvRP)EX>4Tx04R}tkv&MmKpe$iKcrGB4tA*GkfAzR5EXIMDionYs1;guFuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JWDYS_3;J6>}?mh0_0sdx{sb+8-P&LcQ zq>@4|zbb@Y5k?Rp3?e2mQ=b#XG(5-GJ$!t6^ClJpv-LQx^h^IF# zo%23%l$9lg_?&pmpbHW|a$R=$jdRIiKhKOB*~~m~lvpTrvE0S1Y^cOj#BoK{DBquR zS>e3JS*_Mt`=0!Tk%G3e%ypW>NMR965FtQD9TikzAwjD~iir&ECq4W_j$b5~Os)zT zITlcZ3d!+<|H1EW&En*Qn-oa`JukNXF#?2kfmXw|zmILZbpiyQfh(=!uQh?0PtqG5 zEq(;_Zvz+C9ZlW?E_Z;~lP(#OBL!&si$&o5jJ_!k4BP_YHMh6+K29HiEOnK>0S*p< z(Gq2^d%U~1ySIPOwEO!39uabd+^5T-00006VoOIv0Q~>}02aM7n!*48010qNS#tmY zE+YT{E+YYWr9XB6000McNliru<_ZJ{8Z=$a#UcOz02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00QwzL_t(&-tC#sPg6k<$3Lw=sckK>k^&_)3W|vu1mn+x zq6anc=-=nryYXO*7Y`mFH2#PlOo%@aDiyInD`>5)hfb5adFAc)ZR;a>-{d9T$=iMN zot>H8nL>a70RsF_9Poh-!@xb@G*AV;nM@A*fWS2%3M7C_rbg|vs7M6J0BK+Z7zFx( z5bzuL32Xpsz$#Fdc>~HCN#J`g2^;~YfvhOpj$B;cof26dcnNHY^_v(nArSJQ_#ki< znDl6Xs$$4jzo+o3GwrG7&TGG z)P>FhR~+O8AP1~yt}_nY6gPCjec+Gn9T;;^z78w^ujTh%hyfSG!f_Yl4N1nbMj#H% zDY6>y1X$KwV-`56`EJd249p6NRy;OvnPw{0$w)bgA8Q1Xz$rzxXsA5E8_8Y~QFK>g zXH(9CufUG3@0$eioU-*L;6aBeGb+!fiJN%YfiQ4Xk;C7iCQGB;7dEPg0 zBcNJ;1)m|T5x}j;?>7QbWnA2E1k{UF#cu@q@FxxfGjb;6Bz1R0prTxvdsTwoZYgr& zz@tuGNUe<0Jy1TWRA_N8F;G^z8%4Z!4o)>PDbh=dYq0>J&ioi!HH&ZSKax+o^c&h93wst`E z=NX49fE)5OI?e6In>oVKZB;1D^~6K0tr~0ep + + + diff --git a/web/src/assets/images/common/search_icon.svg b/web/src/assets/images/common/search_icon.svg new file mode 100644 index 0000000000..b9ab279e96 --- /dev/null +++ b/web/src/assets/images/common/search_icon.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/settings_icon.svg b/web/src/assets/images/common/settings_icon.svg new file mode 100644 index 0000000000..f53024e884 --- /dev/null +++ b/web/src/assets/images/common/settings_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/images/common/slack.svg b/web/src/assets/images/common/slack.svg new file mode 100644 index 0000000000..85e9f426aa --- /dev/null +++ b/web/src/assets/images/common/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/images/common/time_icon.png b/web/src/assets/images/common/time_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a05b7e17e84214707453dea65c1c5412b5efaf GIT binary patch literal 1346 zcmV-I1-<%-P)EX>4Tx04R}tkv&MmKpe$iKcrGB4tA*GkfAzR5EXIMDionYs1;guFuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JWDYS_3;J6>}?mh0_0sdx{sb+8-P&LcQ zq>@4|zbb@Y5k?Rp3?e2mQ=b#XG(5-GJ$!t6^ClJpv-LQx^h^IF# zo%23%l$9lg_?&pmpbHW|a$R=$jdRIiKhKOB*~~m~lvpTrvE0S1Y^cOj#BoK{DBquR zS>e3JS*_Mt`=0!Tk%G3e%ypW>NMR965FtQD9TikzAwjD~iir&ECq4W_j$b5~Os)zT zITlcZ3d!+<|H1EW&En*Qn-oa`JukNXF#?2kfmXw|zmILZbpiyQfh(=!uQh?0PtqG5 zEq(;_Zvz+C9ZlW?E_Z;~lP(#OBL!&si$&o5jJ_!k4BP_YHMh6+K29HiEOnK>0S*p< z(Gq2^d%U~1ySIPOwEO!39uabd+^5T-00006VoOIv0Q~>}02aM7n!*48010qNS#tmY zE+YT{E+YYWr9XB6000McNliru<_ZJ{88`3g$6EjZ02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00SCHL_t(o!^N1(PZLoX#ebaVwT1@6c){uiyw8oPia zYbAg)d5C9$m%ztj37rIP0A1$Z60iWw0J#DiNdRp?k6i2FE$}Aj`5;1dz<^mO3p@uF zDGnV#pRw`=@D%vrpXdez?R}s@*OR~y@SWoEO)*pjB$WhdVBT*jKcOn%q1nk8@Cw+c zbnFA4HBKqsQo!_Kgl+-thRo}bFB{Nv3nAua45m6T-UpxjvGiKc80O!rIuyYKAatalI7Du&!s4}6eM7B>R}Ea&hSv%_ zdtIc~95cCDvb9u<10#y7DxhBqGzhguna(>>Z5}$yl*SXlBe`F_M z@o>$F*aw9}5bnyo%fLJDw4XA*Z?9lMw6bT~%8xlEsT1+Cbk?sJhfUXU zy8?u+8tc5sr>V0lP)XpNDtP9I$n=Sj*EmiFbsZ~;p@ib;C`k1gS8V{#Y|y&_y;Ius zO>y<`ze*%ht@!LQ9vSqP1UDdE=MAYOa6yG`y+|@`I^R-8yAK-K5$a=utJdg>xwoa} z@k_qN@>rx3xMVats!Jn5DkIG2n6$F4K2N{CDq**$7sPcGBz<2zyv+ + + + \ No newline at end of file diff --git a/web/src/assets/images/common/user_menu_arrow.svg b/web/src/assets/images/common/user_menu_arrow.svg new file mode 100644 index 0000000000..5c0378a413 --- /dev/null +++ b/web/src/assets/images/common/user_menu_arrow.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/view_icon.svg b/web/src/assets/images/common/view_icon.svg new file mode 100644 index 0000000000..cec33f0ea0 --- /dev/null +++ b/web/src/assets/images/common/view_icon.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/web/src/assets/images/ingestion/fluentbit_icon.png b/web/src/assets/images/ingestion/fluentbit_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7cb86c72d53b5165e3d9b4a6176803b6e127e9 GIT binary patch literal 3264 zcmV;x3_tUUP)EX>4Tx04R}tkv&MmKpe$iQ?*hm4ptCx$WWau78P;SDionYs1;guFuC+YXws0h zxHt-~1qVMCs}3&Cx;nTDg5U>;qmz@Oiz1bM0hc?#z>^`HvLpFv3i&+nen#Jv1^RA*;HukOb04P_CX>@2HM@dakSAh-}000V?NklM$K!7?}?3=*Wiw>nPSL>hPfmsDp?o zpr}Ae_)0>O_py8L=^y(xZ}Wi?NC5HuX7=s9_s#Cx^V{D!_uO+IkV6hR_QNU zfB*u7d?E-0A&}#F1%-#2XBKnOheMxy@A^|L1^|TgEI_Ou{0Rhr!ZHEC5Xx(AJ~Mu> zVQJYD>z*Gv|Gm;v!UclHWp^)q#u7~eGlWBKzyxaJ8dfPu^zKpT7DT6R-F3kNRFVBw zD*yl-=9vVWlz5a5rsy3s}VRu>bn z#WM9#I?_t^;5Kc_w!K&siPMSK^U_^q{B@Ppmoqun+o&!x3i;wh>MZl; zHp1)bU0U(}V^{3$=(@9C-WrWI*fL}FxjGsf>@v4M{LWs zkp=re)Lu#xCWzWmvg{2H-bhv&O6LL0?Sdi*u*@Jr%Xe-;45@xaAgy*0_@^J=F!-IL zv3|tVC1t%2$_fZdtkzkhwSv_g5C92}Ia;h%5Uo7X&PtOPeO1VNYhTa&jl0K`Br?3p zVP}CbE}pvVT-P(}4cQp6g5$(Nq1mB@3_^yCY(HJx177bQAkEE|NIV!MO%p5(+9n8;2_Zo!AtFTT8o{YFAczz3vqN9nF}*Wyzu(q|KeB7e zgt9?6IJ71>4kOP|nK1<4E%%zd^Ecc#?9t8`e^>NE3%+!NR=erkmfaD)){l5$XtKQjJP+tpj5a3o>JF z-<~kN3jt=3W)YGX4&`Ig&PxX-4k!HqAJ?zbDRYkHtbx*o0MQD@9}_tG-Ce2EM(wB? zoIK_{pd)N~a@-DpehGs0!==C#7j>o%%{BoWb_t@)QqmvNb&XkyMTm&U_DJeiE?8OD ztD||k^wWm9I&IHsD}8B+FWJ6NJSUQ#nS3n9e5gX-NmktXj}3g##xKeDT=>|48omIHnG^G#*V!*K1jO~-`* z04V!ib+Jd@JBD$#kWYYRLC}^AF-mDfRURTLiii_~`QAVfGoXBBcx;ih3Dn#An&B^f zX?yNcD8RCR zXJMdmaBpA!I-|EE`9+a%x*42n5K(0)FR$yCdO&CK<;)vjBu(Q1G)suiuuGVT&Zf_u zp*oxk_M@*@axhfb5wss=;rP+z{FTPs3G zi`_GBTrJvM3g!<%ejXGALa!itEQSZL5SfB+SVx>N0sx?P`c2ze_Z$IWfe={|fmaxX zbtou49d$JfqUNLG>bJYSD%?fIJ1UyJWE@y#CrWz^@}dl@2%?Y51%#l!k^~LMxUTp8 zE>%D%cuC!~3DqM?cRh0!?U5)vfTi=si-29S@p@g^oyG%z>S_gyKQ~@ZFmnq{LY1Ts zAm+I+N+C(Q^|aQ})JFt1f>;9~|A3m^@bgiBKW-Z%U4hBZ|9L>l+O=tqN?ohqT81YI z9u(4upe_Mz;&}L4_kzN~7#wF#I?uEnOkzuhNdL zsJVIcW*lc6odN_j<&`NV`MS?*WbKb3pzxdTXnQ@|2)O`3m}w)W(fJSeOCU|ZqD^DV5SCvOxtwpO;6(lO`L`!)<-W8r{jI0ya7=|ag-FQ%KZW8nLDs;^5@lu4 z%af+;!%2)50#A1k4C;^|c^ zSoz$<8T;`qLF;%WLNBeFT$GBL!OAJ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/ingestion/kubernetes_icon.svg b/web/src/assets/images/ingestion/kubernetes_icon.svg new file mode 100644 index 0000000000..8188d0ace5 --- /dev/null +++ b/web/src/assets/images/ingestion/kubernetes_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/web/src/assets/images/ingestion/vector_icon.png b/web/src/assets/images/ingestion/vector_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..54602500dd275bba7bef9b8511c575db3571feca GIT binary patch literal 4069 zcmVEX>4Tx04R}tkv&MmKpe$iQ?*hm4ptCx$WWau78P;SDionYs1;guFuC+YXws0h zxHt-~1qVMCs}3&Cx;nTDg5U>;qmz@Oiz1bM0hc?#z>^`HvLpFv3i&+nen#Jv1^RA*;HukOb04P_CX>@2HM@dakSAh-}000fVNkl6F$#!rO&r6% zNTPy(8OWH)I^8CYCZ|uPHEE+jQJ_gW_UZ0qoYszZ61!uJL=gekVkyC;RYamtF1RKU zEI>gNg{tq}`2#_gqN+e}JZHG))E~U>zIX4t@4kC~_kJJ101eOp4bTAn|0VV)g^i!L za=fIliZsQeC$2u9k*IxCIw{OC_`S618Ci&EF2o=`7kkcSq!jg5n8dATLf~_g3K1;? z&}#$u#VSLH@lYZr$bik-?8NiEHh@n|%KNe`uVDZu#-Jc+g-@(9O}j&x_%K$FkDQ9< zCy(hcR$O)!|HwJ|P^UQ|PL(1ENgx0qFa?ypu_;T-cO?IzyE(kO2i~ztFEI9*hs#j@ z$7L^JW6G-->EQ?lzS283HRNFwoiuJZB4_$^`1w8U`B0npjY|$7LedB~NBqyq1^Cm4 z{|a}PApqFwvGbK9dh7ulJOF_7>-jSg`MfUxAo-m+__gv|NT3{_7*%600*)P-;o%H_ z_K8t_+~c*WW$n}@QFv~m7XaX9eIruV?XtEOd=7xW_RIhR)`A0#_w;RJbYFV`++iF# z^J>vJ5VLCg%Yuy%V828lbK*7cKX7E35+)M)E47{4uJDoMA11Krp5!5<7^owP!MtGyvcmt9lc_S962>Fx7ixhqhs(25t{P9vsdE^kwE(;TY=)J1r#xMG`~M6Hdc`Uo?7(*cmJ`i)81Zh^#oWBfSJUw305Mc zzc&v6r!!an%-HlGNav^$dCtS&E*d*eYa zqvz9&irqb$TV7sH)n^N`UA@Cb0*JEVG^*xILB=EV0N)tZQUVqe(Mfh*EVMAicOg4S zC#-Dh_Vo4;$Vy(!K!+Iks}tf<-hU(pXo<*71;SNGQfzs-vf0wPmo8m$(ACx^T-WK= zZpk@(7@*M%2renRkaxYh`Y)9_U4mAtb+*_O(v{5yLGfUyB4TOJ#HWt$cLPY^Ul3>z z0g2k}E3a5Gr?RqPSao&Hr*=;azCyD29$|FZ}*&l-XLR9d>|MD zIA>Ut5Qy6PMr0P0byFd-<&`?!Tjm{uCDgvjHejA z5;YCTDb!-Ps{>-gC$){w4wwLMFE?!7Q-a2O&E50~_?o)9I!BW_D&!&nbwuLd`_uqW z$EErJY%IVu>FMdR>0*ZcCx}KFt#h-Efrzm9E{nx`$*Kil<>L0sX*h#OK ze`78!f+&YE=01MjN{dpWqMM3pyuv`QJSZ4wjA$twoF~MoQUHJi)a98;g1&QAf(Z`IjrVjefPxMz% zYqyzPi2#XPe>x#fRr+8L&09`qq-iZOfRzDH3qn%oP7VPfAhh-a?*iyxfa;q!gN5E; z^z>C`P;K_o4lWsJq)dTp&gfV>Xagsf&zo4#$H6+?uW z2gb8KX{_6*}#7`*_z($KlwQI`^po z7&->0tOI4pJz9aFX=9P_!qko!{_=G+G`6s7FLpeosNjhRoHiEU?LCRI3ss$x0rAJy z0AN(xKId=TaTIRO_DFntP8ZfsH||A!!(CL>+`{S&d%FhB#nEsaG6-oK)VOu~UOO-2 zReh$4g!A{ME`E-Q#hhQ~Z7m`1`J6)Ze~`Su=f%x_)%%Buw^s5&$rKm_wK6 zu1=N(92v(Ta-2mrt6>hRGQ zJK*MQkI&wZhJ(FrYXGS5bagH6Ql}W2GZYG&lP3EZda2~0?~6vG8ELizuBv|fx~`g9 ze;c=H$TwC+uP*obF_@wucgz~nk|U-@83VPUxJ`oQtnMcgZ*`_W*{;_j-BWgOly<9tV)P@an`r4$9 zYPB;Iwl!)^(Yn6R0)%1)3>j>oDAN@wlSxRg0l3qK&|VINy`2r#r5B>M?oPLJ>uxn- zU3wurobB;?)b#d`^!jGJ$QU!(d}We#G-FIbgbRIc04qD|4FCjzFEYpL?(TF7Bo?)n z5spI!VZn=2(9qa~zijRHJte-|eH_J>>Ltpi|xrRpZ$O8y>J3JHti1B^=kZdWll2mZ7) z2JX)G0B~E#^sa}8>o?|P7LKyiwoy3=yGOZ@}l93rx!S`FcIvodzEfLi&}5hqDFW1`x~D99#nc zFo@(n145lCJUr;ceofI@M)a;1E6&*Yg(IFF!1DV1y zWaO3NKyk&gxgk^5SgKdP=HPMwqrtE~A|mi&zZn1kY&j)0$%qAztkE3W6CC`!MfvsH zoMVLmFv8st{*#|F%5(bsH2}cQqViIUuVvvs#|cBT3XEO8d#fq6=k-f3C@=3ou;4r& zpr4xL=AgOZ;U-^@jE_$pE$K-Mz((Q>l4Sgqq%6yjTRv+skb(J{`^2rV@c5I>a+8KY zUP6e7$grT?M^X%hg#~E<_B((*Y0YiaS-FRXTQJSW#?}^Yo}O@Vb2IvL^Yn!M5c?L- zv@vt?>LYGV;@*A&d2t}AH=FO(6=r@IgdKz>3GBArcuDu$oI&Qvh7%z;ZkLrn21pgKrX1pL~qHx1eaY zvzuoL=RAdgN+Jpl3kmq_vFZqg1 z0OEVHM&n(>58M$a>Pi1)Txe)re+AV?@(&aDfzZX#W5;0fvr|p-o;Z3OS1w!zNo<^U zn`t2Q*m^*BbgAMZE>&E_<3x|d0E6`MO+AzTOURbVV-huykZxdr255i=Xn+Q&U+I4V X*b~^BY`J4400000NkvXXu0mjfwX(0Q literal 0 HcmV?d00001 diff --git a/web/src/assets/images/language_flags/en-gb.svg b/web/src/assets/images/language_flags/en-gb.svg new file mode 100644 index 0000000000..521a6cd39f --- /dev/null +++ b/web/src/assets/images/language_flags/en-gb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/language_flags/tr-turk.svg b/web/src/assets/images/language_flags/tr-turk.svg new file mode 100644 index 0000000000..234739416b --- /dev/null +++ b/web/src/assets/images/language_flags/tr-turk.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/language_flags/zh-cn.svg b/web/src/assets/images/language_flags/zh-cn.svg new file mode 100644 index 0000000000..ce11e5c553 --- /dev/null +++ b/web/src/assets/images/language_flags/zh-cn.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/left_nav/about_icon.svg b/web/src/assets/images/left_nav/about_icon.svg new file mode 100644 index 0000000000..e883571d16 --- /dev/null +++ b/web/src/assets/images/left_nav/about_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/left_nav/dashb2.svg b/web/src/assets/images/left_nav/dashb2.svg new file mode 100644 index 0000000000..43389c42b8 --- /dev/null +++ b/web/src/assets/images/left_nav/dashb2.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/src/assets/images/left_nav/index_icon.svg b/web/src/assets/images/left_nav/index_icon.svg new file mode 100644 index 0000000000..01b86c35ac --- /dev/null +++ b/web/src/assets/images/left_nav/index_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/left_nav/ingestion_icon.svg b/web/src/assets/images/left_nav/ingestion_icon.svg new file mode 100644 index 0000000000..91611acd3d --- /dev/null +++ b/web/src/assets/images/left_nav/ingestion_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/src/assets/images/left_nav/organization_icon.svg b/web/src/assets/images/left_nav/organization_icon.svg new file mode 100644 index 0000000000..a88dca7871 --- /dev/null +++ b/web/src/assets/images/left_nav/organization_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/left_nav/search_icon.svg b/web/src/assets/images/left_nav/search_icon.svg new file mode 100644 index 0000000000..20b7e3f399 --- /dev/null +++ b/web/src/assets/images/left_nav/search_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/left_nav/ticket_icon.svg b/web/src/assets/images/left_nav/ticket_icon.svg new file mode 100644 index 0000000000..6555300848 --- /dev/null +++ b/web/src/assets/images/left_nav/ticket_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/left_nav/user_icon.svg b/web/src/assets/images/left_nav/user_icon.svg new file mode 100644 index 0000000000..59168ce8c5 --- /dev/null +++ b/web/src/assets/images/left_nav/user_icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/left_nav/warning_icon.svg b/web/src/assets/images/left_nav/warning_icon.svg new file mode 100644 index 0000000000..1a73864dd5 --- /dev/null +++ b/web/src/assets/images/left_nav/warning_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/logo-full.svg b/web/src/assets/logo-full.svg new file mode 100644 index 0000000000..c1419c9bca --- /dev/null +++ b/web/src/assets/logo-full.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/logo.jpeg b/web/src/assets/logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5be396f99fa7550fabc4cd2daf398ce96e25c935 GIT binary patch literal 2568 zcmcgoc{JPk7XL+T)dmqu5mX2zf?A4HOLatPF%nBH)lMz3g<7h$gg)JlwM8&U%%}#H zrlqyiP|JHlNuzCQDaor^LMg4Kk5@`29k1TZd*}W0{+Rnc-*fN%e9rmYdq0BLg13OI z6V?$6fIt8M5{}#io%TE($f2h1!4A2ZS18qC!d=DxCdWfWOTbQcyWJc}>v+upba6 zI4!{_ut!LWK*3PJ257b2S@M4rTFR_4GXw3r)tiT-e4u3+XDxe<|kEp9Knle6oSD7bW<9wE&n(a5M~?k&hwk zJLA{&@FgyoM4ysDgY&1`CW<=qa+|L*Z=Ze(%KPd87)VRB@Aq~S01{DX(Dc6Q63-m*k z&8au&>n2$k8R^s2R+K4591AFtH{Pun&qY!lAth5_S5C23QS%$COVcf z>Xzk+ZhDsKYPy0^4E1{KbkRt>$RK3$QACR~Z-5=rR%PA5P z+t%Q)VfZ(Kc3{oHxIulWTLwR+eyl;apFNrT(^S9X0Lh#Y_Y_z$__z5TQQ!&2@lGqp z>TbP8Zl|_wY^fDLI$Je<(!qz^jP!~@5Kb-!WnlR&l#xM}9mm&w?g2-&e~94Dc|;qj ze8LF|JXM@-O+3FE#!k7phS24*uV|0y*56`~4DcH#yceo)N2Z$|_U=1U7`jQlx9U#U zNc6qw#iRz&hofkbz@d}2yDEdH{qDy_8os&)agj}=`8LeooFn8TLsiLL#EKGc8g9#p zb~2P}|GtQUm+@3(o$KRJC9ws2_0OkuYS*rW#Jr=X^yelBuetgLLO=J zw_}-Sca9a8+1*kTr>S2MST1?bmr#iBGh>{c^C;Y1Z1hC84$;I)2xCkw6%AIFzDP@~ z7+rm+6W3!HawmnW%%qsMCdzip!v@t8w)7$`FU!XgL+d}-CA?cr4e&XH3ix;;8mv>6 zQ?+%@X4Yl{ra??G6962TiSn#V*+DXYp64*B46{SeBFYM`In2A$j55wNzw5;GdO3|b zT}9^57*8nexocQ*jg#?JzZo5JfI=p51x>3c9w}AzP+4@DKr8_XVnzU2%VX+ifLL$KFfI4I`W8l*nvB&AEe)ezo5@j zdVocJ=#0SrEao>`T+F)+h(35ZzcpGP&vE4mfM$8^gd5g|wX4mjF-TFz^B9K1(IQ|lz^eQ=* zXStoCFOLd^rlp$6`>UVUojIbEg)rLg_j1s`}iyEg?loVL~;t(ef}!BF@#eObz?W5<)P1*j$W z-f4DXT;9MGr3KOKD*$-Y4N|6eky6nyT!RC@GCqrCv z3!?F1&s+A*qw1fUN*k??Wd9PDZTZT1Vv(O(3df&GKeUF1U%7R6q{kCRNB*O7sGXnF Z6@N7CIWb%z``A99_Ny)bM}P$*zXIOQQFH(R literal 0 HcmV?d00001 diff --git a/web/src/assets/main.css b/web/src/assets/main.css new file mode 100644 index 0000000000..c133f9156b --- /dev/null +++ b/web/src/assets/main.css @@ -0,0 +1,35 @@ +@import "./base.css"; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git a/web/src/aws-exports.ts b/web/src/aws-exports.ts new file mode 100644 index 0000000000..c8dc7a584a --- /dev/null +++ b/web/src/aws-exports.ts @@ -0,0 +1,24 @@ +const config = { + aws_cognito_region: import.meta.env.VITE_COGNITO_REGION, + aws_user_pools_id: import.meta.env.VITE_USER_POOLS_ID, + aws_user_pools_web_client_id: import.meta.env.VITE_WEB_CLIENT_ID, + aws_cognito_identity_pool_id: + "us-west-2:c7bddace-7a1a-478e-87e7-a36e8d0db231", + aws_mobile_analytics_app_id: "ab7e9321f83c45a8967ff3b9bd90e83a", + aws_mobile_analytics_app_region: "us-west-2", + oauth: { + domain: import.meta.env.VITE_OAUTH_DOMAIN, + scope: [], + redirectSignIn: import.meta.env.VITE_REDIRECT_SIGNIN, + redirectSignOut: import.meta.env.VITE_REDIRECT_SIGNOUT, + responseType: "CODE", + }, + + openReplayKey: import.meta.env.VITE_OPENREPLAY_KEY, + sentryDSN: import.meta.env.VITE_SENTRY_DSN, + zincOxideEndPoint: import.meta.env.VITE_ZINC_OXIDE_ENDPOINT, + zincOxideIngestion: import.meta.env.VITE_ZINC_OXIDE_INGESTION, + zincQuotaThreshold: import.meta.env.VITE_ZINC_QUOTA_THRESHOLD, +}; + +export default config; diff --git a/web/src/components/ConfirmDialog.vue b/web/src/components/ConfirmDialog.vue new file mode 100644 index 0000000000..504e1d2f55 --- /dev/null +++ b/web/src/components/ConfirmDialog.vue @@ -0,0 +1,60 @@ + + + diff --git a/web/src/components/HighLight.vue b/web/src/components/HighLight.vue new file mode 100644 index 0000000000..e939beffdd --- /dev/null +++ b/web/src/components/HighLight.vue @@ -0,0 +1,129 @@ + + + + diff --git a/web/src/components/MenuLink.vue b/web/src/components/MenuLink.vue new file mode 100644 index 0000000000..0e1962c2a4 --- /dev/null +++ b/web/src/components/MenuLink.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/web/src/components/alerts/add.vue b/web/src/components/alerts/add.vue new file mode 100644 index 0000000000..e5acea609d --- /dev/null +++ b/web/src/components/alerts/add.vue @@ -0,0 +1,411 @@ + + + + + diff --git a/web/src/components/dashboards/AddUpdateDashboards.vue b/web/src/components/dashboards/AddUpdateDashboards.vue new file mode 100644 index 0000000000..fe7075cacb --- /dev/null +++ b/web/src/components/dashboards/AddUpdateDashboards.vue @@ -0,0 +1,153 @@ + + + diff --git a/web/src/components/ingestion/Curl.vue b/web/src/components/ingestion/Curl.vue new file mode 100644 index 0000000000..59db9628c4 --- /dev/null +++ b/web/src/components/ingestion/Curl.vue @@ -0,0 +1,87 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/ingestion/FluentBit.vue b/web/src/components/ingestion/FluentBit.vue new file mode 100644 index 0000000000..9eabf1a537 --- /dev/null +++ b/web/src/components/ingestion/FluentBit.vue @@ -0,0 +1,95 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/ingestion/Fluentd.vue b/web/src/components/ingestion/Fluentd.vue new file mode 100644 index 0000000000..7bdd2effec --- /dev/null +++ b/web/src/components/ingestion/Fluentd.vue @@ -0,0 +1,102 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/ingestion/Vector.vue b/web/src/components/ingestion/Vector.vue new file mode 100644 index 0000000000..35bcf9306a --- /dev/null +++ b/web/src/components/ingestion/Vector.vue @@ -0,0 +1,94 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/jstransform/add.vue b/web/src/components/jstransform/add.vue new file mode 100644 index 0000000000..c5a5385e35 --- /dev/null +++ b/web/src/components/jstransform/add.vue @@ -0,0 +1,321 @@ + + + + + diff --git a/web/src/components/logBarChart.vue b/web/src/components/logBarChart.vue new file mode 100644 index 0000000000..4bb1e4a2bf --- /dev/null +++ b/web/src/components/logBarChart.vue @@ -0,0 +1,119 @@ + + + \ No newline at end of file diff --git a/web/src/components/log_index/schema.vue b/web/src/components/log_index/schema.vue new file mode 100644 index 0000000000..04143ee9a2 --- /dev/null +++ b/web/src/components/log_index/schema.vue @@ -0,0 +1,330 @@ + + + + + diff --git a/web/src/components/shared/grid/NoData.vue b/web/src/components/shared/grid/NoData.vue new file mode 100644 index 0000000000..d752974047 --- /dev/null +++ b/web/src/components/shared/grid/NoData.vue @@ -0,0 +1,26 @@ + + + diff --git a/web/src/components/shared/grid/Pagination.vue b/web/src/components/shared/grid/Pagination.vue new file mode 100644 index 0000000000..95672a98ed --- /dev/null +++ b/web/src/components/shared/grid/Pagination.vue @@ -0,0 +1,242 @@ + + + + + + diff --git a/web/src/components/shared/grid/Table.vue b/web/src/components/shared/grid/Table.vue new file mode 100644 index 0000000000..3b692bead8 --- /dev/null +++ b/web/src/components/shared/grid/Table.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/web/src/components/shared/plotly/barchart.vue b/web/src/components/shared/plotly/barchart.vue new file mode 100644 index 0000000000..170a1c07f8 --- /dev/null +++ b/web/src/components/shared/plotly/barchart.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/web/src/components/shared/plotly/barchartMetrics.vue b/web/src/components/shared/plotly/barchartMetrics.vue new file mode 100644 index 0000000000..122901e66d --- /dev/null +++ b/web/src/components/shared/plotly/barchartMetrics.vue @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/web/src/components/shared/plotly/linechart.vue b/web/src/components/shared/plotly/linechart.vue new file mode 100644 index 0000000000..b05fbb1b21 --- /dev/null +++ b/web/src/components/shared/plotly/linechart.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/web/src/components/shared/plotly/panelcontainer.vue b/web/src/components/shared/plotly/panelcontainer.vue new file mode 100644 index 0000000000..487600d451 --- /dev/null +++ b/web/src/components/shared/plotly/panelcontainer.vue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/shared/plotly/panelheader.vue b/web/src/components/shared/plotly/panelheader.vue new file mode 100644 index 0000000000..d4f361eb97 --- /dev/null +++ b/web/src/components/shared/plotly/panelheader.vue @@ -0,0 +1,95 @@ + + + \ No newline at end of file diff --git a/web/src/components/shared/plotly/tablechart.vue b/web/src/components/shared/plotly/tablechart.vue new file mode 100644 index 0000000000..73e1222c32 --- /dev/null +++ b/web/src/components/shared/plotly/tablechart.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/web/src/components/tickets/AddUpdateTicket.vue b/web/src/components/tickets/AddUpdateTicket.vue new file mode 100644 index 0000000000..180244c257 --- /dev/null +++ b/web/src/components/tickets/AddUpdateTicket.vue @@ -0,0 +1,343 @@ + + + + + diff --git a/web/src/components/tickets/TicketAttachments.vue b/web/src/components/tickets/TicketAttachments.vue new file mode 100644 index 0000000000..684a5a9d8e --- /dev/null +++ b/web/src/components/tickets/TicketAttachments.vue @@ -0,0 +1,62 @@ + + + diff --git a/web/src/components/users/UpdateRole.vue b/web/src/components/users/UpdateRole.vue new file mode 100644 index 0000000000..082242e5d3 --- /dev/null +++ b/web/src/components/users/UpdateRole.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/web/src/composables/useLogs.ts b/web/src/composables/useLogs.ts new file mode 100644 index 0000000000..b069322cb9 --- /dev/null +++ b/web/src/composables/useLogs.ts @@ -0,0 +1,119 @@ +import { reactive } from "vue"; +import { useLocalLogsObj } from "../utils/zincutils"; + +const defaultObject = { + organizationIdetifier: "", + runQuery: false, + loading: false, + + config: { + splitterModel: 20, + lastSplitterPosition:0, + splitterLimit: [0, 40], + refreshTimes: [ + [ + { label: "5 sec", value: 5 }, + { label: "1 min", value: 60 }, + { label: "1 hr", value: 3600 }, + ], + [ + { label: "10 sec", value: 10 }, + { label: "5 min", value: 300 }, + { label: "2 hr", value: 7200 }, + ], + [ + { label: "15 sec", value: 15 }, + { label: "15 min", value: 900 }, + { label: "1 day", value: 86400 }, + ], + [ + { label: "30 sec", value: 30 }, + { label: "30 min", value: 1800 }, + ], + ], + + }, + meta: { + refreshInterval: "0", + refreshIntervalLabel: "Off", + showFields: true, + showQuery: true, + showHistogram: true, + showDetailTab: false, + sqlMode: false, + resultGrid: { + wrapCells: false, + manualRemoveFields: false, + rowsPerPage: 1000, + chartInterval: "1 second", + chartKeyFormat: "HH:mm:ss", + navigation: { + currentRowIndex: 0, + } + }, + scrollInfo:{} + }, + data: { + query: "", + parsedQuery: {}, + errorMsg:"", + stream: { + streamLists: [], + selectedStream: "", + selectedStreamFields: [], + selectedFields: [], + filterField: "", + addToFilter: "", + functions: [], + }, + resultGrid: { + currentDateTime: new Date(), + currentPage:0, + columns: [], + }, + transforms: [], + queryResults: [], + sortedQueryResults: [], + streamResults: [], + histogram: {}, + editorValue: "", + datetime: { + tab: "relative", + relative: { + period: { + label: "Minutes", + value: "Minutes", + }, + value: 15, + }, + absolute: { + date: { + from: "", + to: "", + }, + startTime: "00:00", + endTime: "23:59" + } + } + } +} + +// let searchObj = reactive(structuredClone(defaultObject)); +// let localLogsObj:any = useLocalLogsObj(); +// let searchObj = {}; +// if (typeof localLogsObj === "object") { + // searchObj = localLogsObj.value; +// } else { + let searchObj = reactive(Object.assign({}, defaultObject)); +// } + +const useLogs = () => { + const resetSearchObj = () => { + // delete searchObj.data; + searchObj = reactive(Object.assign({}, defaultObject)); + + } + return { searchObj , resetSearchObj }; +} + +export default useLogs; \ No newline at end of file diff --git a/web/src/constants/config.ts b/web/src/constants/config.ts new file mode 100644 index 0000000000..2b74ad076a --- /dev/null +++ b/web/src/constants/config.ts @@ -0,0 +1,9 @@ +export const config = { + userPoolsId : import.meta.env.VITE_USER_POOLS_ID, + webClientId : import.meta.env.VITE_WEB_CLIENT_ID, + oAuthDomain : import.meta.env.VITE_OAUTH_DOMAIN, + redirectSignIn: import.meta.env.VITE_REDIRECT_SIGNIN, + redirectSignOut: import.meta.env.VITE_REDIRECT_SIGNOUT, + responseType: "CODE", + scope: "", +}; diff --git a/web/src/constants/key.ts b/web/src/constants/key.ts new file mode 100644 index 0000000000..29304d9941 --- /dev/null +++ b/web/src/constants/key.ts @@ -0,0 +1,9 @@ +const Keys = { + sidebarStatusKey: "vue3-typescript-admin-sidebarStatusKey", + languageKey: "vue3-typescript-admin-languageKey", + sizeKey: "vue3-typescript-admin-sizeKey", + tokenKey: "vue3-typescript-admin-access-token", + aseKey: "vue3-typescript-admin-ase-key", +}; + +export default Keys; diff --git a/web/src/layouts/MainLayout.vue b/web/src/layouts/MainLayout.vue new file mode 100644 index 0000000000..8f66622ac5 --- /dev/null +++ b/web/src/layouts/MainLayout.vue @@ -0,0 +1,804 @@ + + + + + diff --git a/web/src/locales/index.ts b/web/src/locales/index.ts new file mode 100644 index 0000000000..2aa10f5575 --- /dev/null +++ b/web/src/locales/index.ts @@ -0,0 +1,45 @@ +import { createI18n } from "vue-i18n"; // import from runtime only +import { getLanguage } from "../utils/cookies"; + +// User defined lang +import zhLocale from "./languages/zh.json"; +import enLocale from "./languages/en.json"; +import trLocale from "./languages/tr.json"; + + +const messages = { + "en-gb": { + ...enLocale, + }, + "zh-cn": { + ...zhLocale, + }, + "tr-turk": { + ...trLocale, + }, +}; + +export const getLocale = () => { + const cookieLanguage = getLanguage(); + if (cookieLanguage) { + return cookieLanguage; + } + const language = navigator.language.toLowerCase(); + const locales = Object.keys(messages); + for (const locale of locales) { + if (language.indexOf(locale) > -1) { + return locale; + } + } + + // Default language is English + return "en-gb"; +}; + +const i18n = createI18n({ + locale: getLocale(), + fallbackLocale: "en-gb", + messages: messages, +}); + +export default i18n; diff --git a/web/src/locales/languages/en.json b/web/src/locales/languages/en.json new file mode 100644 index 0000000000..3cc6ca1a62 --- /dev/null +++ b/web/src/locales/languages/en.json @@ -0,0 +1,265 @@ +{ + "search": { + "selectIndex": "Select Stream First", + "typeSearch": "Type your search query here", + "searchField": "Search for a field", + "maxRecords": "Max records to return", + "searchResult": "Search Results", + "resultsFound": "Results found", + "timestamp": "timestamp", + "source": "_source", + "noResult": "No Result", + "syntaxGuide": "Syntax guide", + "recordsPerPage": "Records per page", + "showing": "Showing", + "of": "of", + "rowDetail": "Source Details", + "sourceName": "Name", + "sourceValue": "Value", + "searchStream": "Search Stream", + "showQueryLabel": "Query", + "showFieldLabel": "Fields", + "showHistogramLabel": "Histogram", + "sqlModeLabel": "SQL Mode" + }, + "menu": { + "home": "Home", + "about": "About", + "user": "Users", + "index": "Streams", + "search": "Logs", + "template": "Template", + "signOut": "Sign Out", + "account": "Account", + "feedback": "Feedback", + "zincSearch": "ZincSearch", + "documentation": "Docs", + "openapi": "OpenAPI", + "tickets": "Ticket", + "organizations": "Organizations", + "function": "Functions", + "ingestion": "Ingestion", + "metrics": "Metrics", + "slack": "Help", + "dashboard": "Dashboard", + "alerts": "Alerts" + }, + "about": { + "name": "Zinc", + "introduction": "The modern open source search engine." + }, + "login": { + "userid": "User ID", + "userEmail": "User Email", + "signIn": "Sign In", + "signUp": "Sign Up", + "password": "Password", + "cnfpassword": "Confirm Password", + "singnInWithGoogle": "Continue with Google" + }, + "user": { + "header": "Organization Member", + "id": "User ID", + "name": "User name", + "role": "Role", + "CREATED": "CREATED", + "UPDATED": "UPDATED", + "password": "Password", + "repassword": "Reconfirm Password", + "addOrUpdate": "Add/Update User", + "editUser": "Update User", + "add": "Add User", + "search": "Search User", + "createdAt": "Updated at", + "updatedAt": "Created at", + "status": "Status", + "ID": "id", + "email": "Email", + "cognitoSub": "Cognito_sub", + "firstName": "First Name", + "lastName": "Last Name", + "actions": "Actions", + "memberCreated": "Member Created", + "memberUpdated": "Member Updated", + "updateRole": "Update Role", + "orgMemberId": "Organization Member ID", + "view": "View", + "update": "Update", + "delete": "Delete", + "confirmDeleteHead": "Delete User", + "confirmDeleteMsg": "Are you sure that you want to delete this user?", + "cancel": "Cancel", + "save": "Save", + "ok": "Ok", + "updatenotallowed": "Update not allowed for owner", + "sendInvite": "Send Invite", + "inviteByEmail": "Invite by email. Multiple emails seperated by semicolon(;)", + "inviteByEmailHint": "You'll be charged a prorated amount for adding a member.", + "admin": "admin", + "member": "member" + }, + "ticket": { + "header": "Support Tickets", + "add": "Add Ticket", + "save": "Save", + "update": "Update", + "delete": "Delete Ticket", + "search": "Search Ticket", + "subject": "Subject", + "description": "Description", + "id": "Ticket Id", + "createdAt": "Created at", + "updatedAt": "Updated at", + "status": "Status", + "comments": "Comments", + "addComments": "Add comments", + "attachments": "Attachments", + "noDataErrorMsg": "No Data Available", + "createTicket": "Create Ticket", + "updateTicket": "Update Ticket", + "inputTextHolder": "Type here", + "selectHolder": "Select", + "cancel": "Cancel" + }, + "organization": { + "header": "Organizations", + "orgName": "Organization Name", + "createOrganization": "Create Organization", + "updateOrganization": "Update Organization", + "nameHolder": "Type name here", + "add": "Add Organization", + "save": "Save", + "cancel": "Cancel", + "delete": "Delete Organization", + "search": "Search Organization", + "subject": "Subject", + "description": "Description", + "id": "Organization Id", + "createdAt": "Created at", + "updatedAt": "Updated at", + "status": "Status", + "invite": "Invite Teammate", + "name": "Name", + "type": "Type", + "owner": "Owner", + "created": "Created", + "actions": "Actions", + "emailLabel": "Enter Email ID", + "emailHolder": "Type Email ID here", + "note": "Note: Press enter to add multiple teammates.", + "identifier": "Identifier", + "copyapikey": "Copy API Key", + "getapikey": "Get API Key", + "role": "Role", + "nameRequired": "Name is required" + }, + "template": { + "header": "Templates", + "add": "Add Template", + "search": "Search Template" + }, + "logindex": { + "header": "Streams", + "search": "Search Stream", + "name": "Name", + "docNum": "Doc Num", + "storageSize": "Ingested Data", + "compressedSize": "Compressed Size", + "time": "Time", + "storageType": "Storage Type", + "shardNum": "Shard Number", + "schemaHeader": "Stream Detail", + "streamSettings": "Stream Settings", + "streamPartitionKey": "Partition Key", + "streamftsKey": "Full Text Search Key", + "delete": "Delete", + "deleteIndex": "Delete Stream", + "confirmDeleteHead": "Delete Stream", + "confirmDeleteMsg": "Are you sure that you want to delete this Stream?", + "cancel": "Cancel", + "ok": "Ok", + "docsCount": "Docs Count", + "mapping": "Mapping", + "propertyName": "Property Name", + "propertyType": "Property Type", + "type": "Type", + "refreshStats": "Refresh Stats", + "updateSettings": "Update Settings" + }, + "jstransform": { + "header": "Functions", + "add": "Create new function", + "search": "Search Function", + "name": "Name", + "function": "Function Detail", + "save": "Save", + "jsfunction": "Function", + "stream_name": "Stream Name", + "order": "Order", + "ingest": "Is Ingest Time Function?", + "actions": "Actions", + "cancel": "Cancel", + "addTitle": "Add Function", + "updateTitle": "Update Function", + "delete": "Delete", + "ok": "Ok", + "type": "Function Type" + }, + "confirmDialog": { + "cancel": "Cancel", + "ok": "Ok" + }, + "ingestion": { + "header": "Ingestion", + "passwordLabel": "Reset Password" + }, + "dashboard": { + "header": "Dashboards", + "add": "Add Dashboard", + "save": "Save", + "cancel": "Cancel", + "delete": "Delete Dashboard", + "search": "Search Dashboard", + "name": "Name of Dashboard", + "typeDesc": "Type Description of Dashboard", + "createdashboard": "Create a New Dashboard", + "nameHolder": "Enter Name of New Dashboard", + "typeHolder": "Enter Type Description of New Dashboard" + }, + "panel": { + "header": "Panel", + "add": "Add Panel", + "save": "Save", + "cancel": "Cancel", + "delete": "Delete Panel", + "search": "Search Panel", + "name": "Name of Panel", + "typeDesc": "Description", + "createdashboard": "Create a New Panel", + "nameHolder": "Enter Name of New Panel", + "typeHolder": "Enter Type Description of New Panel", + "editPanel": "Edit Panel" + }, + "alerts": { + "header": "Alerts", + "add": "Add alert", + "search": "Search alert", + "name": "Name", + "function": "Alert Details", + "save": "Save", + "sql": "Query", + "realTime": "Real Time", + "scheduled": "Scheduled", + "duration": "Duration for which alert is evaluated", + "condition": "Condition", + "interval": "Frequency at which alert is evaluated", + "delayNotificationUntil": "Delay notification until, after one notification", + "destination": "Destination", + "stream_name": "Stream Name", + "actions": "Actions", + "cancel": "Cancel", + "addTitle": "Add Alert", + "updateTitle": "Update Alert", + "delete": "Delete" + } +} \ No newline at end of file diff --git a/web/src/locales/languages/tr.json b/web/src/locales/languages/tr.json new file mode 100644 index 0000000000..539b77e6b3 --- /dev/null +++ b/web/src/locales/languages/tr.json @@ -0,0 +1,265 @@ +{ + "search": { + "selectIndex": "Önce Akışı Seçin", + "typeSearch": "Arama sorgunuzu buraya yazın", + "searchField": "Alan ara", + "maxRecords": "İade etmek için maksimum kayıt", + "searchResult": "Arama Sonuçları", + "resultsFound": "Sonuçlar bulundu", + "timestamp": "zaman damgası", + "source": "_source", + "noResult": "Sonuç Yok", + "syntaxGuide": "Sözdizimi kılavuzu", + "recordsPerPage": "Sayfa başına kayıt", + "showing": "Gösterme", + "of": "dan", + "rowDetail": "Kaynak Detayları", + "sourceName": "İsim", + "sourceValue": "Değer", + "searchStream": "Arama Akışı", + "showQueryLabel": "Sorgu", + "showFieldLabel": "Alanlar", + "showHistogramLabel": "Histogram", + "sqlModeLabel": "SQL Modu" + }, + "menu": { + "home": "Ana Sayfa", + "about": "Hakkında", + "user": "Kullanıcılar", + "index": "Akarsular", + "search": "Günlükleri", + "template": "Şablon", + "signOut": "Oturumu Çık", + "account": "Hesap", + "feedback": "Geribildirim", + "zincSearch": "ÇinkoSearch", + "documentation": "Dokümanlar", + "openapi": "OpenAPI", + "tickets": "Bilet", + "organizations": "Organizasyonlar", + "function": "Fonksiyonlar", + "ingestion": "Yutulması", + "metrics": "Metrikler", + "slack": "Yardım", + "dashboard": "Gösterge Tablosu", + "alerts": "Uyarılar" + }, + "about": { + "name": "Çinko", + "introduction": "Modern açık kaynak arama motoru." + }, + "login": { + "userid": "Kullanıcı Kimliği", + "userEmail": "Kullanıcı E-postası", + "signIn": "Oturum Aç", + "signUp": "Kaydolun", + "password": "Şifre", + "cnfpassword": "Şifreyi Onayla", + "singnInWithGoogle": "Google ile devam" + }, + "user": { + "header": "Organizasyon Üyesi", + "id": "Kullanıcı Kimliği", + "name": "Kullanıcı adı", + "role": "Rol", + "CREATED": "YARATILDI", + "UPDATED": "GÜNCELLENMİŞ", + "password": "Şifre", + "repassword": "Şifreyi Tekrar Onayla", + "addOrUpdate": "Kullanıcı Ekle/Güncelle", + "editUser": "Kullanıcıyı Güncelle", + "add": "Kullanıcı Ekle", + "search": "Kullanıcı Ara", + "createdAt": "Tarihinde güncellendi", + "updatedAt": "Oluşturuldu", + "status": "Durum", + "ID": "id", + "email": "E-Posta", + "cognitoSub": "Cognito_sub", + "firstName": "İsim", + "lastName": "Soyadı", + "actions": "Eylemler", + "memberCreated": "Üye Oluşturuldu", + "memberUpdated": "Üye Güncellendi", + "updateRole": "Rolü Güncelle", + "orgMemberId": "Kuruluş Üye Kimliği", + "view": "Görüntüle", + "update": "Güncelleme", + "delete": "Sil", + "confirmDeleteHead": "Kullanıcıyı Sil", + "confirmDeleteMsg": "Bu kullanıcıyı silmek istediğinizden emin misiniz?", + "cancel": "İptal", + "save": "Kaydet", + "ok": "Tamam", + "updatenotallowed": "Sahibi için güncellemeye izin verilmiyor", + "sendInvite": "Davet Gönder", + "inviteByEmail": "E-posta ile davet et. Noktalı virgül ile ayrı birden fazla e-posta (;)", + "inviteByEmailHint": "Üye eklemek için orantılı bir miktar tahsil edilecektir.", + "admin": "yönetici", + "member": "üye" + }, + "ticket": { + "header": "Destek Talepleri", + "add": "Bilet Ekle", + "save": "Kaydet", + "update": "Güncelleme", + "delete": "Bilet Sil", + "search": "Bilet Ara", + "subject": "Konu", + "description": "Tanım", + "id": "Bilet Kimliği", + "createdAt": "Oluşturuldu", + "updatedAt": "Tarihinde güncellendi", + "status": "Durum", + "comments": "Yorumlar", + "addComments": "Yorum ekle", + "attachments": "Ekler", + "noDataErrorMsg": "Mevcut Veri Yok", + "createTicket": "Bilet Oluştur", + "updateTicket": "Bilet Güncelle", + "inputTextHolder": "Buraya yazın", + "selectHolder": "Seç", + "cancel": "İptal" + }, + "organization": { + "header": "Organizasyonlar", + "orgName": "Kuruluş Adı", + "createOrganization": "Organizasyon Oluştur", + "updateOrganization": "Kuruluşu Güncelle", + "nameHolder": "Adı buraya yazın", + "add": "Organizasyon Ekle", + "save": "Kaydet", + "cancel": "İptal", + "delete": "Kuruluşu Sil", + "search": "Arama Organizasyonu", + "subject": "Konu", + "description": "Tanım", + "id": "Organizasyon Kimliği", + "createdAt": "Oluşturuldu", + "updatedAt": "Tarihinde güncellendi", + "status": "Durum", + "invite": "Takım Arkadaşını Davet Et", + "name": "İsim", + "type": "Tip", + "owner": "Sahibi", + "created": "Oluşturuldu", + "actions": "Eylemler", + "emailLabel": "E-posta Kimliğini Girin", + "emailHolder": "Buraya E-posta Kimliği yazın", + "note": "Not: Birden fazla takım arkadaşı eklemek için enter tuşuna basın.", + "identifier": "Tanımlayıcı", + "copyapikey": "API Anahtarını Kopyala", + "getapikey": "API Anahtarını Al", + "role": "Rol", + "nameRequired": "İsim gereklidir" + }, + "template": { + "header": "Şablonlar", + "add": "Şablon Ekle", + "search": "Arama Şablonu" + }, + "logindex": { + "header": "Akarsular", + "search": "Arama Akışı", + "name": "İsim", + "docNum": "Doktor Num", + "storageSize": "Yutulan Veriler", + "compressedSize": "Sıkıştırılmış Boyut", + "time": "Zaman", + "storageType": "Depolama Tipi", + "shardNum": "Shard Numarası", + "schemaHeader": "Akış Detayı", + "streamSettings": "Akış Ayarları", + "streamPartitionKey": "Bölme Anahtarı", + "streamftsKey": "Tam Metin Arama Anahtarı", + "delete": "Sil", + "deleteIndex": "Akışı Sil", + "confirmDeleteHead": "Akışı Sil", + "confirmDeleteMsg": "Bu Akışı silmek istediğinizden emin misiniz?", + "cancel": "İptal", + "ok": "Tamam", + "docsCount": "Dokümanlar Sayısı", + "mapping": "Haritalama", + "propertyName": "Mülkiyet Adı", + "propertyType": "Emlak Tipi", + "type": "Tip", + "refreshStats": "İstatistikleri Yenile", + "updateSettings": "Ayarları Güncelle" + }, + "jstransform": { + "header": "Fonksiyonlar", + "add": "Yeni işlev oluştur", + "search": "Arama İşlevi", + "name": "İsim", + "function": "İşlev Detayı", + "save": "Kaydet", + "jsfunction": "İşlev", + "stream_name": "Akış Adı", + "order": "Sipariş", + "ingest": "Yutma Süresi İşlevi mi?", + "actions": "Eylemler", + "cancel": "İptal", + "addTitle": "İşlev Ekle", + "updateTitle": "Güncelleme İşlevi", + "delete": "Sil", + "ok": "Tamam", + "type": "İşlev Türü" + }, + "confirmDialog": { + "cancel": "İptal", + "ok": "Tamam" + }, + "ingestion": { + "header": "Yutulması", + "passwordLabel": "Şifreyi sıfırla" + }, + "dashboard": { + "header": "Gösterge Tabloları", + "add": "Gösterge Tablosu Ekle", + "save": "Kaydet", + "cancel": "İptal", + "delete": "Gösterge Tablosunu Sil", + "search": "Arama Panosu", + "name": "Gösterge Tablosunun Adı", + "typeDesc": "Gösterge Tablosunun Tip Açıklaması", + "createdashboard": "Yeni Bir Gösterge Tablosu Oluşturun", + "nameHolder": "Yeni Gösterge Tablosunun Adını Girin", + "typeHolder": "Yeni Gösterge Tablosunun Tip Açıklamasını Girin" + }, + "panel": { + "header": "Panel", + "add": "Panel Ekle", + "save": "Kaydet", + "cancel": "İptal", + "delete": "Paneli Sil", + "search": "Arama Paneli", + "name": "Panelin Adı", + "typeDesc": "Tanım", + "createdashboard": "Yeni Panel Oluşturma", + "nameHolder": "Yeni Panelin Adını Girin", + "typeHolder": "Yeni Panelin Tip Açıklamasını Girin", + "editPanel": "Paneli Düzenle" + }, + "alerts": { + "header": "Uyarılar", + "add": "Uyarı ekle", + "search": "Arama uyarısı", + "name": "İsim", + "function": "Uyarı Ayrıntıları", + "save": "Kaydet", + "sql": "Sorgu", + "realTime": "Gerçek Zamanlı", + "scheduled": "Planlanmış", + "duration": "Uyarının değerlendirildiği süre", + "condition": "Koşul", + "interval": "Uyarının değerlendirilme sıklığı", + "delayNotificationUntil": "Bir bildirimden sonra bildirimi geciktirin", + "destination": "Hedef", + "stream_name": "Akış Adı", + "actions": "Eylemler", + "cancel": "İptal", + "addTitle": "Uyarı Ekle", + "updateTitle": "Güncelleme Uyarısı", + "delete": "Sil" + } +} \ No newline at end of file diff --git a/web/src/locales/languages/zh.json b/web/src/locales/languages/zh.json new file mode 100644 index 0000000000..741c1f0781 --- /dev/null +++ b/web/src/locales/languages/zh.json @@ -0,0 +1,265 @@ +{ + "search": { + "selectIndex": "选择数据流", + "typeSearch": "查询", + "searchField": "搜索字段", + "maxRecords": "返回的最大记录数", + "searchResult": "搜索结果", + "resultsFound": "找到结果", + "timestamp": "时间", + "source": "源数据", + "noResult": "没有结果", + "syntaxGuide": "语法提示", + "recordsPerPage": "每页记录数", + "showing": "显示", + "of": "的", + "rowDetail": "详情", + "sourceName": "字段", + "sourceValue": "值", + "searchStream": "搜索数据流", + "showQueryLabel": "查询", + "showFieldLabel": "字段", + "showHistogramLabel": "直方图", + "sqlModeLabel": "SQL 模式" + }, + "menu": { + "home": "主页", + "about": "关于", + "user": "用户", + "index": "数据流", + "search": "日志", + "template": "模板", + "signOut": "退出", + "account": "账户", + "feedback": "反馈", + "zincSearch": "zincSearch", + "documentation": "文档", + "openapi": "OpenAPI", + "tickets": "工单", + "organizations": "组织", + "function": "函数", + "ingestion": "采集", + "metrics": "指标", + "slack": "Slack", + "dashboard": "仪表板", + "alerts": "告警" + }, + "about": { + "name": "ZincObserve", + "introduction": "现代开源搜索引擎。" + }, + "login": { + "userid": "账号", + "userEmail": "邮箱", + "signIn": "登录", + "signUp": "注册", + "password": "密码", + "cnfpassword": "确认密码", + "singnInWithGoogle": "继续使用谷歌" + }, + "user": { + "header": "组织成员", + "id": "ID", + "name": "用户名", + "role": "角色", + "CREATED": "已创建", + "UPDATED": "已更新", + "password": "密码", + "repassword": "再次确认密码", + "addOrUpdate": "添加/更新用户", + "editUser": "更新用户", + "add": "添加用户", + "search": "搜索用户", + "createdAt": "更新于", + "updatedAt": "创建于", + "status": "状态", + "ID": "ID", + "email": "电子邮件", + "cognitoSub": "cognito_sub", + "firstName": "名字", + "lastName": "姓氏", + "actions": "操作", + "memberCreated": "成员已创建", + "memberUpdated": "成员已更新", + "updateRole": "更新角色", + "orgMemberId": "组织成员 ID", + "view": "查看", + "update": "更新", + "delete": "删除", + "confirmDeleteHead": "删除用户", + "confirmDeleteMsg": "您确定要删除此用户吗?", + "cancel": "取消", + "save": "保存", + "ok": "确定", + "updatenotallowed": "不允许所有者更新", + "sendInvite": "发送邀请", + "inviteByEmail": "通过电子邮件邀请。用分号 (;) 分隔的多封电子邮件", + "inviteByEmailHint": "添加成员将按比例向您收取一定的费用。", + "admin": "管理员", + "member": "用户" + }, + "ticket": { + "header": "工单", + "add": "添加工单", + "save": "保存", + "update": "更新", + "delete": "删除工单", + "search": "搜索工单", + "subject": "主题", + "description": "描述", + "id": "工单编号", + "createdAt": "创建于", + "updatedAt": "更新于", + "status": "状态", + "comments": "评论意见", + "addComments": "添加评论", + "attachments": "附件", + "noDataErrorMsg": "没有可用的数据", + "createTicket": "创建票证", + "updateTicket": "更新工单", + "inputTextHolder": "在这里输入", + "selectHolder": "选择", + "cancel": "取消" + }, + "organization": { + "header": "组织", + "orgName": "组织名称", + "createOrganization": "创建组织", + "updateOrganization": "更新组织", + "nameHolder": "在此处键入名称", + "add": "添加组织", + "save": "保存", + "cancel": "取消", + "delete": "删除组织", + "search": "搜索组织", + "subject": "主题", + "description": "描述", + "id": "组织编号", + "createdAt": "创建于", + "updatedAt": "更新于", + "status": "状态", + "invite": "邀请成员", + "name": "名称", + "type": "类型", + "owner": "所有者", + "created": "已创建", + "actions": "操作", + "emailLabel": "输入电子邮件 ID", + "emailHolder": "在此处键入电子邮件 ID", + "note": "注意:按 Enter 键添加多个队友。", + "identifier": "标识符", + "copyapikey": "复制 API 密钥", + "getapikey": "获取 API 密钥", + "role": "角色", + "nameRequired": "名称为必填项" + }, + "template": { + "header": "模板", + "add": "添加模板", + "search": "搜索模板" + }, + "logindex": { + "header": "数据流", + "search": "搜索数据流", + "name": "名称", + "docNum": "文档编号", + "storageSize": "采集的数据大小", + "compressedSize": "压缩后的大小", + "time": "时间", + "storageType": "存储类型", + "shardNum": "分片编号", + "schemaHeader": "数据流详情", + "streamSettings": "数据流设置", + "streamPartitionKey": "分区字段", + "streamftsKey": "全文搜索密钥", + "delete": "删除", + "deleteIndex": "删除数据流", + "confirmDeleteHead": "删除数据流", + "confirmDeleteMsg": "你确定要删除这个数据流吗?", + "cancel": "取消", + "ok": "确定", + "docsCount": "文档数", + "mapping": "映射", + "propertyName": "属性名称", + "propertyType": "属性类型", + "type": "类型", + "refreshStats": "刷新统计数据", + "updateSettings": "更新设置" + }, + "jstransform": { + "header": "函数", + "add": "创建新函数", + "search": "搜索函数", + "name": "名称", + "function": "功能细节", + "save": "保存", + "jsfunction": "函数", + "stream_name": "数据流名称", + "order": "编号", + "ingest": "是采集函数吗?", + "actions": "操作", + "cancel": "取消", + "addTitle": "添加函数", + "updateTitle": "更新函数", + "delete": "删除", + "ok": "确定", + "type": "函数类型" + }, + "confirmDialog": { + "cancel": "取消", + "ok": "确定" + }, + "ingestion": { + "header": "摄入", + "passwordLabel": "重置密码" + }, + "dashboard": { + "header": "仪表板", + "add": "添加仪表板", + "save": "保存", + "cancel": "取消", + "delete": "删除控制面板", + "search": "搜索控制面板", + "name": "仪表板的名称", + "typeDesc": "仪表板的类型描述", + "createdashboard": "创建新仪表板", + "nameHolder": "输入新仪表板的名称", + "typeHolder": "输入新仪表板的类型描述" + }, + "panel": { + "header": "小组", + "add": "添加面板", + "save": "保存", + "cancel": "取消", + "delete": "删除面板", + "search": "搜索面板", + "name": "小组名称", + "typeDesc": "描述", + "createdashboard": "创建新面板", + "nameHolder": "输入新面板的名称", + "typeHolder": "输入新面板的类型描述", + "editPanel": "编辑面板" + }, + "alerts": { + "header": "告警", + "add": "添加告警", + "search": "搜索告警", + "name": "名称", + "function": "告警详情", + "save": "保存", + "sql": "查询", + "realTime": "实时", + "scheduled": "已计划", + "duration": "评估告警的持续时间", + "condition": "条件", + "interval": "评估告警的频率", + "delayNotificationUntil": "延迟通知,直到收到一次通知之后", + "destination": "通知目标", + "stream_name": "数据流名称", + "actions": "操作", + "cancel": "取消", + "addTitle": "添加告警", + "updateTitle": "更新告警", + "delete": "删除" + } +} \ No newline at end of file diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000000..6a0cc68945 --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,54 @@ +import { createApp } from "vue"; +import { Notify, Dialog, Quasar } from "quasar"; +import "quasar/src/css/index.sass"; +import "@quasar/extras/roboto-font/roboto-font.css"; +import "@quasar/extras/material-icons/material-icons.css"; + +import * as Sentry from "@sentry/vue"; +import { BrowserTracing } from "@sentry/tracing"; + +import store from "./stores"; +import App from "./App.vue"; +import createRouter from "./router"; +import i18n from "./locales"; +import "./styles/quasar-overrides.scss"; +// import { config } from "process"; +// import { config } from "./constants/config"; +import config from "./aws-exports"; +import SearchPlugin from "./plugins/index"; + +const app = createApp(App); + +const router = createRouter(store); + +Sentry.init({ + app, + dsn: config.sentryDSN, + integrations: [ + new BrowserTracing({ + routingInstrumentation: Sentry.vueRouterInstrumentation(router), + tracingOrigins: [ + "localhost", + "alpha1.cloud.zinclabs.dev", + "cloud.zincsearch.com", + /^\//, + ], + }), + ], + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: 1.0, +}); + +app + .use(Quasar, { + plugins: [Dialog, Notify], // import Quasar plugins and add here + }) + .use(i18n); + +// const router = createRouter(store); +app.use(store).use(router); +app.use(SearchPlugin); + +app.mount("#app"); diff --git a/web/src/plugins/index.ts b/web/src/plugins/index.ts new file mode 100644 index 0000000000..07bd64d841 --- /dev/null +++ b/web/src/plugins/index.ts @@ -0,0 +1,6 @@ +import Logs from "./logs/Index.vue"; +export default { + install: (app:any, options:any) => { + app.component("zinc-logs", Logs); + } +} \ No newline at end of file diff --git a/web/src/plugins/logs/DateTime.vue b/web/src/plugins/logs/DateTime.vue new file mode 100644 index 0000000000..f6efa06cb0 --- /dev/null +++ b/web/src/plugins/logs/DateTime.vue @@ -0,0 +1,539 @@ + + + + + diff --git a/web/src/plugins/logs/DetailTable.vue b/web/src/plugins/logs/DetailTable.vue new file mode 100644 index 0000000000..05aa650cae --- /dev/null +++ b/web/src/plugins/logs/DetailTable.vue @@ -0,0 +1,334 @@ + + + + + diff --git a/web/src/plugins/logs/Index.vue b/web/src/plugins/logs/Index.vue new file mode 100644 index 0000000000..92c4455474 --- /dev/null +++ b/web/src/plugins/logs/Index.vue @@ -0,0 +1,1033 @@ + + + + + + + diff --git a/web/src/plugins/logs/IndexList.vue b/web/src/plugins/logs/IndexList.vue new file mode 100644 index 0000000000..30a5939d2b --- /dev/null +++ b/web/src/plugins/logs/IndexList.vue @@ -0,0 +1,355 @@ + + + + + diff --git a/web/src/plugins/logs/QueryEditor.vue b/web/src/plugins/logs/QueryEditor.vue new file mode 100644 index 0000000000..e25fc664fc --- /dev/null +++ b/web/src/plugins/logs/QueryEditor.vue @@ -0,0 +1,316 @@ + + + + + diff --git a/web/src/plugins/logs/RefreshInterval.vue b/web/src/plugins/logs/RefreshInterval.vue new file mode 100644 index 0000000000..62f64a33b4 --- /dev/null +++ b/web/src/plugins/logs/RefreshInterval.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/web/src/plugins/logs/SearchBar.vue b/web/src/plugins/logs/SearchBar.vue new file mode 100644 index 0000000000..5216eadf59 --- /dev/null +++ b/web/src/plugins/logs/SearchBar.vue @@ -0,0 +1,385 @@ + + + + + diff --git a/web/src/plugins/logs/SearchResult.vue b/web/src/plugins/logs/SearchResult.vue new file mode 100644 index 0000000000..9f02959f73 --- /dev/null +++ b/web/src/plugins/logs/SearchResult.vue @@ -0,0 +1,395 @@ + + + + + + + diff --git a/web/src/plugins/logs/SyntaxGuide.vue b/web/src/plugins/logs/SyntaxGuide.vue new file mode 100644 index 0000000000..0097b9a43d --- /dev/null +++ b/web/src/plugins/logs/SyntaxGuide.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/web/src/router/index.ts b/web/src/router/index.ts new file mode 100644 index 0000000000..eb4b36ffbf --- /dev/null +++ b/web/src/router/index.ts @@ -0,0 +1,250 @@ +import { createRouter, createWebHistory } from "vue-router"; +import Login from "../views/Login.vue"; +import Home from "../views/HomeView.vue"; +import Tickets from "../views/TicketsView.vue"; +import Users from "../views/User.vue"; +import About from "../views/About.vue"; +import Dashboard from "../views/Dashboard.vue"; +import ViewDashboard from "../views/ViewDashboard.vue"; +import EditPanel from "../views/EditPanel.vue"; + +import LoginCallback from "../views/LoginCallback.vue"; +import MemberSubscription from "../views/MemberSubscription.vue"; +import Search from "../views/Search.vue"; +import LogIndex from "../views/LogIndex.vue"; +import JSTransform from "../views/JSTransform.vue"; +import Alerts from "../views/Alerts.vue"; +import Ingestion from "../views/Ingestion.vue"; +import Error404 from "../views/Error404.vue"; +import { + getLoginURL, + getLogoutURL, + useLocalUserInfo, + getDecodedUserInfo, + useLocalToken, + useLocalCurrentUser, +} from "../utils/zincutils"; +import type { cp } from "fs"; +import FluentBit from '../components/ingestion/FluentBit.vue' +import Fluentd from '../components/ingestion/Fluentd.vue' +import Vector from '../components/ingestion/Vector.vue' +import Curl from '../components/ingestion/Curl.vue' + +import segment from "@/services/segment_analytics"; + +export default function (store: any) { + const routes = [ + { + path: "/login", + component: Login, + }, + { + path: "/logout", + beforeEnter(to: any, from: any, next: any) { + useLocalToken("", true); + useLocalCurrentUser("", true); + useLocalUserInfo("", true); + window.location.href = getLogoutURL(); + }, + }, + { + path: "/cb", + name: "callback", + component: LoginCallback, + }, + { + path: "/", + component: () => import("../layouts/MainLayout.vue"), + children: [ + { + path: "", + name: "home", + component: Home, + meta: { + keepAlive: true, + }, + }, + { + path: "logs", + name: "logs", + component: Search, + meta: { + keepAlive: true, + }, + }, + { + path: "logstream", + name: "logstream", + component: LogIndex, + meta: { + keepAlive: true, + }, + }, + { + path: "tickets", + name: "tickets", + component: Tickets, + meta: { + keepAlive: true, + }, + }, + { + path: "about", + name: "about", + component: About, + meta: { + keepAlive: true, + }, + }, + { + path: "dashboard", + name: "dashboard", + component: Dashboard, + meta: { + keepAlive: true, + }, + }, + { + path: "viewDashboard", + name: "viewDashboard", + component: ViewDashboard, + props: true, + meta: { + keepAlive: true, + }, + }, + { + path: "editPanel", + name: "editPanel", + component: EditPanel, + props: true, + meta: { + keepAlive: true, + }, + }, + { + path: "users", + name: "users", + component: Users, + meta: { + keepAlive: true, + }, + }, + { + path: "member_subscription", + name: "member_subscription", + component: MemberSubscription, + meta: { + keepAlive: true, + }, + }, + { + path: "function", + name: "function", + component: JSTransform, + meta: { + keepAlive: true, + }, + }, + { + path: "ingestion", + name: "ingestion", + component: Ingestion, + meta: { + keepAlive: true, + }, + children: [ + { + path: "", + name: "curl", + redirect: "ingestion/curl", + }, + { + path: "curl", + name: "curl", + component: Curl, + }, + { + path: "fluentbit", + name: "fluentbit", + component: FluentBit, + }, + { + path: "fluentd", + name: "fluentd", + component: Fluentd, + }, + { + path: "vector", + name: "vector", + component: Vector, + }, + ] + }, + { + path: "alerts", + name: "alerts", + component: Alerts, + meta: { + keepAlive: true, + }, + }, + { + path: "/:catchAll(.*)*", + component: Error404, + meta: { + keepAlive: true, + }, + }, + ], + }, + ]; + + interface RouterMap { + history: any; + routes: any; + } + const routerMap: RouterMap = { + history: createWebHistory(import.meta.env.BASE_URL), + routes: routes, + }; + + const router = createRouter(routerMap); + + router.beforeEach((to: any, from: any, next: any) => { + const isAuthenticated = store.state.loggedIn; + + if (!isAuthenticated) { + const sessionUserInfo = getDecodedUserInfo(); + + const localStorageToken: any = useLocalToken(); + if ( + to.path !== "/login" && + to.path !== "/cb" && + (localStorageToken.value === "" || sessionUserInfo === null) + ) { + window.sessionStorage.setItem("redirectURI", to.fullPath); + next({ path: "/login" }); + } else { + if (sessionUserInfo !== null) { + const userInfo = JSON.parse(String(sessionUserInfo)); + store.dispatch("login", { + loginState: true, + userInfo: userInfo, + }); + } + next(); + } + } else { + const sessionUserInfo = getDecodedUserInfo(); + const userID = JSON.parse(String(sessionUserInfo)).email; + + segment.track("page view", { + path: to.path, + referrer: from.path, + }); + next(); + } + }); + return router; +} diff --git a/web/src/services/alerts.ts b/web/src/services/alerts.ts new file mode 100644 index 0000000000..7c84099bbb --- /dev/null +++ b/web/src/services/alerts.ts @@ -0,0 +1,27 @@ +import http from "./http"; + +var alerts = { + list: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string, + org_identifier: string, + ) => { + return http().get( + `/api/${org_identifier}/alerts?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + create: (org_identifier: string, stream_name: string,data: any) => { + return http().post(`/api/${org_identifier}/${stream_name}/alerts/${data.name}`, data); + }, + get_with_name: (org_identifier: string, stream_name: string, alert_name: string) => { + return http().get(`/api/${org_identifier}/${stream_name}/alerts/${alert_name}`); + }, + delete: (org_identifier: string,stream_name: string, alert_name: string) => { + return http().delete(`/api/${org_identifier}/${stream_name}/alerts/${alert_name}`); + }, +}; + +export default alerts; diff --git a/web/src/services/attachments.ts b/web/src/services/attachments.ts new file mode 100644 index 0000000000..28dcea5142 --- /dev/null +++ b/web/src/services/attachments.ts @@ -0,0 +1,36 @@ +import http from "./http"; +import axios from "axios"; + +var attachments = { + list: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string + ) => { + return http().get( + `/api/tickets?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + getPresignedUrl: (objectkey: string, fileType: String) => { + return http().get( + `/api/attachements/` + objectkey + "?fileType=" + fileType + ); + }, + upload: (url: string, data: any) => { + return axios.put(url, data, { + headers: { + "Content-Type": data.type, + }, + }); + }, + create: (data: any) => { + return http().post("/api/tickets", data); + }, + delete: (names: string) => { + return http().delete("/api/tickets/" + names); + }, +}; + +export default attachments; diff --git a/web/src/services/auth.ts b/web/src/services/auth.ts new file mode 100644 index 0000000000..46c5c30a58 --- /dev/null +++ b/web/src/services/auth.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import http from "./http"; + +const auth = { + sign_in_user: (orgIdentifier: string, payload: any) => { + return http().post(`/auth/${orgIdentifier}/authentication`, payload); + }, + get_organization_by_username: (userName: string) => { + return http().get(`/auth/organizarions_by_username/${userName}`); + } +}; + +export default auth; diff --git a/web/src/services/billings.ts b/web/src/services/billings.ts new file mode 100644 index 0000000000..eae2f69bb1 --- /dev/null +++ b/web/src/services/billings.ts @@ -0,0 +1,11 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import http from "./http"; + +const billings = { + get_quota_threshold: (org_identifier: string) => { + return http().get(`/api/billings/quota_threshold/${org_identifier}`); + } + +}; + +export default billings; diff --git a/web/src/services/dashboards.ts b/web/src/services/dashboards.ts new file mode 100644 index 0000000000..b1d34c4111 --- /dev/null +++ b/web/src/services/dashboards.ts @@ -0,0 +1,25 @@ +import http from "./http"; + +const dashboards = { + list: (organization: string) => { + return http().get( + `/api/${organization}/dashboards` + ); + }, + create: (organization: string,dashboardID:String,data: any) => { + return http().post(`/api/${organization}/dashboards/${dashboardID}`, data ,{ headers: { 'Content-Type': 'application/json; charset=UTF-8' }}); + }, + delete: (organization: string,dashboardID:String) => { + console.log(dashboardID) + return http().delete(`/api/${organization}/dashboards/${dashboardID}`); + }, + get_Dashboard: (org_identifier: string) => { + return http().get(`/api/dashboards/passcode/${org_identifier}`); + }, + save: (organization: string,dashboardID:String,data: any) => { + return http().post(`/api/${organization}/dashboards/${dashboardID}`, data ,{ headers: { 'Content-Type': 'application/json; charset=UTF-8' }}); + } + +}; + +export default dashboards; \ No newline at end of file diff --git a/web/src/services/http.ts b/web/src/services/http.ts new file mode 100644 index 0000000000..b8d0d04c74 --- /dev/null +++ b/web/src/services/http.ts @@ -0,0 +1,57 @@ +import store from "../stores"; +import router from "../router"; +import axios from "axios"; +import { Notify } from "quasar"; + +const http = () => { + const instance = axios.create({ + // timeout: 10000, + baseURL: store.state.API_ENDPOINT, + headers: { + Authorization: localStorage.getItem("token"), + }, + }); + + instance.interceptors.response.use( + function (response) { + return response; + }, + function (error) { + if (error && error.response && error.response.status) { + switch (error.response.status) { + case 400: + console.log(JSON.stringify( + error.response.data["error"] || "Bad Request" + )); + break; + case 401: + console.log(JSON.stringify( + error.response.data["error"] || "Invalid credentials" + )); + store.dispatch("logout"); + localStorage.clear(); + sessionStorage.clear(); + window.location.reload(); + break; + case 404: + console.log(JSON.stringify( + error.response.data["error"] || "Not Found" + )); + break; + case 500: + console.log(JSON.stringify( + error.response.data["error"] || "Invalid ServerError" + )); + break; + default: + // noop + } + } + return Promise.reject(error); + } + ); + + return instance; +}; + +export default http; diff --git a/web/src/services/httpsearch.ts b/web/src/services/httpsearch.ts new file mode 100644 index 0000000000..1bcab9a601 --- /dev/null +++ b/web/src/services/httpsearch.ts @@ -0,0 +1,85 @@ +import store from "../stores"; +import router from "../router"; +import axios from "axios"; +import { Notify } from "quasar"; + +const http = () => { + const instance = axios.create({ + // timeout: 10000, + baseURL: store.state.API_ENDPOINT, + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + }); + + instance.interceptors.response.use( + function (response) { + return response; + }, + function (error) { + if (error && error.response && error.response.status) { + switch (error.response.status) { + case 400: + Notify.create({ + position: "bottom-right", + progress: true, + multiLine: true, + color: "red-5", + textColor: "white", + icon: "warning", + message: JSON.stringify( + error.response.data["error"] || "Bad Request" + ), + }); + break; + case 401: + Notify.create({ + position: "bottom-right", + progress: true, + multiLine: true, + color: "red-5", + textColor: "white", + icon: "warning", + message: error.response.data["error"] || "Invalid credentials", + }); + store.dispatch("logout"); + localStorage.clear(); + sessionStorage.clear(); + window.location.reload(); + break; + case 404: + Notify.create({ + position: "bottom-right", + progress: true, + multiLine: true, + color: "red-5", + textColor: "white", + icon: "warning", + message: error.response.data["error"] || "Not Found", + }); + break; + case 500: + Notify.create({ + position: "bottom-right", + progress: true, + multiLine: true, + color: "red-5", + textColor: "white", + icon: "warning", + message: JSON.stringify( + error.response.data["error"] || "Internal ServerError" + ), + }); + break; + default: + // noop + } + } + return Promise.reject(error); + } + ); + + return instance; +}; + +export default http; diff --git a/web/src/services/index.ts b/web/src/services/index.ts new file mode 100644 index 0000000000..7e8ee4192b --- /dev/null +++ b/web/src/services/index.ts @@ -0,0 +1,36 @@ +import http from "./http"; + +var index = { + nameList: (org_identifier: string, type: string, schema: boolean) => { + let url = `/api/${org_identifier}/streams`; + + if (type != "") { + url += "?type=" + type; + } + + if (schema) { + url += url.indexOf("?")>0 ? "&fetchSchema="+schema: "?fetchSchema="+schema; + } + return http().get(url); + }, + schema: (org_identifier: string, stream_name: string, type: string) => { + let url = `/api/${org_identifier}/${stream_name}/schema`; + + if (type != "") { + url += "?type=" + type; + } + return http().get(url); + }, + updateSettings: (org_identifier: string, stream_name: string, type: string,data: any) => { + let url = `/api/${org_identifier}/${stream_name}/settings`; + + if (type != "") { + url += "?type=" + type; + } + return http().post(url, data); + }, +}; + + + +export default index; diff --git a/web/src/services/jstransform.ts b/web/src/services/jstransform.ts new file mode 100644 index 0000000000..dd0024fc00 --- /dev/null +++ b/web/src/services/jstransform.ts @@ -0,0 +1,30 @@ +import http from "./http"; + +var jstransform = { + list: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string, + org_identifier: string + ) => { + return http().get( + `/api/${org_identifier}/functions?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + create: (org_identifier: string, data: any) => { + return http().post(`/api/${org_identifier}/functions/${data.name}`, data); + }, + create_with_index: (org_identifier: string, stream_name: string, data: any) => { + return http().post(`/api/${org_identifier}/${stream_name}/functions/${data.name}`, data); + }, + delete: (org_identifier: string, transform_name: string) => { + return http().delete(`/api/${org_identifier}/functions/${transform_name}`); + }, + delete_stream_function: (org_identifier: string, stream_name: string, transform_name: string) => { + return http().delete(`/api/${org_identifier}/${stream_name}/functions/${transform_name}`); + }, +}; + +export default jstransform; diff --git a/web/src/services/nativequery.ts b/web/src/services/nativequery.ts new file mode 100644 index 0000000000..83622efc8e --- /dev/null +++ b/web/src/services/nativequery.ts @@ -0,0 +1,9 @@ +import http from "./http"; +const nativeQueries = { + + runquery: (data: any, organization:any) => { + return http().post(`/api/${organization}/_search`, data); + }, + +} +export default nativeQueries; diff --git a/web/src/services/organizations.ts b/web/src/services/organizations.ts new file mode 100644 index 0000000000..93c08603fb --- /dev/null +++ b/web/src/services/organizations.ts @@ -0,0 +1,54 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import http from "./http"; + +const organizations = { + os_list: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string, + org_identifier: string + ) => { + return http().get( + `/api/${org_identifier}/organizations?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + list: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string + ) => { + return http().get( + `/api/organizations?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + create: (data: any) => { + return http().post("/api/organizations", data); + }, + add_members: (data: any, orgIdentifier: string) => { + return http().post(`api/organizations/${orgIdentifier}/members`, data); + }, + process_subscription: (s: string) => { + return http().get(`api/organizations/member_subscription/${s}`); + }, + get_associated_members: (orgIdentifier: string) => { + return http().get(`api/organizations/associated_members/${orgIdentifier}`); + }, + update_member_role: (data: any, orgIdentifier: string) => { + return http().put(`api/organizations/${orgIdentifier}/member`, data); + }, + verify_identifier: (name: string) => { + return http().get(`api/organizations/verify_identifier/${name}`); + }, + get_organization_passcode: (orgIdentifier: string) => { + return http().get(`/api/organizations/passcode/${orgIdentifier}`); + }, + update_organization_passcode: (orgIdentifier: string) => { + return http().put(`api/organizations/passcode/${orgIdentifier}`, {}); + }, +}; + +export default organizations; diff --git a/web/src/services/search.ts b/web/src/services/search.ts new file mode 100644 index 0000000000..5316325280 --- /dev/null +++ b/web/src/services/search.ts @@ -0,0 +1,10 @@ +import http from "./http"; + +var search = { + search: ({ org_identifier, query, page_type = "logs" }: { org_identifier: string; query: any; page_type:string }) => { + let url = `/api/${org_identifier}/_search?type=${page_type}`; + return http().post(url, query); + }, +}; + +export default search; diff --git a/web/src/services/segment_analytics.ts b/web/src/services/segment_analytics.ts new file mode 100644 index 0000000000..b759f7c917 --- /dev/null +++ b/web/src/services/segment_analytics.ts @@ -0,0 +1,40 @@ +// import { AnalyticsBrowser, Analytics } from "@segment/analytics-next"; +import * as rudderanalytics from "rudder-sdk-js"; +// add segment analytics + +const writeKey = "ziox-cloud-browser"; +const dataPlaneUrl = "https://e1.zinclabs.dev"; +// const writeKey: "CGi3aENuM7L0v1jGtSC9QEhnIVmDAEFm", + +// const analytics = AnalyticsBrowser.load({ +// writeKey: writeKey, +// cdnURL: "https://e1.zinclabs.dev", +// cdnSettings: { +// integrations: { +// "Segment.io": { +// apiHost: "e1.zinclabs.dev/v1", // this what enables js to start sending events to the custom endpoint +// }, +// }, +// }, +// }); + + +rudderanalytics.ready(() => { + console.log("we are all set!!!"); +}); + +// opt = rudderanalytics. +rudderanalytics.load(writeKey, dataPlaneUrl, { + configUrl: "https://e1.zinclabs.dev/v1/config", +}); +export default rudderanalytics ; + + +// analytics.identify("hello world"); + +// document.body?.addEventListener("click", () => { +// analytics.track("document body clicked!"); +// }); +// end segment analytics + +// export default analytics; diff --git a/web/src/services/tickets.ts b/web/src/services/tickets.ts new file mode 100644 index 0000000000..c8e4106ea4 --- /dev/null +++ b/web/src/services/tickets.ts @@ -0,0 +1,27 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import http from "./http"; + +const tickets = { + list: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string + ) => { + return http().get( + `/api/tickets?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + update: (ticketId: number, data: any) => { + return http().put(`/api/tickets/${ticketId}`, data); + }, + create: (data: any) => { + return http().post("/api/tickets", data); + }, + delete: (names: string) => { + return http().delete("/api/tickets/" + names); + }, +}; + +export default tickets; diff --git a/web/src/services/users.ts b/web/src/services/users.ts new file mode 100644 index 0000000000..0da52fd15a --- /dev/null +++ b/web/src/services/users.ts @@ -0,0 +1,42 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import http from "./http"; + +const users = { + list: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string + ) => { + return http().get( + `/api/users?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + create: (data: any) => { + return http().post("/api/users", data); + }, + verifyUser: (email: string) => { + return http().get(`/api/users/verifyuser/${email}`); + }, + addNewUser: (data: any) => { + return http().post(`/api/users/new_user`, data); + }, + orgUsers: ( + page_num: number, + page_size: number, + sort_by: string, + desc: boolean, + name: string, + org_identifier:string, + ) => { + return http().get( + `/api/org_users/${org_identifier}?page_num=${page_num}&page_size=${page_size}&sort_by=${sort_by}&desc=${desc}&name=${name}` + ); + }, + getRefreshToken: () => { + return http().get(`/api/auth/refresh_token`); + }, +}; + +export default users; diff --git a/web/src/stores/index.ts b/web/src/stores/index.ts new file mode 100644 index 0000000000..60d3828949 --- /dev/null +++ b/web/src/stores/index.ts @@ -0,0 +1,128 @@ +import { createStore } from "vuex"; +import { useLocalOrganization, useLocalCurrentUser } from "../utils/zincutils"; + +export default createStore({ + state: { + API_ENDPOINT: import.meta.env.VITE_ZINC_ENL_ENDPOINT, + userInfo: {}, + loggedIn: false, + loadingState: true, + errorLoadingState: false, + indexData: [], + selectedOrganization: (useLocalOrganization()) ? useLocalOrganization():{}, + organizations: [], + currentuser: (useLocalCurrentUser()) ? useLocalCurrentUser() : {}, + searchCollapsibleSection: 20, + organizationPasscode: "", + allCurrentDashboards:{}, + currentSelectedDashboard:{}, + currentPanelsData: [], + search: { + query: { + dateVal:{ + tab: "relative", + startDate: new Date().toLocaleDateString("en-ZA"), + startTime: "00:00", + endDate: new Date().toLocaleDateString("en-ZA"), + endTime: "23:59", + selectedRelativePeriod: "Minutes", + selectedRelativeValue: 15, + selectedFullTime: false, + } + }}, + streamFields: [], + }, + mutations: { + login(state, payload) { + if (payload) { + state.loggedIn = payload.loginState; + state.userInfo = payload.userInfo; + } + }, + logout(state) { + state.loggedIn = false; + state.userInfo = {}; + }, + setUserInfo(state, payload) { + state.userInfo = payload; + }, + setIndexData(state, payload) { + state.indexData = payload; + }, + setSelectedOrganization(state, payload) { + state.selectedOrganization = payload; + }, + setOrganizations(state, payload) { + state.organizations = payload; + }, + setCurrentUser(state, payload) { + state.currentuser = payload; + }, + setSearchCollapseToggle(state, payload) { + state.searchCollapsibleSection = payload; + }, + setOrganizationPasscode(state, payload) { + state.organizationPasscode = payload; + }, + setAllCurrentDashboards(state, payload) { + state.allCurrentDashboards = payload; + }, + setCurrentSelectedDashboard(state, payload) { + state.currentSelectedDashboard = payload; + }, + setSearch(state, payload) { + state.search = payload; + }, + setStreamFields(state, payload) { + state.streamFields = payload; + }, + setCurrentPanelsData(state, payload) { + state.currentPanelsData = payload + } + }, + actions: { + login(context, payload) { + context.commit("login", payload); + }, + logout(context) { + context.commit("logout"); + }, + endpoint(context, payload) { + context.commit("endpoint", payload); + }, + setIndexData(context, payload) { + context.commit("setIndexData", payload); + }, + setSelectedOrganization(context, payload) { + context.commit("setSelectedOrganization", payload); + }, + setOrganizations(context, payload) { + context.commit("setOrganizations", payload); + }, + setCurrentUser(context, payload) { + context.commit("setCurrentUser", payload); + }, + setSearchCollapseToggle(context, payload) { + context.commit("setSearchCollapseToggle", payload); + }, + setOrganizationPasscode(context, payload) { + context.commit("setOrganizationPasscode", payload); + }, + setAllCurrentDashboards(context, payload) { + context.commit('setAllCurrentDashboards', payload); + }, + setCurrentSelectedDashboard(context, payload) { + context.commit('setCurrentSelectedDashboard', payload); + }, + setSearch(context, payload) { + context.commit("setSearch", payload); + }, + setStreamFields(context, payload) { + context.commit("setStreamFields", payload); + }, + setCurrentPanelsData(context, payload) { + context.commit('setCurrentPanelsData', payload); + } + }, + modules: {}, +}); diff --git a/web/src/styles/app.scss b/web/src/styles/app.scss new file mode 100644 index 0000000000..10d4d1c32b --- /dev/null +++ b/web/src/styles/app.scss @@ -0,0 +1,41 @@ +.q-w-sm { + width: 260px; +} +.q-w-md { + width: 400px; +} +.q-w-lg { + width: 600px; +} +.q-w-xl { + width: 800px; +} +.q-w-p50 { + min-width: 500px; + width: 50vw; +} +.q-w-p80 { + min-width: 800px; + width: 80vw; +} + +.text-decoration-none { + cursor: pointer; + text-decoration: none; +} + +.text-decoration-none:hover { + text-decoration: underline; +} + +.bg-white{ + background-color: white; +} + +.border-bottom{ + border-bottom: 1px solid $border-color; +} + +.border-right{ + border-right: 1px solid $border-color; +} \ No newline at end of file diff --git a/web/src/styles/quasar-overrides.scss b/web/src/styles/quasar-overrides.scss new file mode 100644 index 0000000000..a9bf406490 --- /dev/null +++ b/web/src/styles/quasar-overrides.scss @@ -0,0 +1,121 @@ +@mixin scrollbars($size: 6px, $foreground-color: $primary, $background-color: mix($foreground-color, white, 35%)) { + // For Google Chrome + &::-webkit-scrollbar { + width: $size; + height: $size; + } + + &::-webkit-scrollbar-thumb { + background: $foreground-color; + } + + &::-webkit-scrollbar-track { + background: $background-color; + } + + // For Internet Explorer + & { + scrollbar-face-color: $foreground-color; + scrollbar-track-color: $background-color; + } +} + +body{ + font-family: 'Nunito Sans', sans-serif; + @include scrollbars; +} + +.q-list, .q-splitter__panel, .scroll { + @include scrollbars; +} + +.q-field{ + .q-field__control{ + border-radius: 0px; + } + + &--labeled.showLabelOnTop { + padding-top: 32px; + + &.q-field { + &--float .q-field__label { + transform: translate(-0.75rem, -175%); + color: $dark-page; + font-weight: bold; + } + .q-field__native { + padding: 0 !important; + } + .q-field__control { + border: 1px solid $input-border; + background-color: $input-bg; + } + } + &.q-select { + .q-field__control-container { + padding-top: 0; + + .q-field__native > :first-child { + text-transform: capitalize; + font-size: 0.875rem; + color: $dark-page; + font-weight: 600; + } + } + } + .q-field__bottom { + padding: 0.875rem 0 0; + } + } + + &--borderless { + .q-field__control { + border: none; + + .q-icon { + transform: translateY(-2px); + } + } + } +} + +.q-btn:before { + border: 1px solid $input-field-border-color; + box-shadow: none; +} + +.q-btn--flat:before, .q-btn.no-border::before{ + border: none; +} + +.q-btn-group{ + box-shadow: none; + border: 1px solid $input-field-border-color; +} + +.q-btn.selected{ + color: $primary; + background: #E3E5FA; + font-weight: bolder; +} + +.q-table th { font-weight: bold; } + +.q-date__calendar-item > div, .q-date__calendar-item button{ + &::before{ + display: none; + } +} + +.q-table__card{ + box-shadow: unset; +} + +.iconHoverBtn { + filter: grayscale(1) brightness(0.2); + transition: filter 0.25s ease; + + &:hover { + filter: none; + } +} diff --git a/web/src/styles/quasar-variables.sass b/web/src/styles/quasar-variables.sass new file mode 100644 index 0000000000..ab15ce1fa2 --- /dev/null +++ b/web/src/styles/quasar-variables.sass @@ -0,0 +1,26 @@ +$primary : #5960B2 +$secondary : #5ca380 +$accent : #F5F5F5 + +$dark : #202224 +$dark-page : #36383A + +$positive : #5ca380 +$negative : #ec1414 +$info : #31CCEC +$warning : #F2C037 + + +$input-border : #E1E1E1 +$input-bg : #F5F5F5 +$light-text : #797A7C +$light-text2 : #939496 + +$border-color: #E0E0E0 +$input-field-border-color: #D5D5D5 + +$selected-list-bg: #E3E4FA + +$table-footer-opacity: 0.6 +$generic-border-radius : 6px +$button-border-radius : 6px diff --git a/web/src/test/unit/helpers/index.ts b/web/src/test/unit/helpers/index.ts new file mode 100644 index 0000000000..d6993c99b5 --- /dev/null +++ b/web/src/test/unit/helpers/index.ts @@ -0,0 +1 @@ +export * from "./install-quasar-plugin"; diff --git a/web/src/test/unit/helpers/install-quasar-plugin.ts b/web/src/test/unit/helpers/install-quasar-plugin.ts new file mode 100644 index 0000000000..1ee4906431 --- /dev/null +++ b/web/src/test/unit/helpers/install-quasar-plugin.ts @@ -0,0 +1,21 @@ +import { config } from "@vue/test-utils"; +import { cloneDeep } from "lodash-es"; +import { Quasar } from "quasar"; +import { qLayoutInjections } from "./layout-injections"; +import { beforeAll, afterAll } from "vitest"; + +export function installQuasar(options?: any) { + const globalConfigBackup = cloneDeep(config.global); + + beforeAll(() => { + config.global.plugins.unshift([Quasar, options]); + config.global.provide = { + ...config.global.provide, + ...qLayoutInjections(), + }; + }); + + afterAll(() => { + config.global = globalConfigBackup; + }); +} diff --git a/web/src/test/unit/helpers/layout-injections.ts b/web/src/test/unit/helpers/layout-injections.ts new file mode 100644 index 0000000000..3795fefd21 --- /dev/null +++ b/web/src/test/unit/helpers/layout-injections.ts @@ -0,0 +1,17 @@ +/** + * Injections for Components with a QPage root Element + */ +export function qLayoutInjections() { + return { + // pageContainerKey + _q_pc_: true, + // layoutKey + _q_l_: { + header: { size: 100, offset: 0, space: false }, + right: { size: 0, offset: 0, space: false }, + footer: { size: 0, offset: 0, space: false }, + left: { size: 300, offset: 0, space: false }, + isContainer: false, + }, + }; +} diff --git a/web/src/test/unit/views/About.spec.ts b/web/src/test/unit/views/About.spec.ts new file mode 100644 index 0000000000..9a436ec98e --- /dev/null +++ b/web/src/test/unit/views/About.spec.ts @@ -0,0 +1,23 @@ +import { mount } from "@vue/test-utils"; +import About from "../../../views/About.vue"; +import { Quasar, Dialog, Notify } from "quasar"; +import { expect, it } from "vitest"; +import i18n from "../../../locales"; + +import { installQuasar } from "../helpers/install-quasar-plugin"; + +installQuasar(); + +it("should mount About view", async () => { + const wrapper = mount(About, { + shallow: false, + components: { + Notify, + Dialog, + }, + global: { + plugins: [i18n], + }, + }); + expect(About).toBeTruthy(); +}); diff --git a/web/src/utils/common.ts b/web/src/utils/common.ts new file mode 100644 index 0000000000..995e19c36f --- /dev/null +++ b/web/src/utils/common.ts @@ -0,0 +1,65 @@ +import { ref } from "vue"; +import organizationsService from "../services/organizations"; +import { useLocalOrganization } from "./zincutils"; + +const selectedOrg = ref(""); +const orgOptions = ref([{ label: Number, value: String }]); +export const getDefaultOrganization = async (userInfo:any, org_identifier: any) => { + console.log(userInfo); + await organizationsService.os_list(0, 1000, "id", false, "", org_identifier).then((res: any) => { + const localOrg: any = useLocalOrganization(); + if ( + localOrg.value != null && + localOrg.value.user_email !== userInfo.email + ) { + localOrg.value = null; + useLocalOrganization(""); + } + + orgOptions.value = res.data.data.map( + (data: { + id: any; + name: any; + org_type: any; + identifier: any; + user_obj: any; + ingest_threshold: number; + search_threshold: number; + }) => { + const optiondata: any = { + label: data.name, + id: data.id, + type: data.org_type, + identifier: data.identifier, + user_email: userInfo.email, + ingest_threshold: data.ingest_threshold, + search_threshold: data.search_threshold, + }; + + if ( + (selectedOrg.value == "" && + data.org_type == "default" && + userInfo.email == data.user_obj.email) || + res.data.data.length == 1 + ) { + selectedOrg.value = localOrg.value ? localOrg.value : optiondata; + useLocalOrganization(selectedOrg.value); + // $store.dispatch("setSelectedOrganization", selectedOrg.value); + } + return optiondata; + } + ); + + return res.data.data; + }); +}; + +export const redirectUser = (redirectURI: string | null) => { + if (redirectURI != null && redirectURI != "") { + // $router.push({ path: redirectURI }); + window.location.replace(window.location.origin + redirectURI); + } else { + // $router.push({ path: "/" }); + window.location.replace(window.location.origin); + } +}; diff --git a/web/src/utils/commons.ts b/web/src/utils/commons.ts new file mode 100644 index 0000000000..7d8fb1a46c --- /dev/null +++ b/web/src/utils/commons.ts @@ -0,0 +1,235 @@ +//Dashboard Manipulation Functions + +import dashboardService from "../services/dashboards"; +import { toRaw } from "vue"; +import { date } from "quasar"; +import moment from "moment"; + +export const deletePanelFromDashboard = async ( + store: any, + dashboardId: String, + panelId: any, + dashboardList: any +) => { + let dashboardPos = 0; + let counter = 0; + let found = 0; + let newDashboardList = JSON.parse(JSON.stringify(toRaw(dashboardList))); + let currentDashboard = JSON.parse( + JSON.stringify(toRaw(store.state.currentSelectedDashboard)) + ); + let currentPanelsData = JSON.parse( + JSON.stringify(toRaw(store.state.currentPanelsData)) + ); + + for (const dashboard of dashboardList) { + if (dashboardId === dashboard.name) { + let modDashboardObject = JSON.parse(toRaw(dashboard.details)); + for (const panel of modDashboardObject.panels) { + if (panelId === panel.id) { + // modDashboardObject.panels[counter] = panelObject + modDashboardObject.panels.splice(counter, 1); + currentDashboard.panels = modDashboardObject.panels; + + //remove layout from current dashboard + const layoutIndex = modDashboardObject.layouts.findIndex( + (layout: any) => layout.panelId == panelId + ); + modDashboardObject.layouts.splice(layoutIndex, 1); + currentDashboard.layouts = modDashboardObject.layouts; + + //remove panelData from current panel + const panelIndex = currentPanelsData.findIndex( + (panel: any) => panel.id == panelId + ); + currentPanelsData.splice(panelIndex, 1); + + found++; + } + counter++; + } + if (found === 0) { + console.log("Not Deleted Because not found"); + //modDashboardObject.panels.push(toRaw(panelObject)) + } + //dashboardList[counter].details = JSON.stringify(modDashboardObject) + newDashboardList[dashboardPos] = { + name: dashboardId, + details: JSON.stringify(toRaw(modDashboardObject)), + }; + } + dashboardPos++; + } + + store.dispatch("setCurrentSelectedDashboard", currentDashboard); + store.dispatch("setAllCurrentDashboards", newDashboardList); + store.dispatch("setCurrentPanelsData", currentPanelsData); + + // getCurrentDashboard(store,dashboardId) +}; + +export const updateAllDashboardsFromBackend = async (store: any) => { + await dashboardService + .list(store.state.selectedOrganization.identifier) + .then((res) => { + store.dispatch("setAllCurrentDashboards", res.data.list); + }); +}; + +export const getCurrentDashboard = async (store: any, dashboardId: String) => { + await updateAllDashboardsFromBackend(store); + const dashboardList = toRaw(store.state.allCurrentDashboards); + for (const dashboard of dashboardList) { + if (dashboardId === dashboard.name) { + store.dispatch( + "setCurrentSelectedDashboard", + JSON.parse(dashboard.details) + ); + return JSON.parse(dashboard.details); + } + } +}; + +export const getCurrentPanel = async ( + store: any, + dashboardId: String, + panelId: String +) => { + //await updateAllDashboardsFromBackend(store) + const dashboardList = toRaw(store.state.allCurrentDashboards); + for (const dashboard of dashboardList) { + if (dashboardId === dashboard.name) { + for (const panel of JSON.parse(toRaw(dashboard.details)).panels) { + if (panelId === panel.id) { + return toRaw(panel); + } + } + } + } +}; + +export const setCurrentDashboard = (dashboardId: String, panelId: String) => { + return "AAAA"; +}; + +export const setCurrentPanelToDashboardList = ( + dashboardList: any, + dashboardId: String, + panelId: String, + panelObject: any, + store: any, + newLayoutObj: any +) => { + let dashboardPos = 0; + let counter = 0; + let found = 0; + for (const dashboard of dashboardList) { + if (dashboardId === dashboard.name) { + console.log("Inside " + counter); + let modDashboardObject = JSON.parse(toRaw(dashboard.details)); + if (modDashboardObject.layouts && modDashboardObject.layouts.length > 0) { + modDashboardObject.layouts.push(newLayoutObj); + } else { + modDashboardObject.layouts = [newLayoutObj]; + } + for (const panel of modDashboardObject.panels) { + if (panelId === panel.id) { + console.log("Inside Panel match -- " + panelId); + console.log("Panel Replace --- " + JSON.stringify(panel)); + modDashboardObject.panels[counter] = panelObject; + found++; + } + counter++; + } + if (found === 0) { + modDashboardObject.panels.push(toRaw(panelObject)); + } + //dashboardList[counter].details = JSON.stringify(modDashboardObject) + dashboardList[dashboardPos] = { + name: dashboardId, + details: JSON.stringify(toRaw(modDashboardObject)), + }; + } + dashboardPos++; + } + console.log(dashboardList); + store.dispatch("setAllCurrentDashboards", dashboardList); +}; + +export const getDateConsumableDateTime = function (dateVal: { + tab: string; + selectedRelativePeriod: string; + selectedRelativeValue: number; + startDate: string; + startTime: string; + endDate: string; + endTime: string; +}) { + if (dateVal.tab == "relative") { + let period = ""; + let periodValue = 0; + // quasar does not support arithmetic on weeks. convert to days. + if (dateVal.selectedRelativePeriod.toLowerCase() == "weeks") { + period = "days"; + periodValue = dateVal.selectedRelativeValue * 7; + } else { + period = dateVal.selectedRelativePeriod.toLowerCase(); + periodValue = dateVal.selectedRelativeValue; + } + const subtractObject = '{"' + period + '":' + periodValue + "}"; + + const endTimeStamp = new Date(); + const startTimeStamp = date.subtractFromDate( + endTimeStamp, + JSON.parse(subtractObject) + ); + + return { + start_time: startTimeStamp, + end_time: endTimeStamp, + }; + } else { + let start, end; + + if (dateVal.startDate == "" && dateVal.startTime == "") { + start = new Date(); + } else { + start = new Date(dateVal.startDate + " " + dateVal.startTime); + } + + if (dateVal.endDate == "" && dateVal.endTime == "") { + end = new Date(); + } else { + end = new Date(dateVal.endDate + " " + dateVal.endTime); + } + + const rVal = { + start_time: start, + end_time: end, + }; + console.log(rVal); + + return rVal; + } +}; + +export const modifySQLQuery = (currentTimeObj: any, querySQL: String) => { + const startTime = moment(String(currentTimeObj.start_time)).format( + "YYYY-MM-DDThh:mm:ssZ" + ); + const endTime = moment(String(currentTimeObj.end_time)).format( + "YYYY-MM-DDThh:mm:ssZ" + ); + const replaceString = + "time_range(_timestamp,'" + startTime + "', '" + endTime + "') "; + let modString: String = ""; + + if (querySQL.match(/time_range[^)]*\)/)) { + modString = querySQL.replace(/time_range[^)]*\)/, replaceString); + } else if (querySQL.match(/WHERE/)) { + modString = querySQL.replace(/WHERE/, "WHERE " + replaceString + " and "); + } else { + modString = querySQL; + } + return modString; +}; diff --git a/web/src/utils/cookies.ts b/web/src/utils/cookies.ts new file mode 100644 index 0000000000..5cd47cad23 --- /dev/null +++ b/web/src/utils/cookies.ts @@ -0,0 +1,20 @@ +import Keys from "../constants/key"; +// @ts-ignore +import Cookies from "js-cookie"; + +export const getSidebarStatus = () => Cookies.get(Keys.sidebarStatusKey); +export const setSidebarStatus = (sidebarStatus: string) => + Cookies.set(Keys.sidebarStatusKey, sidebarStatus, { path: "/" }); + +export const getLanguage = () => Cookies.get(Keys.languageKey); +export const setLanguage = (language: string) => + Cookies.set(Keys.languageKey, language, { path: "/" }); + +export const getSize = () => Cookies.get(Keys.sizeKey); +export const setSize = (size: string) => + Cookies.set(Keys.sizeKey, size, { path: "/" }); + +export const getToken = () => Cookies.get(Keys.tokenKey); +export const setToken = (token: string) => + Cookies.set(Keys.tokenKey, token, { path: "/" }); +export const removeToken = () => Cookies.remove(Keys.tokenKey); diff --git a/web/src/utils/json.ts b/web/src/utils/json.ts new file mode 100644 index 0000000000..04ddaf7362 --- /dev/null +++ b/web/src/utils/json.ts @@ -0,0 +1,79 @@ +export const ToString = (o: any) => { + if (!o) { + return ""; + } + if (typeof o == "string") { + return o; + } else if (Array.isArray(o)) { + let tmp = ""; + for (let i = 0; i < o.length; i++) { + tmp += (tmp === "" ? "" : ", ") + ToString(o[i]); + } + return `[${tmp}]`; + } else if (typeof o == "object") { + let tmp = ""; + for (const key in o) { + tmp += (tmp === "" ? "" : ", ") + `"${key}":` + ToString(o[key]); + } + return `{${tmp}}`; + } else { + return o; + } +}; + +export const byString = (o: any, s: string) => { + if (s == undefined) { + return ""; + } + if (s in o) { + return ToString(o[s]); + } + s = s.replace(/\[(\w+)\]/g, ".$1"); // convert indexes to properties + s = s.replace(/^\./, ""); // strip a leading dot + let a = s.split("."); + + // eg.1, o = {"a1": {"b1": "1234", "b2": "1", "b3": {"c1":"12", "c2":"22"}}, "a2":"334"}, s = "a1.b3.c2" + // eg.2, o = {"a1.b1": "1234", "a1":"233", "a2":"334"}, s = "a1.b1" + // eg.3, o = {"a1.b1": {"c1": "123"}, "a1":"233", "a2":"334"}, s = "a1.b1.c1" + // eg.4, o = {"a1": [{"b1":"12", "b2":"222"}], "a2":"334"}, s = "a1" + for (let i = 0, n = a.length; i < n; ++i) { + let flag = false; + for (let j = n; j > i; j--) { + // Priority matching (longest) + let key = a.slice(i, j).join("."); + if (typeof o == "object" && key in o) { + o = o[key]; + flag = true; + break; + } + } + + if (flag == false) { + o="" + } + } + return ToString(o); +}; + +export const deepKeys = (o: any) => { + if (!(o instanceof Object)) { + return []; + } + let results = []; + let keys = Object.keys(o); + for (var i in keys) { + if (o[keys[i]] == undefined || o[keys[i]].length) { + results.push(keys[i]); + } else { + let subKeys = deepKeys(o[keys[i]]); + if (subKeys.length > 0) { + subKeys.forEach((key) => { + results.push(keys[i] + "." + key); + }); + } else { + results.push(keys[i]); + } + } + } + return results; +}; diff --git a/web/src/utils/zincutils.ts b/web/src/utils/zincutils.ts new file mode 100644 index 0000000000..5abb8465ea --- /dev/null +++ b/web/src/utils/zincutils.ts @@ -0,0 +1,226 @@ +import config from "../aws-exports"; +import { ref, onMounted, onUnmounted } from "vue"; + +const useLocalStorage = ( + key: string, + defaultValue: unknown, + isDelete: boolean = false, + isJSONValue: boolean = false +) => { + try { + const value = ref(defaultValue); + const read = () => { + const v = window.localStorage.getItem(key); + if (v != null && isJSONValue === true) value.value = JSON.parse(v); + else if (v != null) value.value = v; + else value.value = null; + }; + + read(); + + window.addEventListener("load", () => { + window.addEventListener("storage", read); + }); + + window.addEventListener("unload", () => { + window.removeEventListener("storage", read); + }); + + // onMounted(() => { + // window.addEventListener("storage", read); + // }); + // onUnmounted(() => { + // window.removeEventListener("storage", read); + // }); + + const write = () => { + const val: unknown = isJSONValue + ? JSON.stringify(defaultValue) + : defaultValue; + window.localStorage.setItem(key, String(val)); + }; + + if ( + window.localStorage.getItem(key) == null && + !isDelete && + defaultValue != "" + ) + write(); + else if (value.value != defaultValue && defaultValue != "") write(); + + const remove = () => { + window.localStorage.removeItem(key); + }; + + if (isDelete) { + remove(); + } + + return value; + } catch (e) { + console.log(`Error: Error in UseLocalStorage for key: ${key}`); + } +}; + +export const getUserInfo = (loginString: string) => { + try { + let decToken = null; + const tokens = loginString.substring(1).split("&"); + for (const token of tokens) { + const propArr = token.split("="); + if (propArr[0] == "id_token") { + decToken = getDecodedAccessToken(propArr[1]); + const encodedSessionData = b64EncodeUnicode(JSON.stringify(decToken)); + + useLocalUserInfo(encodedSessionData); + } + if (propArr[0] == "id_token") { + useLocalToken(propArr[1]); + } + } + + return decToken; + } catch (e) { + console.log(`Error in getUserInfo util with loginString: ${loginString}`); + } +}; + +export const getLoginURL = () => { + return `https://${config.oauth.domain}/login?client_id=${config.aws_user_pools_web_client_id}&response_type=${config.oauth.responseType}&scope=${config.oauth.scope}&redirect_uri=${config.oauth.redirectSignIn}`; +}; + +export const getLogoutURL = () => { + return `https://${config.oauth.domain}/logout?client_id=${config.aws_user_pools_web_client_id}&response_type=${config.oauth.responseType}&redirect_uri=${config.oauth.redirectSignIn}`; +}; + +export const getDecodedAccessToken = (token: string) => { + try { + return JSON.parse(atob(token.split(".")[1])); + } catch (e) { + console.log("error decoding token"); + } +}; + +export const b64EncodeUnicode = (str: string) => { + try { + return btoa( + encodeURIComponent(str).replace( + /%([0-9A-F]{2})/g, + function (match, p1: any) { + return String.fromCharCode(parseInt(`0x${p1}`)); + } + ) + ); + } catch (e) { + console.log("Error: getBase64Encode: error while encoding."); + } +}; + +export const b64DecodeUnicode = (str: string) => { + try { + return decodeURIComponent( + Array.prototype.map + .call(atob(str), function (c) { + return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); + }) + .join("") + ); + } catch (e) { + console.log("Error: getBase64Decode: error while decoding."); + } +}; + +export const getSessionStorageVal = (key: string) => { + try { + return window.sessionStorage.getItem(key); + } catch (e) { + console.log(`Error: Error while pull sessionstorage value ${key}`); + } +}; + +export const useLocalToken = (val = "", isDelete = false) => { + return useLocalStorage("token", val, isDelete); +}; + +export const useLocalOrganization = (val = "", isDelete = false) => { + return useLocalStorage("organization", val, isDelete, true); +}; + +export const useLocalCurrentUser = (val = "", isDelete = false) => { + return useLocalStorage("currentuser", val, isDelete, true); +}; + +export const useLocalLogsObj = (val = "", isDelete = false) => { + return useLocalStorage("logsobj", val, isDelete, true); +}; + +export const useLocalUserInfo = (val = "", isDelete = false) => { + const userInfo: any = useLocalStorage("userInfo", val, isDelete); + return userInfo.value; +}; + +export const deleteSessionStorageVal = (key: string) => { + try { + return sessionStorage.removeItem(key); + } catch (e) { + console.log(`Error: Error while pull sessionstorage value ${key}`); + } +}; + +export const getDecodedUserInfo = () => { + try { + if (useLocalUserInfo() != null) { + const userinfo: any = useLocalUserInfo(); + return b64DecodeUnicode(userinfo); + } else { + return null; + } + } catch (e) { + console.log("Error: Error while pull sessionstorage value."); + } +}; + +export const validateEmail = (email: string) => { + try { + if (email != null) { + const re = /\S+@\S+\.\S+/; + return re.test(email); + } else { + return false; + } + } catch (e) { + console.log(`Error: Error while validatig email id ${email}`); + } +}; + +export const getLocalTime = (datetime: string) => { + try { + if (datetime !== null) { + const event = new Date(datetime); + const local = event.toString(); + const dateobj = new Date(local); + + return ( + dateobj.getFullYear() + + "/" + + (dateobj.getMonth() + 1) + + "/" + + dateobj.getDate() + + " " + + dateobj.getHours() + + ":" + + dateobj.getMinutes() + ); + } else { + return datetime; + } + } catch (e) { + console.log(`Error: Error while covert localtime ${datetime}`); + } +}; + +export const getBasicAuth = (username: string, password: string) => { + const token = username + ":" + password; + const hash = window.btoa(token); + return "Basic " + hash; +}; diff --git a/web/src/views/About.vue b/web/src/views/About.vue new file mode 100644 index 0000000000..3447aa2aba --- /dev/null +++ b/web/src/views/About.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/web/src/views/Alerts.vue b/web/src/views/Alerts.vue new file mode 100644 index 0000000000..7b6a4e02c8 --- /dev/null +++ b/web/src/views/Alerts.vue @@ -0,0 +1,335 @@ + + + + + + + diff --git a/web/src/views/Dashboard.vue b/web/src/views/Dashboard.vue new file mode 100644 index 0000000000..e1b1c7037b --- /dev/null +++ b/web/src/views/Dashboard.vue @@ -0,0 +1,438 @@ + + + + + + + + \ No newline at end of file diff --git a/web/src/views/DetailTable.vue b/web/src/views/DetailTable.vue new file mode 100644 index 0000000000..149dd6011f --- /dev/null +++ b/web/src/views/DetailTable.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/web/src/views/EditPanel.vue b/web/src/views/EditPanel.vue new file mode 100644 index 0000000000..d833a6d6c0 --- /dev/null +++ b/web/src/views/EditPanel.vue @@ -0,0 +1,488 @@ + + + + + + + diff --git a/web/src/views/Error404.vue b/web/src/views/Error404.vue new file mode 100644 index 0000000000..cee3d39a0f --- /dev/null +++ b/web/src/views/Error404.vue @@ -0,0 +1,29 @@ + + + diff --git a/web/src/views/HomeView.vue b/web/src/views/HomeView.vue new file mode 100644 index 0000000000..1dab44d180 --- /dev/null +++ b/web/src/views/HomeView.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/web/src/views/Ingestion.vue b/web/src/views/Ingestion.vue new file mode 100644 index 0000000000..672655c2f5 --- /dev/null +++ b/web/src/views/Ingestion.vue @@ -0,0 +1,304 @@ + + + + + + \ No newline at end of file diff --git a/web/src/views/JSTransform.vue b/web/src/views/JSTransform.vue new file mode 100644 index 0000000000..171409b3ce --- /dev/null +++ b/web/src/views/JSTransform.vue @@ -0,0 +1,393 @@ + + + + + + + diff --git a/web/src/views/LogIndex.vue b/web/src/views/LogIndex.vue new file mode 100644 index 0000000000..4b32510b0b --- /dev/null +++ b/web/src/views/LogIndex.vue @@ -0,0 +1,367 @@ + + + + + + + diff --git a/web/src/views/Login.vue b/web/src/views/Login.vue new file mode 100644 index 0000000000..29907cd27d --- /dev/null +++ b/web/src/views/Login.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/web/src/views/LoginCallback.vue b/web/src/views/LoginCallback.vue new file mode 100644 index 0000000000..98f8a3a756 --- /dev/null +++ b/web/src/views/LoginCallback.vue @@ -0,0 +1,202 @@ + + + diff --git a/web/src/views/Logs.vue b/web/src/views/Logs.vue new file mode 100644 index 0000000000..aca16ef21c --- /dev/null +++ b/web/src/views/Logs.vue @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/web/src/views/MemberSubscription.vue b/web/src/views/MemberSubscription.vue new file mode 100644 index 0000000000..01c38961e1 --- /dev/null +++ b/web/src/views/MemberSubscription.vue @@ -0,0 +1,68 @@ + + + diff --git a/web/src/views/Search.vue b/web/src/views/Search.vue new file mode 100644 index 0000000000..e7d4ca09de --- /dev/null +++ b/web/src/views/Search.vue @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/web/src/views/TicketsView.vue b/web/src/views/TicketsView.vue new file mode 100644 index 0000000000..c4540929e1 --- /dev/null +++ b/web/src/views/TicketsView.vue @@ -0,0 +1,231 @@ + + + + diff --git a/web/src/views/User.vue b/web/src/views/User.vue new file mode 100644 index 0000000000..a28a43b134 --- /dev/null +++ b/web/src/views/User.vue @@ -0,0 +1,571 @@ + + + + + + + diff --git a/web/src/views/ViewDashboard.vue b/web/src/views/ViewDashboard.vue new file mode 100644 index 0000000000..683f21565e --- /dev/null +++ b/web/src/views/ViewDashboard.vue @@ -0,0 +1,580 @@ + + + + + + + diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json new file mode 100644 index 0000000000..cdbea1d76e --- /dev/null +++ b/web/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.web.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/web/tsconfig.config.json b/web/tsconfig.config.json new file mode 100644 index 0000000000..d489241069 --- /dev/null +++ b/web/tsconfig.config.json @@ -0,0 +1,22 @@ +{ + "references": [{ "path": "./tsconfig.node.json" }], + "include": ["vite.config.*", "vitest.config.*", "cypress.config.*"], + "compilerOptions": { + "allowJs": true, + "target": "esnext", + "useDefineForClassFields": true, + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "skipLibCheck": true, + "composite": true, + "types": ["node"], + "baseUrl": "." + } +} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000000..31f90037cb --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,14 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.config.json" + }, + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.vitest.json" + } + ] +} diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json new file mode 100644 index 0000000000..e993792cb1 --- /dev/null +++ b/web/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "composite": true, + "module": "esnext", + "moduleResolution": "node" + }, + "include": ["vite.config.ts"] +} diff --git a/web/tsconfig.vitest.json b/web/tsconfig.vitest.json new file mode 100644 index 0000000000..c0650cb08d --- /dev/null +++ b/web/tsconfig.vitest.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.app.json", + "exclude": [], + "compilerOptions": { + "allowJs": true, + "composite": true, + "lib": [], + "types": ["node", "jsdom"] + } +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100644 index 0000000000..fa0d77d6c9 --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,64 @@ +import { fileURLToPath, URL } from "node:url"; + +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import { quasar, transformAssetUrls } from "@quasar/vite-plugin"; +import nodePolyfills from "rollup-plugin-node-polyfills"; +import { NodeGlobalsPolyfillPlugin } from "@esbuild-plugins/node-globals-polyfill"; +import path from 'path' + +// https://vitejs.dev/config/ +export default defineConfig({ + define: { + __VUE_I18N_FULL_INSTALL__: true, + __VUE_I18N_LEGACY_API__: false, + __INTLIFY_PROD_DEVTOOLS__: false, + }, + test: { + coverage: { + reporter: ["text", "json", "html"], + }, + environment: "happy-dom", + cache: false, + maxConcurrency: 20, + update: true, + // testNamePattern: "DateTime", + // ... + }, + // server: { + // port: 8081, + // }, + base: "/", + plugins: [ + vue({ + template: { transformAssetUrls }, + }), + quasar({ + sassVariables: "src/styles/quasar-variables.sass", + }), + ], + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + stream: "rollup-plugin-node-polyfills/polyfills/stream", + events: "rollup-plugin-node-polyfills/polyfills/events", + assert: "assert", + crypto: "crypto-browserify", + util: "util", + "./runtimeConfig": "./runtimeConfig.browser", + }, + }, + build: { + target: "es2020", + rollupOptions: { + plugins: [nodePolyfills()], + }, + outDir: path.resolve(__dirname, "dist"), + }, + optimizeDeps: { + esbuildOptions: { + plugins: [NodeGlobalsPolyfillPlugin({ buffer: true })], + target: "es2020", + }, + }, +});