diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..417ec8c Binary files /dev/null and b/.DS_Store differ diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 0000000..69cf155 --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,837 @@ +## Go style guide + +MUST write valid Go v1.22+ code, best practices. + +## Generated folders — do not edit + +`encore.gen/` + `.encore/` CLI-regenerated; never edit. + +`encore.app` at repo root = app manifest — CUE-formatted **text** file, not binary, despite `.app` extension. Read like any source file. + +## Encore local MCP server + +Local Encore MCP wired via `.mcp.json` (registered **`encore-local`**, tool prefix `mcp__encore-local__`). Prefer for live app introspection over `Read`/grep; use docs tools when unsure of Encore API surface. + +### Tools + +20 tools, all prefixed `mcp__encore-local__`. MCP client gets full catalog (names, descriptions, input schemas) via `tools/list` on session init — no need enumerate here. + +### Important tools (runtime-only — no filesystem equivalent) + +Do what `Glob`/`Grep`/`Read` can't. For static config (services, endpoints, topics, schemas), see "When NOT to use it" below. + +- **`call_endpoint`** — args: `service`, `endpoint`, `method`, `path`, `payload` (JSON string with body/query/headers/path-params), optional `auth_token` / `auth_payload` / `correlation_id`. Optional `retry_until: { predicate, timeout_ms?, interval_ms?, fail_on_timeout? }` polls **server-side** until predicate matches — predicate = `status: 200` OR `body_path: { path: ".events.0.orderID", equals: 7 }` OR `body_jq: ".events | length > 0"` (minimal subset: ` | length N` or `` truthy). Use instead of agent-side polling loops for eventually-consistent reads. **auto-starts app** if not running. Use instead of `curl` to test endpoints. +- **`wait_for_subscription_message`** — args: `topic`, optional `subscription`, `timeout_ms` (default 10000), `since` (ISO/RFC3339), `match` (top-level key/value JSON filter, e.g. `{"CustomerID":"cust_42"}`). Blocks until the next message on the topic is fully processed by a subscription handler (returns or errors), then returns `{outcome, payload, duration_ms, handler_error, trace_id}`. Use to bridge async Pub/Sub work into a synchronous verify step — beats polling read-side endpoints + introspecting via `get_pubsub`/`get_traces`. +- **`query_database`** — args: `queries` (array of `{database, query}`). Runs SQL against named DBs, multiple queries one call. Beats `encore db conn-uri` + `psql` round-trips. +- **`get_traces`** — args: optional `service`, `endpoint`, `error` (`"true"`/`"false"`), `start_time` / `end_time` (ISO), `limit`. Returns recent request traces (timing, status, ids). +- **`get_trace_spans`** — args: `trace_ids` (array IDs from `get_traces`). Returns full per-span details for deep debugging. +- **`get_objects`** — args: `buckets` (array of bucket names). Lists objects + metadata in storage buckets. +- **`search_docs`** — args: `query`, optional `hits_per_page`, `page`, `facet_filters`. Algolia-backed Encore docs search. +- **`get_docs`** — args: `paths` (array of doc paths, e.g. `/docs/go/primitives/databases`). Fetches full doc pages found via `search_docs`. + +### When to reach for it + +| Situation | Tool | +|---|---| +| "What services / endpoints / databases exist?" | `get_metadata` once | +| "Test my new POST /orders endpoint" | `call_endpoint` (auto-starts app) | +| "Did the Pub/Sub handler run after I published?" | `wait_for_subscription_message` | +| "Endpoint output is eventually consistent (e.g. read-after-publish)" | `call_endpoint` with `retry_until` | +| "Why did last request fail?" | `get_traces` then `get_trace_spans` | +| "How does Encore API surface work?" | `search_docs` then `get_docs` | + +- **MCP only for runtime data** (`call_endpoint`, `query_database`, `get_traces`, `get_objects`, `search_docs`/`get_docs`). For **static structure** declared in source (services, endpoints, topics, subscriptions, schemas, secrets, middleware, cron jobs), `Glob`+`Grep`+`Read` faster + more reliable than `get_*` tool. + +### Cloud MCP (deployed environments) + +If deployed Encore Cloud, also register `encore-cloud` via `claude mcp add --transport http encore-cloud https://api.encore.cloud/mcp` for prod traces / deploy state — `encore-local` only sees local app. + +## Encore check (verify app builds + endpoints work) + +`encore check` compiles, boots, health-checks app, optionally runs `curl` once healthy. Use instead of manual `encore run + healthz poll + curl`. + +```bash +encore check # compile + boot only +encore check 'curl /ping' # GET a relative path +encore check 'curl /orders -X POST -d "{\"customer_id\":\"c1\",\"amount_cents\":1999}"' # POST with JSON body (flags after path) +encore check 'curl /a; curl /b' # chain in one quoted string +encore check 'curl /a' 'curl /b' # or as separate quoted args +encore check < commands.txt # one curl per line, piped from file +``` + +Rules embedded curl DSL: +- **Paths relative** (start with `/`). Use `curl /orders/1`, **not** `curl http://localhost:4000/orders/1` — host/port supplied by `encore check`. Absolute URL fails with `curl path "http..." must be relative`. +- **Path first, flags after.** `curl /orders -X POST -d '...'` works; `curl -X POST /orders ...` fails — parser reads first token after `curl` as path, rejects flags there (`curl path "-X" must be relative`). +- One curl per quoted command. Chain `;` inside one quoted string, pass multiple quoted args, or pipe file one curl per line. + +## Pub/sub verification + +- Delivery async + at-least-once + not order-preserving. +- For "most-recent first" by publish order, DO NOT sort by `created_at = NOW()` or subscription-side row id — both subscription-insert order, at-least-once can flip. Sort by column monotonic with publish (entity id from event payload, or publish-time sequence in event). +- Handler-only checks, skip infra: `et.Topic(T).PublishedMessages()`. + +## Encore Go domain knowledge + +### Application structure + +Encore uses monorepo design — one app = entire backend. Enables distributed tracing + Encore Flow via unified application model. Supports monolith + microservices with monolith-style DX. + +Directory structure: +/app-name + encore.app + service1/ + migrations/ + 1_create_table.up.sql + service1.go + service1_test.go + service2/ + service2.go + +Sub-packages internal to services, cannot define APIs, used for helpers + code organization. + +Large apps — group related services into system directories (logical groupings, no special runtime behavior): +/app-name + encore.app + system1/ + service1/ + service2/ + system2/ + service3/ + +### API definition + +Create type-safe APIs from regular Go functions via //encore:api annotation. + +Access controls: +- public: Accessible to anyone on internet +- private: Only accessible within app + via cron jobs +- auth: Public but requires valid auth + +Function signatures: +func Foo(ctx context.Context, p *Params) (*Response, error) // full +func Foo(ctx context.Context) (*Response, error) // response only +func Foo(ctx context.Context, p *Params) error // request only +func Foo(ctx context.Context) error // minimal + +Request/response data locations: +- header: Use `header` tag for HTTP headers +- query: Default GET/HEAD/DELETE, uses snake_case, supports basic types/slices +- body: Default other methods, uses `json` tag, supports complex types + +Path parameters: Use :name for variables, *name for wildcards. Place at end of path. + +Sensitive data: +- Field level: `encore:"sensitive"` tag, auto-redacted in tracing +- Endpoint level: Add `sensitive` to //encore:api annotation + +Type support by location: +- headers/path: bool, numeric, string, time.Time, UUID, json.RawMessage +- query: All above plus lists +- body: All types including structs, maps, pointers + +### Services + +Service defined by creating at least one API within Go package. Package name = service name. + +//encore:service annotation enables custom init + graceful shutdown: + +type Service struct { + // Dependencies here +} + +func initService() (*Service, error) { + // Initialization code +} + +//encore:api public +func (s *Service) MyAPI(ctx context.Context) error { + // API implementation +} + +Graceful shutdown via Shutdown method: +func (s *Service) Shutdown(force context.Context) +- Graceful phase: Several seconds for completion +- Forced phase: When force context canceled, terminate immediately + +### Raw endpoints + +Lower-level HTTP access (webhooks, WebSockets): + +//encore:api public raw +func Webhook(w http.ResponseWriter, req *http.Request) { + // Process raw HTTP request +} + +//encore:api public raw method=POST path=/webhook/:id +func Webhook(w http.ResponseWriter, req *http.Request) { + id := encore.CurrentRequest().PathParams.Get("id") +} + +### SQL databases + +Encore treats SQL databases as logical resources with native PostgreSQL support. + +Create database: +var tododb = sqldb.NewDatabase("todo", sqldb.DatabaseConfig{ + Migrations: "./migrations", +}) + +Migration naming: number_description.up.sql (e.g., 1_create_table.up.sql) +Migrations folder structure: +service/ + migrations/ + 1_create_table.up.sql + 2_add_field.up.sql + service.go + +Data operations: +// Insert +_, err := tododb.Exec(ctx, ` + INSERT INTO todo_item (id, title, done) + VALUES ($1, $2, $3) +`, id, title, done) + +// Query +err := tododb.QueryRow(ctx, ` + SELECT id, title, done FROM todo_item LIMIT 1 +`).Scan(&item.ID, &item.Title, &item.Done) +// Use errors.Is(err, sqldb.ErrNoRows) for no results + +Always Scan into typed struct fields, never `interface{}` slots — compiler enforces column-to-field shape + catches drift between SELECT list + destination struct. + +CLI commands: +- encore db shell database-name [--env=name] - Open psql shell +- encore db conn-uri database-name [--env=name] - Output connection string +- encore db proxy [--env=name] - Setup local connection proxy + +### External databases + +Existing databases — create dedicated package with lazy connection pool: + +package externaldb + +import ( + "context" + "fmt" + "github.com/jackc/pgx/v4/pgxpool" + "go4.org/syncutil" +) + +func Get(ctx context.Context) (*pgxpool.Pool, error) { + err := once.Do(func() error { + var err error + pool, err = setup(ctx) + return err + }) + return pool, err +} + +var ( + once syncutil.Once + pool *pgxpool.Pool +) + +var secrets struct { + ExternalDBPassword string +} + +func setup(ctx context.Context) (*pgxpool.Pool, error) { + connString := fmt.Sprintf("postgresql://%s:%s@hostname:port/dbname?sslmode=require", + "user", secrets.ExternalDBPassword) + return pgxpool.Connect(ctx, connString) +} + +Works with Cassandra, DynamoDB, BigTable, MongoDB, Neo4j, other services. + +### Shared databases + +Default: per-service databases for isolation. Share via sqldb.Named: + +// In report service, access todo service's database: +var todoDB = sqldb.Named("todo") + +//encore:api method=GET path=/report/todo +func CountCompletedTodos(ctx context.Context) (*ReportResponse, error) { + var report ReportResponse + err := todoDB.QueryRow(ctx,` + SELECT COUNT(*) FROM todo_item WHERE completed = TRUE + `).Scan(&report.Total) + return &report, err +} + +### Cron jobs + +Declarative periodic tasks. Does not run locally or in Preview Environments. + +import "encore.dev/cron" + +var _ = cron.NewJob("welcome-email", cron.JobConfig{ + Title: "Send welcome emails", + Every: 2 * cron.Hour, + Endpoint: SendWelcomeEmail, +}) + +//encore:api private +func SendWelcomeEmail(ctx context.Context) error { + return nil +} + +Scheduling options: +- Every: Must divide 24 hours evenly (e.g., 10 * cron.Minute, 6 * cron.Hour) +- Schedule: Cron expressions (e.g., "0 4 15 * *" for 4am UTC on 15th) + +Requirements: Endpoints must be idempotent, no request parameters, signature func(context.Context) error or func(context.Context) (*T, error) + +### Caching + +Redis-based distributed caching. + +import "encore.dev/storage/cache" + +var MyCacheCluster = cache.NewCluster("my-cache-cluster", cache.ClusterConfig{ + EvictionPolicy: cache.AllKeysLRU, +}) + +// Keyspace with type safety +var RequestsPerUser = cache.NewIntKeyspace[auth.UID](cluster, cache.KeyspaceConfig{ + KeyPattern: "requests/:key", + DefaultExpiry: cache.ExpireIn(10 * time.Second), +}) + +// Structured keys +type MyKey struct { + UserID auth.UID + ResourcePath string +} +var ResourceRequestsPerUser = cache.NewIntKeyspace[MyKey](cluster, cache.KeyspaceConfig{ + KeyPattern: "requests/:UserID/:ResourcePath", + DefaultExpiry: cache.ExpireIn(10 * time.Second), +}) + +Supports strings, integers, floats, structs, sets, ordered lists. + +### Object storage + +Cloud-agnostic API compatible with S3, GCS, S3-compatible services. + +var ProfilePictures = objects.NewBucket("profile-pictures", objects.BucketConfig{ + Versioned: false, +}) + +// Public bucket with CDN +var PublicAssets = objects.NewBucket("public-assets", objects.BucketConfig{ + Public: true, +}) + +Operations: Upload, Download, List, Remove, Attrs, Exists + +Bucket references for permissions: +type myPerms interface { + objects.Downloader + objects.Uploader +} +ref := objects.BucketRef[myPerms](bucket) + +### Pub/Sub + +Async event broadcasting with automatic infra provisioning. + +type SignupEvent struct{ UserID int } + +var Signups = pubsub.NewTopic[*SignupEvent]("signups", pubsub.TopicConfig{ + DeliveryGuarantee: pubsub.AtLeastOnce, +}) + +// Publishing +messageID, err := Signups.Publish(ctx, &SignupEvent{UserID: id}) + +// Topic reference +signupRef := pubsub.TopicRef[pubsub.Publisher[*SignupEvent]](Signups) + +// Subscribing +var _ = pubsub.NewSubscription( + user.Signups, "send-welcome-email", + pubsub.SubscriptionConfig[*SignupEvent]{ + Handler: SendWelcomeEmail, + }, +) + +// Method handler with dependency injection +var _ = pubsub.NewSubscription( + user.Signups, "send-welcome-email", + pubsub.SubscriptionConfig[*SignupEvent]{ + Handler: pubsub.MethodHandler((*Service).SendWelcomeEmail), + }, +) + +Delivery guarantees: +- AtLeastOnce: Handlers must be idempotent +- ExactlyOnce: Stronger guarantees (AWS: 300 msg/sec, GCP: 3000+ msg/sec) + +Ordering: Use OrderingAttribute matching pubsub-attr tag + +Testing: +msgs := et.Topic(Signups).PublishedMessages() +assert.Len(t, msgs, 1) + +### Secrets + +Built-in secrets manager for API keys, passwords, private keys. + +var secrets struct { + SSHPrivateKey string + GitHubAPIToken string +} + +func callGitHub(ctx context.Context) { + req.Header.Add("Authorization", "token " + secrets.GitHubAPIToken) +} + +CLI management: +- encore secret set --type production secret-name +- encore secret set --type development secret-name +- encore secret set --env env-name secret-name (env-specific override) + +Types: production (prod), development (dev), preview (pr), local + +Local override via .secrets.local.cue: +GitHubAPIToken: "my-local-override-token" + +### API calls + +Call APIs like regular functions with automatic type checking: + +import "encore.app/hello" + +//encore:api public +func MyOtherAPI(ctx context.Context) error { + resp, err := hello.Ping(ctx, &hello.PingParams{Name: "World"}) + if err == nil { + log.Println(resp.Message) // "Hello, World!" + } + return err +} + +### Errors + +Structured errors via encore.dev/beta/errs package. + +return &errs.Error{ + Code: errs.NotFound, + Message: "sprocket not found", +} +// Returns HTTP 404 {"code": "not_found", "message": "sprocket not found"} + +Wrapping: +errs.Wrap(err, msg, metaPairs...) +errs.WrapCode(err, code, msg, metaPairs...) + +Builder pattern: +eb := errs.B().Meta("board_id", params.ID) +return eb.Code(errs.NotFound).Msg("board not found").Err() + +Error codes: OK(200), Canceled(499), Unknown(500), InvalidArgument(400), DeadlineExceeded(504), NotFound(404), AlreadyExists(409), PermissionDenied(403), ResourceExhausted(429), FailedPrecondition(400), Aborted(409), OutOfRange(400), Unimplemented(501), Internal(500), Unavailable(503), DataLoss(500), Unauthenticated(401) + +Inspection: errs.Code(err), errs.Meta(err), errs.Details(err) + +### Authentication + +Flexible auth with different access levels. + +import "encore.dev/beta/auth" + +// Basic +//encore:authhandler +func AuthHandler(ctx context.Context, token string) (auth.UID, error) { + // Validate token and return user ID +} + +// With user data +type Data struct { + Username string +} + +//encore:authhandler +func AuthHandler(ctx context.Context, token string) (auth.UID, *Data, error) { + // Return user ID and custom data +} + +// Structured auth params +type MyAuthParams struct { + SessionCookie *http.Cookie `cookie:"session"` + ClientID string `query:"client_id"` + Authorization string `header:"Authorization"` +} + +//encore:authhandler +func AuthHandler(ctx context.Context, p *MyAuthParams) (auth.UID, error) { + // Process structured auth params +} + +Usage: auth.Data(), auth.UserID() +Override for testing: auth.WithContext(ctx, auth.UID("my-user-id"), &MyAuthData{}) + +Error handling: +return "", &errs.Error{ + Code: errs.Unauthenticated, + Message: "invalid token", +} + +### Configuration + +Env-specific config via CUE files. + +package mysvc + +import "encore.dev/config" + +type SomeConfigType struct { + ReadOnly config.Bool + Example config.String +} + +var cfg *SomeConfigType = config.Load[*SomeConfigType]() + +CUE tags for constraints: +type FooBar { + A int `cue:">100"` + B int `cue:"A-50"` + C int `cue:"A+B"` +} + +Config types: config.String, config.Bool, config.Int, config.Float64, config.Time, config.UUID, config.Value[T], config.Values[T] + +Meta values: +- APIBaseURL, Environment.Name, Environment.Type (production/development/ephemeral/test), Environment.Cloud (aws/gcp/encore/local) + +Testing: et.SetCfg(cfg.SendEmails, true) + +CUE patterns: +- Defaults: value: type | *default_value +- Switch: array with conditionals, take [0] + +### CORS + +Configure in encore.app file: +- debug: Enable CORS debug logging +- allow_headers: Additional accepted headers ("*" allows all) +- expose_headers: Additional exposed headers +- allow_origins_without_credentials: Defaults to ["*"] +- allow_origins_with_credentials: For authenticated requests, supports wildcards like "https://*.example.com" + +### Metadata + +Access app + request info via encore.dev package. + +// Application metadata +meta := encore.Meta() +// meta.AppID, meta.APIBaseURL, meta.Environment, meta.Build, meta.Deploy + +// Request metadata +req := encore.CurrentRequest() +// req.Service, req.Endpoint, req.Path, req.StartTime + +// Cloud-specific behavior +switch encore.Meta().Environment.Cloud { +case encore.CloudAWS: + return writeIntoRedshift(ctx, action, user) +case encore.CloudGCP: + return writeIntoBigQuery(ctx, action, user) +} + +### Middleware + +Reusable code running before/after API requests. + +//encore:middleware global target=all +func ValidationMiddleware(req middleware.Request, next middleware.Next) middleware.Response { + payload := req.Data().Payload + if validator, ok := payload.(interface { Validate() error }); ok { + if err := validator.Validate(); err != nil { + err = errs.WrapCode(err, errs.InvalidArgument, "validation failed") + return middleware.Response{Err: err} + } + } + return next(req) +} + +// With dependency injection +//encore:middleware target=all +func (s *Service) MyMiddleware(req middleware.Request, next middleware.Next) middleware.Response { + // Implementation +} + +// Tag-based targeting +//encore:middleware target=tag:cache +func CachingMiddleware(req middleware.Request, next middleware.Next) middleware.Response { + // ... +} + +//encore:api public method=GET path=/user/:id tag:cache +func GetUser(ctx context.Context, id string) (*User, error) { + // Implementation +} + +Ordering: Global before service-specific, lexicographic by filename. + +### Mocking + +Built-in mocking for isolated testing. + +// Mock endpoint for single test +func Test_Something(t *testing.T) { + t.Parallel() + et.MockEndpoint(products.GetPrice, func(ctx context.Context, p *products.PriceParams) (*products.PriceResponse, error) { + return &products.PriceResponse{Price: 100}, nil + }) +} + +// Mock endpoint for all tests in package +func TestMain(m *testing.M) { + et.MockEndpoint(products.GetPrice, func(ctx context.Context, p *products.PriceParams) (*products.PriceResponse, error) { + return &products.PriceResponse{Price: 100}, nil + }) + os.Exit(m.Run()) +} + +// Mock entire service +et.MockService("products", &products.Service{ + SomeField: "a testing value", +}) + +// Type-safe service mocking +et.MockService[products.Interface]("products", &myMockObject{}) + +### Testing + +Run tests: encore test ./... +Supports all standard go test flags. Built-in tracing at localhost:9400. + +Database testing: +- Automatic setup in separate cluster, optimized for speed +- Temporary databases: et.NewTestDatabase() creates isolated, fully migrated DB + +Service structs: Lazy init, instance sharing between tests +- Isolate: et.EnableServiceInstanceIsolation() + +### Validation + +Automatic request validation via Validate() method. + +type MyRequest struct { + Email string +} + +func (r *MyRequest) Validate() error { + if !isValidEmail(r.Email) { + return &errs.Error{Code: errs.InvalidArgument, Message: "invalid email"} + } + return nil +} + +Validation runs after deserialization, before handler. Non-errs.Error errors become InvalidArgument (HTTP 400). + +### CGO + +Enable in encore.app: +{ + "id": "my-app-id", + "build": { + "cgo_enabled": true + } +} +Uses Ubuntu builder with gcc. Libraries must support static linking. + +### Clerk auth + +Implement Clerk auth: + +package auth + +import "github.com/clerkinc/clerk-sdk-go/clerk" + +type Service struct { + client clerk.Client +} + +func initService() (*Service, error) { + client, err := clerk.NewClient(secrets.ClientSecretKey) + if err != nil { + return nil, err + } + return &Service{client: client}, nil +} + +type UserData struct { + ID string + Username *string + FirstName *string + LastName *string + ProfileImageURL string + PrimaryEmailAddressID *string + EmailAddresses []clerk.EmailAddress +} + +//encore:authhandler +func (s *Service) AuthHandler(ctx context.Context, token string) (auth.UID, *UserData, error) { + // Token verification and user data retrieval +} + +Set secrets: +- encore secret set --prod ClientSecretKey +- encore secret set --dev ClientSecretKey + +### Dependency injection + +Add dependencies as struct fields for easy testing: + +package email + +//encore:service +type Service struct { + sendgridClient *sendgrid.Client +} + +func initService() (*Service, error) { + client, err := sendgrid.NewClient() + if err != nil { + return nil, err + } + return &Service{sendgridClient: client}, nil +} + +//encore:api private +func (s *Service) Send(ctx context.Context, p *SendParams) error { + // Use s.sendgridClient +} + +// For testing, use interface +type sendgridClient interface { + SendEmail(...) +} + +func TestFoo(t *testing.T) { + svc := &Service{sendgridClient: &myMockClient{}} + // Test +} + +### Pub/Sub outbox + +Transactional outbox pattern for database + Pub/Sub consistency. + +var SignupsTopic = pubsub.NewTopic[*SignupEvent](/* ... */) +ref := pubsub.TopicRef[pubsub.Publisher[*SignupEvent]](SignupsTopic) +ref = outbox.Bind(ref, outbox.TxPersister(tx)) + +Required schema: +CREATE TABLE outbox ( + id BIGSERIAL PRIMARY KEY, + topic TEXT NOT NULL, + data JSONB NOT NULL, + inserted_at TIMESTAMPTZ NOT NULL +); +CREATE INDEX outbox_topic_idx ON outbox (topic, id); + +Relay setup: +type Service struct { + signupsRef pubsub.Publisher[*SignupEvent] +} + +func initService() (*Service, error) { + relay := outbox.NewRelay(outbox.SQLDBStore(db)) + signupsRef := pubsub.TopicRef[pubsub.Publisher[*SignupEvent]](SignupsTopic) + outbox.RegisterTopic(relay, signupsRef) + go relay.PollForMessage(context.Background(), -1) + return &Service{signupsRef: signupsRef}, nil +} + +Supports: encore.dev/storage/sqldb, database/sql, github.com/jackc/pgx/v5 + +### Encore Toolbar (frontend dev panel) + +Dev-only browser panel: intercepts frontend HTTP calls, captures Encore trace IDs, jumps to traces in the dashboard. Install: add `` early in `` (no `async`/`defer`). Reach for it when a frontend talks to an Encore Go backend. + +### Example apps + +- Hello World: https://github.com/encoredev/examples/tree/main/hello-world +- URL Shortener: https://github.com/encoredev/examples/tree/main/url-shortener +- Uptime Monitor: https://github.com/encoredev/examples/tree/main/uptime + +## Encore CLI reference + +Execution: +- encore help [command] - Lists available commands (or shows usage for specific command). Reach for it when unsure which subcommand or flag to use. +- encore run [--debug] [--watch=true] [-p port] [flags] - Runs app. Before starting yourself, check if already running by polling `http://localhost:/__encore/healthz` (default port `4000`) — `200` = healthy, hit endpoints directly without re-running. +- encore check ['curl ...'; 'curl ...'] | encore check < commands.txt - Compile + boot app, verify every service healthy, optionally run curl commands. See dedicated section above. +- encore test ./... [go test flags] - Wraps `go test ./...` with Encore's infra provisioning — boots isolated test databases, Pub/Sub, etc. before handing off to `go test`. Accepts all `go test` flags, plus `--prepare`, `--codegen-debug`, `--trace`. +- encore exec path/to/script [args...] - Run an executable script against the local Encore app + +App management: +- encore app clone [app-id] [directory] - Clone app +- encore app create [name] [--example=name] [-l go] - Create new app +- encore app init [name] - Create from existing repo +- encore app link [app-id] [-f] - Link app with server + +Authentication: +- encore auth login/logout/signup/whoami + +Daemon: +- encore daemon - Restart daemon +- encore daemon env - Output environment info + +Database: +- encore db shell database-name [--env=name] - psql shell (--write, --admin, --superuser) +- encore db conn-uri database-name [--env=name] - Connection string +- encore db proxy [--env=name] - Local proxy +- encore db reset - Reset databases + +Code generation: +- encore gen client [app-id] [--env=name] [--lang=lang] - Generate API client + Languages: go, typescript, javascript, openapi + +Logging: +- encore logs [--env=prod] [--json] [-q] - Stream logs + +Kubernetes: +- encore k8s configure --env=ENV_NAME - Update kubectl config + +Secrets: +- encore secret set --type TYPE (types: production, development, preview, local) +- encore secret set --env env-name +- encore secret list [keys...] +- encore secret delete + +Namespaces (infrastructure environments, alias `encore ns`): +- encore namespace list [--output=columns|json] - List infra namespaces +- encore namespace create NAME - Create a namespace +- encore namespace switch [--create] NAME - Switch active namespace +- encore namespace delete NAME - Delete a namespace + +MCP (programmatic access to the local app — same surface as `.mcp.json`): +- encore mcp run - stdio-based MCP session +- encore mcp start - SSE-based MCP session; prints the SSE URL + +Config: +- encore config [] [--app|--global|--all] - Get/set CLI configuration + +Telemetry: +- encore telemetry - Status +- encore telemetry enable / disable - Toggle telemetry reporting + +LLM rules: +- encore llm-rules init - Generate LLM rule files for this project + +Random data (utility): +- encore rand uuid [-1|-4|-6|-7] - Generate UUID (default v4) +- encore rand bytes N [-f format] - Generate N random bytes +- encore rand words [--sep=SEP] NUM - Generate memorable passphrase + +Deploy (alpha): +- encore alpha deploy --env= (--commit= | --branch=) - Deploy app to a cloud env + +Version: +- encore version - Report version +- encore version update - Check and apply updates + +Build: +- encore build docker IMAGE_TAG [--base string] [--push] [--cgo] [--os] [--arch] - Build Docker image \ No newline at end of file diff --git a/.gitignore b/.gitignore index ccc0bb2..78f83da 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ /.encore encore.gen.go encore.gen.cue +/encore.gen +.secrets.local.cue .secrets.local.cue # Go diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..fb8e4ab --- /dev/null +++ b/.mcp.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "encore-local": { + "args": [ + "mcp", + "run", + "--app=q55oi" + ], + "command": "encore" + } + } +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..4ececa6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Connect to server", + "type": "go", + "request": "attach", + "mode": "remote", + "remotePath": "${workspaceFolder}", + "port": 2345, + "host": "127.0.0.1" + } + ] +} diff --git a/admin/admin.go b/admin/admin.go new file mode 100644 index 0000000..2a6e340 --- /dev/null +++ b/admin/admin.go @@ -0,0 +1,321 @@ +// Service admin provides administrative endpoints for managing application data. +package admin + +import ( + "context" + "errors" + "time" + + authsvc "encore.app/auth" + profilessvc "encore.app/profiles" + "encore.dev/beta/errs" + "encore.dev/storage/sqldb" + "encore.dev/types/uuid" + "github.com/jackc/pgx/v5/pgconn" +) + +var profilesDB = sqldb.Named("profiles") + +type Profile struct { + UserID uuid.UUID `json:"user_id"` + Email string `json:"email"` + DisplayName string `json:"display_name"` + AvatarURL string `json:"avatar_url"` + IsArtist bool `json:"is_artist"` + Role string `json:"role"` + Status profilessvc.Status `json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type ProfileParams struct { + DisplayName string `json:"display_name"` + AvatarURL string `json:"avatar_url"` +} + +type RegisterParams struct { + Email string `json:"email"` + DisplayName string `json:"display_name"` + AvatarURL string `json:"avatar_url"` + Password string `json:"password" encore:"sensitive"` +} + +type ListProfilesResponse struct { + Profiles []*Profile `json:"profiles"` +} + +// ListProfiles returns all user profiles, ordered by user ID. +// +//encore:api auth method=GET path=/admin/profiles +func ListProfiles(ctx context.Context) (*ListProfilesResponse, error) { + rows, err := profilesDB.Query(ctx, ` + SELECT user_id, email, display_name, avatar_url, role, status, is_artist, created_at, updated_at + FROM user_profiles + ORDER BY user_id + `) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to list profiles") + } + defer rows.Close() + + profiles := []*Profile{} + for rows.Next() { + var p Profile + if err := rows.Scan(&p.UserID, &p.Email, &p.DisplayName, &p.AvatarURL, &p.Role, &p.Status, &p.IsArtist, &p.CreatedAt, &p.UpdatedAt); err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to scan profile") + } + profiles = append(profiles, &p) + } + if err := rows.Err(); err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to list profiles") + } + return &ListProfilesResponse{Profiles: profiles}, nil +} + +// GetProfile returns the profile for the given user. +// +//encore:api auth method=GET path=/admin/profiles/:userID +func GetProfile(ctx context.Context, userID uuid.UUID) (*Profile, error) { + p := Profile{UserID: userID} + err := profilesDB.QueryRow(ctx, ` + SELECT email, display_name, avatar_url, role, status, is_artist, created_at, updated_at FROM user_profiles WHERE user_id = $1 + `, userID).Scan(&p.Email, &p.DisplayName, &p.AvatarURL, &p.Role, &p.Status, &p.IsArtist, &p.CreatedAt, &p.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to fetch profile") + } + return &p, nil +} + +// InsertProfile creates a new user profile with a server-generated UUID v4, +// delegating credential setup to the auth service. +// +//encore:api auth method=POST path=/admin/profiles +func InsertProfile(ctx context.Context, p *RegisterParams) (*Profile, error) { + userID, err := uuid.NewV4() + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to generate profile id") + } + profile := Profile{UserID: userID, Email: p.Email, DisplayName: p.DisplayName, AvatarURL: p.AvatarURL} + err = profilesDB.QueryRow(ctx, ` + INSERT INTO user_profiles (user_id, email, display_name, avatar_url) + VALUES ($1, $2, $3, $4) + RETURNING role, status, is_artist, created_at, updated_at + `, userID, p.Email, p.DisplayName, p.AvatarURL).Scan(&profile.Role, &profile.Status, &profile.IsArtist, &profile.CreatedAt, &profile.UpdatedAt) + if isUniqueViolation(err) { + return nil, &errs.Error{Code: errs.AlreadyExists, Message: "email already registered"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to create profile") + } + if err := authsvc.Register(ctx, &authsvc.RegisterParams{UserID: userID, Password: p.Password}); err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to register credentials") + } + return &profile, nil +} + +// UpdateProfile replaces the data of any user's profile. +// +//encore:api auth method=PUT path=/admin/profiles/:userID +func UpdateProfile(ctx context.Context, userID uuid.UUID, p *ProfileParams) (*Profile, error) { + profile := Profile{UserID: userID, DisplayName: p.DisplayName, AvatarURL: p.AvatarURL} + err := profilesDB.QueryRow(ctx, ` + UPDATE user_profiles + SET display_name = $2, avatar_url = $3, updated_at = NOW() + WHERE user_id = $1 + RETURNING email, role, status, is_artist, created_at, updated_at + `, userID, p.DisplayName, p.AvatarURL).Scan(&profile.Email, &profile.Role, &profile.Status, &profile.IsArtist, &profile.CreatedAt, &profile.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to update profile") + } + return &profile, nil +} + +type UpdateProfileStatusParams struct { + Status profilessvc.Status `json:"status"` +} + +func (p *UpdateProfileStatusParams) Validate() error { + if !p.Status.IsValid() { + return &errs.Error{Code: errs.InvalidArgument, Message: "invalid status"} + } + return nil +} + +// UpdateProfileStatus sets the status of any user's profile. +// +//encore:api auth method=PUT path=/admin/profiles/:userID/status +func UpdateProfileStatus(ctx context.Context, userID uuid.UUID, p *UpdateProfileStatusParams) (*Profile, error) { + profile := Profile{UserID: userID, Status: p.Status} + err := profilesDB.QueryRow(ctx, ` + UPDATE user_profiles + SET status = $2, updated_at = NOW() + WHERE user_id = $1 + RETURNING email, display_name, avatar_url, role, is_artist, created_at, updated_at + `, userID, p.Status).Scan(&profile.Email, &profile.DisplayName, &profile.AvatarURL, &profile.Role, &profile.IsArtist, &profile.CreatedAt, &profile.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to update profile status") + } + return &profile, nil +} + +type UpdateProfileRoleParams struct { + Role string `json:"role"` +} + +func (p *UpdateProfileRoleParams) Validate() error { + if !authsvc.IsValidRole(p.Role) { + return &errs.Error{Code: errs.InvalidArgument, Message: "invalid role"} + } + return nil +} + +// UpdateProfileRole sets the role of any user's profile. +// +//encore:api auth method=PUT path=/admin/profiles/:userID/role +func UpdateProfileRole(ctx context.Context, userID uuid.UUID, p *UpdateProfileRoleParams) (*Profile, error) { + profile := Profile{UserID: userID, Role: p.Role} + err := profilesDB.QueryRow(ctx, ` + UPDATE user_profiles + SET role = $2, updated_at = NOW() + WHERE user_id = $1 + RETURNING email, display_name, avatar_url, status, is_artist, created_at, updated_at + `, userID, p.Role).Scan(&profile.Email, &profile.DisplayName, &profile.AvatarURL, &profile.Status, &profile.IsArtist, &profile.CreatedAt, &profile.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to update profile role") + } + return &profile, nil +} + +type UpdateProfileArtistParams struct { + IsArtist bool `json:"is_artist"` +} + +// UpdateProfileArtist sets the artist flag of any user's profile. +// +//encore:api auth method=PUT path=/admin/profiles/:userID/artist +func UpdateProfileArtist(ctx context.Context, userID uuid.UUID, p *UpdateProfileArtistParams) (*Profile, error) { + profile := Profile{UserID: userID, IsArtist: p.IsArtist} + err := profilesDB.QueryRow(ctx, ` + UPDATE user_profiles + SET is_artist = $2, updated_at = NOW() + WHERE user_id = $1 + RETURNING email, display_name, avatar_url, role, status, created_at, updated_at + `, userID, p.IsArtist).Scan(&profile.Email, &profile.DisplayName, &profile.AvatarURL, &profile.Role, &profile.Status, &profile.CreatedAt, &profile.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to update profile artist flag") + } + return &profile, nil +} + +// DeleteProfile removes any user's profile. +// +//encore:api auth method=DELETE path=/admin/profiles/:userID +func DeleteProfile(ctx context.Context, userID uuid.UUID) error { + res, err := profilesDB.Exec(ctx, ` + DELETE FROM user_profiles WHERE user_id = $1 + `, userID) + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to delete profile") + } + if res.RowsAffected() == 0 { + return &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + return nil +} + +type PersonalData struct { + UserID uuid.UUID `json:"user_id"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Address string `json:"address"` + City string `json:"city"` + Country string `json:"country"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type PersonalDataParams struct { + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Address string `json:"address"` + City string `json:"city"` + Country string `json:"country"` +} + +// GetPersonalData returns the personal data for the given user. +// +//encore:api auth method=GET path=/admin/profiles/:userID/personal-data +func GetPersonalData(ctx context.Context, userID uuid.UUID) (*PersonalData, error) { + pd := PersonalData{UserID: userID} + err := profilesDB.QueryRow(ctx, ` + SELECT first_name, last_name, address, city, country, created_at, updated_at + FROM personal_data WHERE user_id = $1 + `, userID).Scan(&pd.FirstName, &pd.LastName, &pd.Address, &pd.City, &pd.Country, &pd.CreatedAt, &pd.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "personal data not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to fetch personal data") + } + return &pd, nil +} + +// UpsertPersonalData creates or replaces the personal data for the given user. +// +//encore:api auth method=PUT path=/admin/profiles/:userID/personal-data +func UpsertPersonalData(ctx context.Context, userID uuid.UUID, p *PersonalDataParams) (*PersonalData, error) { + pd := PersonalData{ + UserID: userID, + FirstName: p.FirstName, + LastName: p.LastName, + Address: p.Address, + City: p.City, + Country: p.Country, + } + err := profilesDB.QueryRow(ctx, ` + INSERT INTO personal_data (user_id, first_name, last_name, address, city, country) + VALUES ($1, $2, $3, $4, $5, $6) + ON CONFLICT (user_id) DO UPDATE + SET first_name = EXCLUDED.first_name, + last_name = EXCLUDED.last_name, + address = EXCLUDED.address, + city = EXCLUDED.city, + country = EXCLUDED.country, + updated_at = NOW() + RETURNING created_at, updated_at + `, userID, p.FirstName, p.LastName, p.Address, p.City, p.Country).Scan(&pd.CreatedAt, &pd.UpdatedAt) + if isForeignKeyViolation(err) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to save personal data") + } + return &pd, nil +} + +// isUniqueViolation reports whether err is a Postgres unique constraint violation. +func isUniqueViolation(err error) bool { + var pgErr *pgconn.PgError + return errors.As(err, &pgErr) && pgErr.Code == "23505" +} + +// isForeignKeyViolation reports whether err is a Postgres foreign key constraint violation. +func isForeignKeyViolation(err error) bool { + var pgErr *pgconn.PgError + return errors.As(err, &pgErr) && pgErr.Code == "23503" +} diff --git a/admin/middleware.go b/admin/middleware.go new file mode 100644 index 0000000..6bb7420 --- /dev/null +++ b/admin/middleware.go @@ -0,0 +1,23 @@ +package admin + +import ( + authsvc "encore.app/auth" + "encore.dev/beta/auth" + "encore.dev/beta/errs" + "encore.dev/middleware" +) + +// RequireAdmin ensures the caller is logged in and has the admin role +// before any endpoint in this service runs. +// +//encore:middleware target=all +func RequireAdmin(req middleware.Request, next middleware.Next) middleware.Response { + if _, ok := auth.UserID(); !ok { + return middleware.Response{Err: &errs.Error{Code: errs.Unauthenticated, Message: "must be logged in"}} + } + data, _ := auth.Data().(*authsvc.AuthData) + if data == nil || !data.Role.IsAdmin() { + return middleware.Response{Err: &errs.Error{Code: errs.PermissionDenied, Message: "admin role required"}} + } + return next(req) +} diff --git a/admin/system.go b/admin/system.go new file mode 100644 index 0000000..23e3c34 --- /dev/null +++ b/admin/system.go @@ -0,0 +1,24 @@ +package admin + +import ( + "context" + + authsvc "encore.app/auth" + profilessvc "encore.app/profiles" +) + +type SystemOptionsResponse struct { + Roles []authsvc.RoleOption `json:"roles"` + Statuses []profilessvc.StatusOption `json:"statuses"` +} + +// GetSystemOptions returns the valid roles and profile statuses, each with a +// display name and underlying value, for use in admin UI dropdowns. +// +//encore:api auth method=GET path=/admin/system/options +func GetSystemOptions(ctx context.Context) (*SystemOptionsResponse, error) { + return &SystemOptionsResponse{ + Roles: authsvc.Roles(), + Statuses: profilessvc.Statuses(), + }, nil +} diff --git a/auth/auth.go b/auth/auth.go new file mode 100644 index 0000000..4439143 --- /dev/null +++ b/auth/auth.go @@ -0,0 +1,110 @@ +// Service auth owns authentication: credentials, sessions, login and logout. +package auth + +import ( + "context" + "crypto/sha256" + "errors" + "net/http" + "strings" + "time" + + "encore.dev/beta/auth" + "encore.dev/beta/errs" + "encore.dev/storage/sqldb" + "encore.dev/types/uuid" + "golang.org/x/crypto/bcrypt" +) + +var db = sqldb.NewDatabase("auth", sqldb.DatabaseConfig{ + Migrations: "./migrations", +}) + +var profilesDB = sqldb.Named("profiles") + +// PasswordPepper is mixed into every password before hashing, on top of +// bcrypt's per-password salt, so leaked password hashes are useless without it. +var secrets struct { + PasswordPepper string +} + +const sessionTTL = 7 * 24 * time.Hour + +type AuthParams struct { + SessionCookie *http.Cookie `cookie:"session"` + Authorization string `header:"Authorization"` +} + +// AuthData is exposed to authenticated handlers via auth.Data(). +type AuthData struct { + SessionToken uuid.UUID + Role role +} + +// AuthHandler authenticates a request by looking up its session token — taken +// from the session cookie, or as a fallback the "Bearer " Authorization +// header — against active sessions. +// +//encore:authhandler +func AuthHandler(ctx context.Context, p *AuthParams) (auth.UID, *AuthData, error) { + token, ok := sessionToken(p) + if !ok { + return "", nil, &errs.Error{Code: errs.Unauthenticated, Message: "missing session credentials"} + } + + var userID uuid.UUID + err := db.QueryRow(ctx, ` + SELECT user_id FROM sessions WHERE token = $1 AND expires_at > NOW() + `, token).Scan(&userID) + if errors.Is(err, sqldb.ErrNoRows) { + return "", nil, &errs.Error{Code: errs.Unauthenticated, Message: "invalid or expired session"} + } + if err != nil { + return "", nil, errs.WrapCode(err, errs.Internal, "failed to validate session") + } + + var roleStr string + err = profilesDB.QueryRow(ctx, ` + SELECT role FROM user_profiles WHERE user_id = $1 + `, userID).Scan(&roleStr) + if err != nil && !errors.Is(err, sqldb.ErrNoRows) { + return "", nil, errs.WrapCode(err, errs.Internal, "failed to load user role") + } + r := role(roleStr) + if !r.IsValid() { + r = roleUser + } + + return auth.UID(userID.String()), &AuthData{SessionToken: token, Role: r}, nil +} + +func sessionToken(p *AuthParams) (uuid.UUID, bool) { + if p.SessionCookie != nil { + if id, err := uuid.FromString(p.SessionCookie.Value); err == nil { + return id, true + } + } + if rest, ok := strings.CutPrefix(p.Authorization, "Bearer "); ok { + if id, err := uuid.FromString(rest); err == nil { + return id, true + } + } + return uuid.Nil, false +} + +// pepperedPassword pre-hashes the password together with the application-wide +// pepper secret using SHA-256, producing a fixed-size digest. This both mixes +// in the pepper and keeps the input to bcrypt within its 72-byte limit +// regardless of the original password's length. +func pepperedPassword(password string) []byte { + sum := sha256.Sum256([]byte(password + secrets.PasswordPepper)) + return sum[:] +} + +func hashPassword(password string) (string, error) { + hash, err := bcrypt.GenerateFromPassword(pepperedPassword(password), bcrypt.DefaultCost) + if err != nil { + return "", err + } + return string(hash), nil +} diff --git a/auth/credentials.go b/auth/credentials.go new file mode 100644 index 0000000..6f1c358 --- /dev/null +++ b/auth/credentials.go @@ -0,0 +1,62 @@ +package auth + +import ( + "context" + + "encore.dev/beta/auth" + "encore.dev/beta/errs" + "encore.dev/types/uuid" +) + +type RegisterParams struct { + UserID uuid.UUID `json:"user_id"` + Password string `json:"password" encore:"sensitive"` +} + +// Register stores the initial password hash for a newly created profile. +// Called directly (service-to-service) by profiles.Insert during registration, +// since that flow needs to know immediately whether credential setup succeeded. +// +//encore:api private method=POST path=/auth/credentials +func Register(ctx context.Context, p *RegisterParams) error { + hash, err := hashPassword(p.Password) + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to hash password") + } + _, err = db.Exec(ctx, ` + INSERT INTO credentials (user_id, password_hash) VALUES ($1, $2) + `, p.UserID, hash) + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to store credentials") + } + return nil +} + +type SetPasswordParams struct { + Password string `json:"password" encore:"sensitive"` +} + +// SetPassword changes the password for the authenticated user. +// +//encore:api auth method=PUT path=/auth/password +func SetPassword(ctx context.Context, p *SetPasswordParams) error { + uid, ok := auth.UserID() + if !ok { + return &errs.Error{Code: errs.Unauthenticated, Message: "missing auth"} + } + userID, err := uuid.FromString(string(uid)) + if err != nil { + return errs.WrapCode(err, errs.Internal, "invalid user id") + } + hash, err := hashPassword(p.Password) + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to hash password") + } + _, err = db.Exec(ctx, ` + UPDATE credentials SET password_hash = $2, updated_at = NOW() WHERE user_id = $1 + `, userID, hash) + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to update password") + } + return nil +} diff --git a/auth/login.go b/auth/login.go new file mode 100644 index 0000000..e50dcab --- /dev/null +++ b/auth/login.go @@ -0,0 +1,119 @@ +package auth + +import ( + "context" + "errors" + "time" + + "encore.dev/beta/auth" + "encore.dev/beta/errs" + "encore.dev/pubsub" + "encore.dev/storage/sqldb" + "encore.dev/types/uuid" + "golang.org/x/crypto/bcrypt" +) + +type LoginParams struct { + UserID uuid.UUID `json:"user_id"` + Password string `json:"password" encore:"sensitive"` +} + +type LoginResponse struct { + Token uuid.UUID `json:"token"` + ExpiresAt time.Time `json:"expires_at"` +} + +// Login verifies a user's password and issues a new session token. +// +// It is private — external clients authenticate via the public +// profiles.Login, which talks to this service asynchronously over Pub/Sub +// (see LoginRequests/LoginResults below) rather than calling it directly. +// +//encore:api private method=POST path=/auth/internal/login +func Login(ctx context.Context, p *LoginParams) (*LoginResponse, error) { + var hash string + err := db.QueryRow(ctx, ` + SELECT password_hash FROM credentials WHERE user_id = $1 + `, p.UserID).Scan(&hash) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.Unauthenticated, Message: "invalid credentials"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to fetch credentials") + } + if err := bcrypt.CompareHashAndPassword([]byte(hash), pepperedPassword(p.Password)); err != nil { + return nil, &errs.Error{Code: errs.Unauthenticated, Message: "invalid credentials"} + } + + token, err := uuid.NewV4() + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to generate session token") + } + expiresAt := time.Now().Add(sessionTTL) + _, err = db.Exec(ctx, ` + INSERT INTO sessions (token, user_id, expires_at) VALUES ($1, $2, $3) + `, token, p.UserID, expiresAt) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to create session") + } + return &LoginResponse{Token: token, ExpiresAt: expiresAt}, nil +} + +// Logout revokes the session used to authenticate the current request. +// +//encore:api auth method=POST path=/auth/logout +func Logout(ctx context.Context) error { + data, _ := auth.Data().(*AuthData) + if data == nil { + return nil + } + _, err := db.Exec(ctx, `DELETE FROM sessions WHERE token = $1`, data.SessionToken) + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to revoke session") + } + return nil +} + +// LoginRequested is published by profiles.Login to ask this service to +// authenticate a user asynchronously — the public endpoint lives in profiles, +// but the credential check and session issuance happen here. +type LoginRequested struct { + RequestID uuid.UUID + UserID uuid.UUID + Password string `encore:"sensitive"` +} + +var LoginRequests = pubsub.NewTopic[*LoginRequested]("login-requests", pubsub.TopicConfig{ + DeliveryGuarantee: pubsub.AtLeastOnce, +}) + +// LoginCompleted carries the outcome of a LoginRequested message back to +// whichever profiles instance is waiting on the matching RequestID. +type LoginCompleted struct { + RequestID uuid.UUID + OK bool + Token uuid.UUID + ExpiresAt time.Time +} + +var LoginResults = pubsub.NewTopic[*LoginCompleted]("login-results", pubsub.TopicConfig{ + DeliveryGuarantee: pubsub.AtLeastOnce, +}) + +var _ = pubsub.NewSubscription( + LoginRequests, "authenticate", + pubsub.SubscriptionConfig[*LoginRequested]{ + Handler: handleLoginRequested, + }, +) + +func handleLoginRequested(ctx context.Context, ev *LoginRequested) error { + result := &LoginCompleted{RequestID: ev.RequestID} + if resp, err := Login(ctx, &LoginParams{UserID: ev.UserID, Password: ev.Password}); err == nil { + result.OK = true + result.Token = resp.Token + result.ExpiresAt = resp.ExpiresAt + } + _, err := LoginResults.Publish(ctx, result) + return err +} diff --git a/auth/migrations/1_create_auth_tables.up.sql b/auth/migrations/1_create_auth_tables.up.sql new file mode 100644 index 0000000..27b7637 --- /dev/null +++ b/auth/migrations/1_create_auth_tables.up.sql @@ -0,0 +1,15 @@ +CREATE TABLE credentials ( + user_id UUID PRIMARY KEY, + password_hash TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +CREATE TABLE sessions ( + token UUID PRIMARY KEY, + user_id UUID NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + expires_at TIMESTAMPTZ NOT NULL +); + +CREATE INDEX sessions_user_id_idx ON sessions (user_id); diff --git a/auth/roles.go b/auth/roles.go new file mode 100644 index 0000000..8c165f3 --- /dev/null +++ b/auth/roles.go @@ -0,0 +1,43 @@ +package auth + +type role string + +const ( + roleUser role = "user" + roleAdmin role = "admin" +) + +func (r role) String() string { + return string(r) +} + +func (r role) IsValid() bool { + return r == roleUser || r == roleAdmin +} + +func (r role) IsAdmin() bool { + return r == roleAdmin +} + +func (r role) IsUser() bool { + return r == roleUser +} + +// RoleOption describes a valid role for display in admin UIs. +type RoleOption struct { + Name string `json:"name"` + Value string `json:"value"` +} + +// Roles returns every valid role with a display name and its underlying value. +func Roles() []RoleOption { + return []RoleOption{ + {Name: "User", Value: string(roleUser)}, + {Name: "Admin", Value: string(roleAdmin)}, + } +} + +// IsValidRole reports whether value is a valid role. +func IsValidRole(value string) bool { + return role(value).IsValid() +} diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..f654551 --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,7 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue}] +charset = utf-8 +indent_size = 2 +indent_style = space +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..54404c5 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,26 @@ +.DS_Store +.thumbs.db +node_modules + +# .env files +.env* + +# Quasar core related directories +.quasar +/dist +/quasar.config.*.temporary.compiled* + +# Cordova related directories and files +/src-cordova/node_modules +/src-cordova/platforms +/src-cordova/plugins +/src-cordova/www + +# Capacitor related directories and files +/src-capacitor/www +/src-capacitor/node_modules + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..f7f50b4 --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + "recommendations": [ + "editorconfig.editorconfig", + "vue.volar", + "wayou.vscode-todo-highlight" + ], + "unwantedRecommendations": [ + "octref.vetur", + "hookyqr.beautify", + "dbaeumer.jshint", + "ms-vscode.vscode-typescript-tslint-plugin" + ] +} \ No newline at end of file diff --git a/frontend/.vscode/settings.json b/frontend/.vscode/settings.json new file mode 100644 index 0000000..f76e2c8 --- /dev/null +++ b/frontend/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "editor.bracketPairColorization.enabled": true, + "editor.guides.bracketPairs": true, + "js/ts.tsdk.path": "node_modules/typescript/lib", + "search.exclude": { + "dist/": true, + ".quasar/": true, + "/quasar.config.js.temporary.*": true + } +} \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..492d8d7 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,23 @@ +# Quasar App (frontend) + +## Install the dependencies + +```bash +pnpm install +# or: yarn/npm/bun install +``` + +### Start the app in development mode (HMR, error reporting, etc.) + +```bash +quasar dev +``` + +### Build the app for production + +```bash +quasar build +``` + +### Customize the configuration +See [Configuring quasar.config.js](https://v2.quasar.dev/quasar-cli-vite/quasar-config-js). diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..1d82c07 --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1,15 @@ +/** + * Add types (that are not auto-magically added by Quasar CLI already) + * for your custom variables to avoid TypeScript errors, like dynamic + * process.env variables or definitions in dotenv files configured ONLY + * for the /quasar.config file itself. + * + * https://quasar.dev/quasar-cli-vite/handling-import-meta-env#type-inference + * + * @example + * interface ImportMetaEnv { + * readonly MY_VAR: string; + * readonly MY_OTHER_VAR: string; + * } + */ +interface ImportMetaEnv {} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..1f7a261 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,25 @@ + + + + <%= productName %> + + + + + + + + + + + + + + + + + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..48c20ed --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,45 @@ +{ + "name": "frontend", + "version": "0.0.1", + "description": "A Quasar Project", + "productName": "Quasar App", + "author": "fabio ", + "type": "module", + "private": true, + "scripts": { + "dev": "quasar dev", + "build": "quasar build", + "typecheck": "vue-tsc --noEmit", + "zod:sync": "node tools/zod-sync.mjs", + "postinstall": "quasar prepare --silent" + }, + "dependencies": { + "@quasar/extras": "^2.0.0", + "pinia": "^3.0.4", + "quasar": "^2.20.0", + "vue": "^3.5.22", + "vue-advanced-cropper": "^2.8.9", + "vue-i18n": "^11.4.6", + "vue-router": "^5.0.6", + "zod": "^4.4.3" + }, + "devDependencies": { + "@quasar/app-vite": "^3.0.0-rc.2", + "@types/node": "^22.19.11", + "autoprefixer": "^10.4.27", + "typescript": "^6.0.0", + "vue-tsc": "^3.3.3" + }, + "keywords": [ + "quasar", + "quasar-app", + "quasar-cli", + "quasar-app-vite", + "vite", + "vue", + "vuejs" + ], + "engines": { + "node": ">= 26 || ^24 || ^22.12" + } +} diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..0652edd --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,3035 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@quasar/extras': + specifier: ^2.0.0 + version: 2.0.1 + pinia: + specifier: ^3.0.4 + version: 3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)) + quasar: + specifier: ^2.20.0 + version: 2.20.1 + vue: + specifier: ^3.5.22 + version: 3.5.38(typescript@6.0.3) + vue-advanced-cropper: + specifier: ^2.8.9 + version: 2.8.9(vue@3.5.38(typescript@6.0.3)) + vue-i18n: + specifier: ^11.4.6 + version: 11.4.6(vue@3.5.38(typescript@6.0.3)) + vue-router: + specifier: ^5.0.6 + version: 5.1.0(@vue/compiler-sfc@3.5.38)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)))(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)) + zod: + specifier: ^4.4.3 + version: 4.4.3 + devDependencies: + '@quasar/app-vite': + specifier: ^3.0.0-rc.2 + version: 3.0.0-rc.3(@types/node@22.19.21)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)))(quasar@2.20.1)(sass@1.100.0)(terser@5.48.0)(typescript@6.0.3)(vue-router@5.1.0(@vue/compiler-sfc@3.5.38)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)))(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)))(vue@3.5.38(typescript@6.0.3))(yaml@2.9.0) + '@types/node': + specifier: ^22.19.11 + version: 22.19.21 + autoprefixer: + specifier: ^10.4.27 + version: 10.5.0(postcss@8.5.15) + typescript: + specifier: ^6.0.0 + version: 6.0.3 + vue-tsc: + specifier: ^3.3.3 + version: 3.3.5(typescript@6.0.3) + +packages: + + '@babel/generator@8.0.0': + resolution: {integrity: sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@8.0.0': + resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@8.0.0': + resolution: {integrity: sha512-kXxQVZHNOctSJJsqzmcbPSCEkM6oHNnDIkua7g9RCO9xRHj2eCiKvRx2KPdfWR9QxcGWnK/oArrtunmie3rL9g==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@8.0.0': + resolution: {integrity: sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@babel/types@8.0.0': + resolution: {integrity: sha512-K8ponJDxBwDHigkeFqaqT5wLGl4bTlwMafR8k7b5CPxr6Ww+UG9ls8Yx6Tcpboxu97eeGVEEyKcHmEyOwN1vSw==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@bufbuild/protobuf@2.12.0': + resolution: {integrity: sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==} + + '@clack/core@1.4.1': + resolution: {integrity: sha512-FILJa1gGKEFTGZAJE9RpVhrjKz3c3h4ar60dSv6cGuDqufQ84YEIS3GAGvZiN+H6yaLbbvTFNejjCC4tXpZEuw==} + engines: {node: '>= 20.12.0'} + + '@clack/prompts@1.5.1': + resolution: {integrity: sha512-zccHj2z2oCCO4yrDiRSlFOxWerGqRiysP7a5jPK6uoI9URKAquwY42Dd/iUP8JWHxEzdRe4TlbvZCo8z1/mhrw==} + engines: {node: '>= 20.12.0'} + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/core@1.11.0': + resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/runtime@1.11.0': + resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@intlify/core-base@11.4.6': + resolution: {integrity: sha512-EOeHO95XESK9IFHgHeZXunsM/WBAoCA0DlaWODvx14vKmetAuS97t+l6Xe9hTUqntPpF93vtVSjjUDafw3wXMw==} + engines: {node: '>= 22'} + + '@intlify/devtools-types@11.4.6': + resolution: {integrity: sha512-wowQPpNem56b2d43IJmqbrzG2FeBKe5f/kUGlpNuBmXs6OSqncF8m1+1lxHuW8ISZJF0ma2RkW3iLkw0g0G4VA==} + engines: {node: '>= 22'} + + '@intlify/message-compiler@11.4.6': + resolution: {integrity: sha512-5nj3jULqeTAC1WovwMs1LQWgatTa2pM/rXN9T3XW8rdOtXW9ZF6/GLSNFTKDQmPLwclhPdgUWLJ/4w3fMeeC/Q==} + engines: {node: '>= 22'} + + '@intlify/shared@11.4.6': + resolution: {integrity: sha512-m1p1HHAMLhqSpTRH7VnXdrN0CQ4y+9vunFkpLkbD8soIuBsnQdawZXqMCgvwI2UVF9Ww7sVaw7g9tV2VO7shoA==} + engines: {node: '>= 22'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + + '@oxc-project/types@0.135.0': + resolution: {integrity: sha512-wR+xRdFkUBMvcAjBJ2q2kcZM6d+DKu2NgoOyxZgYwZdLhmiv6+rnO8PZ/P68kMiZtIKm+pW7zyEJ4kSOs0vo+Q==} + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + + '@peculiar/asn1-cms@2.8.0': + resolution: {integrity: sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==} + + '@peculiar/asn1-csr@2.8.0': + resolution: {integrity: sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==} + + '@peculiar/asn1-ecc@2.8.0': + resolution: {integrity: sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==} + + '@peculiar/asn1-pfx@2.8.0': + resolution: {integrity: sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==} + + '@peculiar/asn1-pkcs8@2.8.0': + resolution: {integrity: sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==} + + '@peculiar/asn1-pkcs9@2.8.0': + resolution: {integrity: sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==} + + '@peculiar/asn1-rsa@2.8.0': + resolution: {integrity: sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==} + + '@peculiar/asn1-schema@2.8.0': + resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==} + + '@peculiar/asn1-x509-attr@2.8.0': + resolution: {integrity: sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==} + + '@peculiar/asn1-x509@2.8.0': + resolution: {integrity: sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} + + '@peculiar/x509@1.14.3': + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + engines: {node: '>=20.0.0'} + + '@quasar/app-vite@3.0.0-rc.3': + resolution: {integrity: sha512-aXVV2SVpnbMMf74Que6lW9MgLssxwnuuFT2024D+YdslstGP1IQIaEH6OMvtCtSgri/ToyrVG3RJ5PIFT7jCkQ==} + engines: {node: ^30 || ^28 || ^26 || ^24 || ^22.22.0} + hasBin: true + peerDependencies: + '@capacitor/cli': '>= 5' + '@electron/packager': '>= 19' + builder-util: '>= 26' + electron-builder: '>= 22' + pinia: ^2.0.0 || ^3.0.0 + quasar: ^2.16.0 + typescript: '>= 5' + vue: ^3.2.29 + vue-router: '>= 5' + workbox-build: '>= 7' + peerDependenciesMeta: + '@capacitor/cli': + optional: true + '@electron/packager': + optional: true + builder-util: + optional: true + electron-builder: + optional: true + pinia: + optional: true + typescript: + optional: true + workbox-build: + optional: true + + '@quasar/art@1.0.0': + resolution: {integrity: sha512-IAV8Qg2QM3U2alywUcCELyOlHCUNbJYmiVDRTLgcgmyBlQwo3Wk33eHAyT9cpnV5CqlmuYXe6UZt0Ybi1m0lMA==} + + '@quasar/extras@2.0.1': + resolution: {integrity: sha512-gieBBROuXkVhvqXtbcVg4pHR5FDcaK+F9PaY2K2t8+EuK8OB/0aJq306DeF5+/Bqv8ixIXT9KhpRZj0HotaOew==} + + '@quasar/render-ssr-error@2.2.3': + resolution: {integrity: sha512-tlYP5iCJXD1Yv/5JrWSgwuJiIJ9FfTexhM4Sh3kwarSp3iyr5aEk7zoHx8+jwuy9l10H6lA/TDK57CRsN1Bdtw==} + engines: {node: '>= 16'} + + '@quasar/ssl-certificate@2.0.0': + resolution: {integrity: sha512-serxn3NXqolzYLqHeBy9s8hAF0IRmRew361U2jddLFUAlatDEW2XRkINg9ZFtCTFz/SVr9/ZSFpG6ItAk6Cd6w==} + engines: {node: '>= 16'} + + '@quasar/vite-plugin@1.12.0': + resolution: {integrity: sha512-EME6h0bhsHJgpRGeJA2BvC7R5rtZGg/FWCeWAH34c0wcV77n5iIRC3jsp9Ju6gW557sOiczJXxChmhYikTrWEw==} + engines: {node: '>=20'} + peerDependencies: + '@vitejs/plugin-vue': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.5 + quasar: ^2.16.0 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.0.0 + + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-android-arm64@1.1.1': + resolution: {integrity: sha512-BLf9Wak/gfwVb7NQTQW4wBgL3oAfPy7ArEkhwV543OVw/uY6B47z5xYsqPSZ9PDOorvURPinws6ThaFuNgGLgA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-arm64@1.1.1': + resolution: {integrity: sha512-rRZRPy/Ynb+Mxu0O6tfPldHeDgAn0sRij+IOUy6sFdUlv3hArGW/DloE3GfAxtqpOJuRNgF74Nr5gM4xBeU2jQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.1': + resolution: {integrity: sha512-/MtefPxhKPyWWFM8L45OWiEqRf+eSU2Qv9ZAyTaoZOoGcoPKxbbhjTJO2/U2IThv0uDZ4NWHc3/oTsR6IEOtww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-freebsd-x64@1.1.1': + resolution: {integrity: sha512-202K+cpIi1kx/Zn7AtxBi4LTXSY67Aszb2K9rNsuW7FeBeh0nqoNmYLOSZidV0p88VPBzMmTZcHAdPNo3kRYzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.1': + resolution: {integrity: sha512-wl9NfeXNUwrXtUc063tddmZFUI6qiNs1CNOwni0OL4vC7MqVSYugra3ZgtDmtVy8e0DluJTENmzIv2BwqLzT4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.1': + resolution: {integrity: sha512-at2EO4o7D/PJLC4Xik16bU4CcjQE2tSv1LfqMA0TRYQYQihRm3gZeDB8xaX28A9SFedibcAk5DeMCKt4REKG0A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.1.1': + resolution: {integrity: sha512-5PUjZx366h9tkJTPJF5eibxOlK3sGoeRiBJLLjjEB5/kLDuhr6qB3LkhqLz1smXNgsX+pBhnbcJBrPE30HznAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@rolldown/binding-linux-ppc64-gnu@1.1.1': + resolution: {integrity: sha512-1WK84XPeio3tjP1sM/TMXiC0G1i1iq1qGZ71KfNQjEFLU1kwD+Cv5T8nGySg/JUFwLbaScu6ve9DmeXlmqpkFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@rolldown/binding-linux-s390x-gnu@1.1.1': + resolution: {integrity: sha512-1nS1X5z1uMJ369RU25hTpKCFvUwXZp12dIzlzk4S+UxCTcSVGsAE6tzkOSufv/7jnmAtK0ZlrsJxh2fGmsnVSw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.1.1': + resolution: {integrity: sha512-NwX/wspnq4vYyMFsqbYvzums3ki/Tk8FZbMzMAovPDp3OfLeYKby/D+9osokadXuYEV3OvpeHlwnr/bG8QMixA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.1.1': + resolution: {integrity: sha512-+n46LhDrJFQM+229y4oXtVpj1G50U/+XuHMlpnisFTEXhrg9f/YIjp/HymX+PVJjBEr7XHRs3CFLelV464pqwA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-openharmony-arm64@1.1.1': + resolution: {integrity: sha512-qGwEu47zOWYo7LdRHhCWTNhzwGtxXpdY6CERs8QEOqC0PXGGics/e3vHnyEUKt8xK6YkbZXFUCeklrpB6js8ag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-wasm32-wasi@1.1.1': + resolution: {integrity: sha512-qczfgEH8u0wHGGOXtA7UMAybNKuQjjEXairyQaw4WzjiMztfbgatG1h4OKays/smhtwbWltpKCRGtVhU6h40Sg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-arm64-msvc@1.1.1': + resolution: {integrity: sha512-4psXSh63mSbwJF+mB8/9yfUUEzBiHYcUjxa32EO9ZwKy0Ypwjcg4F10D8SvVXgd+isy2UUUjF9HJJnDu1T/4Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.1': + resolution: {integrity: sha512-MUvC/HLXVjzkQkWiExdVTEEWf0py+GfWm8WKSZsekG3ih6a21iy0BHPF07X3JIf3ifoklZXTIaHTLPBgH1C3dw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/chrome@0.1.43': + resolution: {integrity: sha512-ukH/HhmR6ht+UTX3PLUWJxgJ/RQcK2Foj4lBzsF24SIWsXgqhGuXqjd8FFuwioPP7d/JUKLM4g8GZxw3F4HTcA==} + + '@types/cordova@11.0.3': + resolution: {integrity: sha512-kyuRQ40/NWQVhqGIHq78Ehu2Bf9Mlg0LhmSmis6ZFJK7z933FRfYi8tHe/k/0fB+PGfCf95rJC6TO7dopaFvAg==} + + '@types/filesystem@0.0.36': + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + + '@types/filewriter@0.0.33': + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + + '@types/har-format@1.2.16': + resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} + + '@types/jsesc@2.5.1': + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} + + '@types/node@22.19.21': + resolution: {integrity: sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==} + + '@vitejs/plugin-vue@6.0.7': + resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + + '@vue-macros/common@3.1.2': + resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} + engines: {node: '>=20.19.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + + '@vue/compiler-core@3.5.38': + resolution: {integrity: sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==} + + '@vue/compiler-dom@3.5.38': + resolution: {integrity: sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==} + + '@vue/compiler-sfc@3.5.38': + resolution: {integrity: sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==} + + '@vue/compiler-ssr@3.5.38': + resolution: {integrity: sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-api@8.1.3': + resolution: {integrity: sha512-73NMCvxXh8Hyozc/jiwqTFWVcCMyi11U1zmrq4DoukQJnuo8JHt6FsNu4HdeUDa8SpIp5vb7Q22GWgIq0efsXg==} + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-kit@8.1.3': + resolution: {integrity: sha512-cRn7GXiCQkMYU2Z3h3pM4YO/ndbx9FY1yLDAqIqPLcmIq4H6zAOJHein6tvZU3AfPwgrodqLiPBEF+YQaS8AxA==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/devtools-shared@8.1.3': + resolution: {integrity: sha512-CM3uIPL+v+lrJUk33+pxspYo0MhuMWlCvf7zC9fybifvCPyM2jUbYRPwoYEJgYbwRqPikm5HozbUhp60MF2QuA==} + + '@vue/language-core@3.3.5': + resolution: {integrity: sha512-UkKu5nhX89fg4VhlG/FOeI10G3cj/7radKT/cy9BT4Q9qJmJlSTAc/dP63Xqs29aypN4f39xUV6PsLNk/dcD6g==} + + '@vue/reactivity@3.5.38': + resolution: {integrity: sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==} + + '@vue/runtime-core@3.5.38': + resolution: {integrity: sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==} + + '@vue/runtime-dom@3.5.38': + resolution: {integrity: sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==} + + '@vue/server-renderer@3.5.38': + resolution: {integrity: sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==} + peerDependencies: + vue: 3.5.38 + + '@vue/shared@3.5.38': + resolution: {integrity: sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==} + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + alien-signals@3.2.1: + resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==} + + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} + + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + + ast-walker-scope@0.9.0: + resolution: {integrity: sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==} + engines: {node: '>=20.19.0'} + + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + baseline-browser-mapping@2.10.38: + resolution: {integrity: sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==} + engines: {node: '>=6.0.0'} + hasBin: true + + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dot-prop@10.1.0: + resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==} + engines: {node: '>=20'} + + dotenv-expand@13.0.0: + resolution: {integrity: sha512-aBfBS8eYIeXmpHI9ThIlA7/WLq+SLt18iXUZhb52rW89QLKQFoIpPG1bPeewoPZsTyjSSO3T7234FBVUM1V2rA==} + engines: {node: '>=12'} + + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} + + easy-bem@1.1.1: + resolution: {integrity: sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.375: + resolution: {integrity: sha512-ZWP5eB4BVPW/ZYo9252hQZHZ5XavtsTgpbhcmMmRwymavC5AsLWQWBPaKMeNd2LW0KGby5HPXvj7+sr4ta5j/Q==} + + elementtree@0.1.7: + resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==} + engines: {node: '>= 0.4.0'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fs-extra@11.3.5: + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-minifier-terser@7.2.0: + resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + immutable@5.1.6: + resolution: {integrity: sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ssh@1.0.0: + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} + engines: {node: '>=20'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + local-pkg@1.2.1: + resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} + engines: {node: '>=14'} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + magic-string-ast@1.0.3: + resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==} + engines: {node: '>=20.19.0'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-releases@2.0.48: + resolution: {integrity: sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==} + engines: {node: '>=18'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + open@11.0.0: + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} + engines: {node: '>=20'} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pinia@3.0.4: + resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==} + peerDependencies: + typescript: '>=4.5.0' + vue: ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + engines: {node: '>=16.0.0'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + + powershell-utils@0.1.0: + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} + engines: {node: '>=20'} + + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + quasar@2.20.1: + resolution: {integrity: sha512-C+uFyt9/D2B2Dad/c9tGSlyWLMsrz+ROJLm3FKFdY9i+vc1Mk2q/+JyHBmQnuvQCEpUrdiXqcWQbpmZhuvo60A==} + engines: {node: '>= 10.18.1', npm: '>= 6.13.4', yarn: '>= 1.21.1'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rolldown@1.1.1: + resolution: {integrity: sha512-IN750c0p+s3jqJIsFLRZrQazmbAB1kkQDTtQjSt/gbS2ywLhlv4R5Shazer0FZKmuo/BsO3/w2UoYnUjuOZqHg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + sass-embedded-all-unknown@1.100.0: + resolution: {integrity: sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==} + cpu: ['!arm', '!arm64', '!riscv64', '!x64'] + + sass-embedded-android-arm64@1.100.0: + resolution: {integrity: sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.100.0: + resolution: {integrity: sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-riscv64@1.100.0: + resolution: {integrity: sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.100.0: + resolution: {integrity: sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.100.0: + resolution: {integrity: sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.100.0: + resolution: {integrity: sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.100.0: + resolution: {integrity: sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.100.0: + resolution: {integrity: sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-arm64@1.100.0: + resolution: {integrity: sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.100.0: + resolution: {integrity: sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.100.0: + resolution: {integrity: sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.100.0: + resolution: {integrity: sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.100.0: + resolution: {integrity: sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.100.0: + resolution: {integrity: sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-unknown-all@1.100.0: + resolution: {integrity: sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==} + os: ['!android', '!darwin', '!linux', '!win32'] + + sass-embedded-win32-arm64@1.100.0: + resolution: {integrity: sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-x64@1.100.0: + resolution: {integrity: sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.100.0: + resolution: {integrity: sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==} + engines: {node: '>=16.0.0'} + hasBin: true + + sass@1.100.0: + resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} + engines: {node: '>=20.19.0'} + hasBin: true + + sax@1.1.4: + resolution: {integrity: sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + selfsigned@5.5.0: + resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} + engines: {node: '>=18'} + + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + serialize-javascript@7.0.6: + resolution: {integrity: sha512-ATTK5Q4gFVg0YDp1my2vqygyvhcklD/UV5GIlYHooGTn/NogJqIzpetkD6E5kmuVULqz/S9inUL25XcAgDRJQg==} + engines: {node: '>=20.0.0'} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + stack-trace@1.0.0: + resolution: {integrity: sha512-H6D7134xi6qONvh7ZHKgviXf+rd3vhGBSvebPZCaUkd8zvQ+7PtDw6CljPTe4cXWNf2IKZGNqw6VJXSb9IgBpA==} + engines: {node: '>=20.0.0'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.2.0: + resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==} + engines: {node: '>=16.0.0'} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} + engines: {node: '>=10'} + hasBin: true + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + ts-essentials@10.2.1: + resolution: {integrity: sha512-+Id1fRkuir+CsgK2x04/icS2b4V1hQmq7ObzIrDjhN0ozfRYivnP7aaKMVJfLApQm0trjR39A6NIMVchiB9Erw==} + peerDependencies: + typescript: '>=4.5.0' + peerDependenciesMeta: + typescript: + optional: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} + engines: {node: '>= 6.0.0'} + + type-fest@5.7.0: + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} + engines: {node: '>=20'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vite@8.0.16: + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-advanced-cropper@2.8.9: + resolution: {integrity: sha512-1jc5gO674kVGpJKekoaol6ZlwaF5VYDLSBwBOUpViW0IOrrRsyLw6XNszjEqgbavvqinlKNS6Kqlom3B5M72Tw==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + vue: ^3.0.0 + + vue-i18n@11.4.6: + resolution: {integrity: sha512-l0gE7Rfy0phCa5ChKYkOq543Wgd39BCK6hkktfr1Ed4D99oRkgPK9ffShASZdeC8OJxGfdWmpYoAaAH6iLEuIg==} + engines: {node: '>= 22'} + peerDependencies: + vue: ^3.0.0 + + vue-router@5.1.0: + resolution: {integrity: sha512-HAbiLzLEHQwxPgvsbOJDAwtavszEgLwri6XfyrsPECIFez8+59xc9LofWVdc/HEaSRT822lJ8H9Ns38VVond5g==} + peerDependencies: + '@pinia/colada': '>=0.21.2' + '@vue/compiler-sfc': ^3.5.34 + pinia: ^3.0.4 + vite: ^7.0.0 || ^8.0.0 + vue: ^3.5.34 + peerDependenciesMeta: + '@pinia/colada': + optional: true + '@vue/compiler-sfc': + optional: true + pinia: + optional: true + vite: + optional: true + + vue-tsc@3.3.5: + resolution: {integrity: sha512-Rzh/G2MmNlMSAMTiQEjDrsb4dgB/jbtEM47rVN2NtidF1dfb/q4w4QvpQBtW5+y3y5H27Hjh7deVwk+YB02fNg==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.38: + resolution: {integrity: sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + wsl-utils@0.3.1: + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} + engines: {node: '>=20'} + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + +snapshots: + + '@babel/generator@8.0.0': + dependencies: + '@babel/parser': 8.0.0 + '@babel/types': 8.0.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@types/jsesc': 2.5.1 + jsesc: 3.1.0 + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-string-parser@8.0.0': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-identifier@8.0.0': {} + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/parser@8.0.0': + dependencies: + '@babel/types': 8.0.0 + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@babel/types@8.0.0': + dependencies: + '@babel/helper-string-parser': 8.0.0 + '@babel/helper-validator-identifier': 8.0.0 + + '@bufbuild/protobuf@2.12.0': {} + + '@clack/core@1.4.1': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@clack/prompts@1.5.1': + dependencies: + '@clack/core': 1.4.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.0': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@intlify/core-base@11.4.6': + dependencies: + '@intlify/devtools-types': 11.4.6 + '@intlify/message-compiler': 11.4.6 + '@intlify/shared': 11.4.6 + + '@intlify/devtools-types@11.4.6': + dependencies: + '@intlify/core-base': 11.4.6 + '@intlify/shared': 11.4.6 + + '@intlify/message-compiler@11.4.6': + dependencies: + '@intlify/shared': 11.4.6 + source-map-js: 1.2.1 + + '@intlify/shared@11.4.6': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@noble/hashes@1.4.0': {} + + '@oxc-project/types@0.133.0': {} + + '@oxc-project/types@0.135.0': {} + + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.4 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true + + '@peculiar/asn1-cms@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-x509-attr': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-csr@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-ecc@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pfx@2.8.0': + dependencies: + '@peculiar/asn1-cms': 2.8.0 + '@peculiar/asn1-pkcs8': 2.8.0 + '@peculiar/asn1-rsa': 2.8.0 + '@peculiar/asn1-schema': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs8@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs9@2.8.0': + dependencies: + '@peculiar/asn1-cms': 2.8.0 + '@peculiar/asn1-pfx': 2.8.0 + '@peculiar/asn1-pkcs8': 2.8.0 + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-x509-attr': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-rsa@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-schema@2.8.0': + dependencies: + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-x509-attr@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-x509@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/utils@2.0.3': + dependencies: + tslib: 2.8.1 + + '@peculiar/x509@1.14.3': + dependencies: + '@peculiar/asn1-cms': 2.8.0 + '@peculiar/asn1-csr': 2.8.0 + '@peculiar/asn1-ecc': 2.8.0 + '@peculiar/asn1-pkcs9': 2.8.0 + '@peculiar/asn1-rsa': 2.8.0 + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + pvtsutils: 1.3.6 + reflect-metadata: 0.2.2 + tslib: 2.8.1 + tsyringe: 4.10.0 + + '@quasar/app-vite@3.0.0-rc.3(@types/node@22.19.21)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)))(quasar@2.20.1)(sass@1.100.0)(terser@5.48.0)(typescript@6.0.3)(vue-router@5.1.0(@vue/compiler-sfc@3.5.38)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)))(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)))(vue@3.5.38(typescript@6.0.3))(yaml@2.9.0)': + dependencies: + '@clack/prompts': 1.5.1 + '@quasar/art': 1.0.0 + '@quasar/render-ssr-error': 2.2.3 + '@quasar/ssl-certificate': 2.0.0 + '@quasar/vite-plugin': 1.12.0(@vitejs/plugin-vue@6.0.7(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)))(quasar@2.20.1)(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)) + '@types/chrome': 0.1.43 + '@types/cordova': 11.0.3 + '@vitejs/plugin-vue': 6.0.7(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)) + chokidar: 5.0.0 + ci-info: 4.4.0 + confbox: 0.2.4 + cross-spawn: 7.0.6 + dot-prop: 10.1.0 + dotenv-expand: 13.0.0 + elementtree: 0.1.7 + fflate: 0.8.3 + fs-extra: 11.3.5 + html-minifier-terser: 7.2.0 + jiti: 2.7.0 + kolorist: 1.8.0 + mlly: 1.8.2 + open: 11.0.0 + quasar: 2.20.1 + rolldown: 1.1.1 + sass-embedded: 1.100.0 + semver: 7.8.4 + serialize-javascript: 7.0.6 + serve-static: 2.2.1 + tinyglobby: 0.2.17 + ts-essentials: 10.2.1(typescript@6.0.3) + vite: 8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) + vue: 3.5.38(typescript@6.0.3) + vue-router: 5.1.0(@vue/compiler-sfc@3.5.38)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)))(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)) + webpack-merge: 6.0.1 + optionalDependencies: + pinia: 3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)) + typescript: 6.0.3 + transitivePeerDependencies: + - '@types/node' + - '@vitejs/devtools' + - esbuild + - less + - sass + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@quasar/art@1.0.0': {} + + '@quasar/extras@2.0.1': {} + + '@quasar/render-ssr-error@2.2.3': + dependencies: + stack-trace: 1.0.0 + + '@quasar/ssl-certificate@2.0.0': + dependencies: + fs-extra: 11.3.5 + selfsigned: 5.5.0 + + '@quasar/vite-plugin@1.12.0(@vitejs/plugin-vue@6.0.7(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)))(quasar@2.20.1)(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3))': + dependencies: + '@vitejs/plugin-vue': 6.0.7(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)) + quasar: 2.20.1 + vite: 8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) + vue: 3.5.38(typescript@6.0.3) + + '@rolldown/binding-android-arm64@1.0.3': + optional: true + + '@rolldown/binding-android-arm64@1.1.1': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.3': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.1': + optional: true + + '@rolldown/binding-darwin-x64@1.0.3': + optional: true + + '@rolldown/binding-darwin-x64@1.1.1': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.3': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.1': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.1': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.1': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.1': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.1': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.1': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.1': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.1': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.3': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.1': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.3': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.1': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.1': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.3': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.1': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/chrome@0.1.43': + dependencies: + '@types/filesystem': 0.0.36 + '@types/har-format': 1.2.16 + + '@types/cordova@11.0.3': {} + + '@types/filesystem@0.0.36': + dependencies: + '@types/filewriter': 0.0.33 + + '@types/filewriter@0.0.33': {} + + '@types/har-format@1.2.16': {} + + '@types/jsesc@2.5.1': {} + + '@types/node@22.19.21': + dependencies: + undici-types: 6.21.0 + + '@vitejs/plugin-vue@6.0.7(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) + vue: 3.5.38(typescript@6.0.3) + + '@volar/language-core@2.4.28': + dependencies: + '@volar/source-map': 2.4.28 + + '@volar/source-map@2.4.28': {} + + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue-macros/common@3.1.2(vue@3.5.38(typescript@6.0.3))': + dependencies: + '@vue/compiler-sfc': 3.5.38 + ast-kit: 2.2.0 + local-pkg: 1.2.1 + magic-string-ast: 1.0.3 + unplugin-utils: 0.3.1 + optionalDependencies: + vue: 3.5.38(typescript@6.0.3) + + '@vue/compiler-core@3.5.38': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.38 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.38': + dependencies: + '@vue/compiler-core': 3.5.38 + '@vue/shared': 3.5.38 + + '@vue/compiler-sfc@3.5.38': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.38 + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.15 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.38': + dependencies: + '@vue/compiler-dom': 3.5.38 + '@vue/shared': 3.5.38 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-api@8.1.3': + dependencies: + '@vue/devtools-kit': 8.1.3 + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-kit@8.1.3': + dependencies: + '@vue/devtools-shared': 8.1.3 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/devtools-shared@8.1.3': {} + + '@vue/language-core@3.3.5': + dependencies: + '@volar/language-core': 2.4.28 + '@vue/compiler-dom': 3.5.38 + '@vue/shared': 3.5.38 + alien-signals: 3.2.1 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.4 + + '@vue/reactivity@3.5.38': + dependencies: + '@vue/shared': 3.5.38 + + '@vue/runtime-core@3.5.38': + dependencies: + '@vue/reactivity': 3.5.38 + '@vue/shared': 3.5.38 + + '@vue/runtime-dom@3.5.38': + dependencies: + '@vue/reactivity': 3.5.38 + '@vue/runtime-core': 3.5.38 + '@vue/shared': 3.5.38 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.38(vue@3.5.38(typescript@6.0.3))': + dependencies: + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 + vue: 3.5.38(typescript@6.0.3) + + '@vue/shared@3.5.38': {} + + acorn@8.17.0: {} + + alien-signals@3.2.1: {} + + asn1js@3.0.10: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.29.7 + pathe: 2.0.3 + + ast-walker-scope@0.9.0: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + ast-kit: 2.2.0 + + autoprefixer@10.5.0(postcss@8.5.15): + dependencies: + browserslist: 4.28.2 + caniuse-lite: 1.0.30001799 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + + baseline-browser-mapping@2.10.38: {} + + birpc@2.9.0: {} + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.38 + caniuse-lite: 1.0.30001799 + electron-to-chromium: 1.5.375 + node-releases: 2.0.48 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + bytestreamjs@2.0.1: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + + caniuse-lite@1.0.30001799: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + ci-info@4.4.0: {} + + classnames@2.5.1: {} + + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + colorjs.io@0.5.2: {} + + commander@10.0.1: {} + + commander@2.20.3: {} + + confbox@0.1.8: {} + + confbox@0.2.4: {} + + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + debounce@1.2.1: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + + depd@2.0.0: {} + + detect-libc@2.1.2: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dot-prop@10.1.0: + dependencies: + type-fest: 5.7.0 + + dotenv-expand@13.0.0: + dependencies: + dotenv: 17.4.2 + + dotenv@17.4.2: {} + + easy-bem@1.1.1: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.375: {} + + elementtree@0.1.7: + dependencies: + sax: 1.1.4 + + encodeurl@2.0.0: {} + + entities@4.5.0: {} + + entities@7.0.1: {} + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + estree-walker@2.0.2: {} + + etag@1.8.1: {} + + exsolve@1.0.8: {} + + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + fflate@0.8.3: {} + + flat@5.0.2: {} + + fraction.js@5.3.4: {} + + fresh@2.0.0: {} + + fs-extra@11.3.5: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hookable@5.5.3: {} + + html-minifier-terser@7.2.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 10.0.1 + entities: 4.5.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.48.0 + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + immutable@5.1.6: {} + + inherits@2.0.4: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: + optional: true + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + optional: true + + is-in-ssh@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-what@5.5.0: {} + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + jiti@2.7.0: {} + + jsesc@3.1.0: {} + + json5@2.2.3: {} + + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kind-of@6.0.3: {} + + kolorist@1.8.0: {} + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + local-pkg@1.2.1: + dependencies: + mlly: 1.8.2 + pkg-types: 2.3.1 + quansync: 0.2.11 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + magic-string-ast@1.0.3: + dependencies: + magic-string: 0.30.21 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + mime-db@1.54.0: {} + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mitt@3.0.1: {} + + mlly@1.8.2: + dependencies: + acorn: 8.17.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + nanoid@3.3.12: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-addon-api@7.1.1: + optional: true + + node-releases@2.0.48: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + open@11.0.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-in-ssh: 1.0.0 + is-inside-container: 1.0.0 + powershell-utils: 0.1.0 + wsl-utils: 0.3.1 + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + parseurl@1.3.3: {} + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + path-browserify@1.0.1: {} + + path-key@3.1.1: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + perfect-debounce@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)): + dependencies: + '@vue/devtools-api': 7.7.9 + vue: 3.5.38(typescript@6.0.3) + optionalDependencies: + typescript: 6.0.3 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + + pkijs@3.4.0: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.10 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + powershell-utils@0.1.0: {} + + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + + quansync@0.2.11: {} + + quasar@2.20.1: {} + + range-parser@1.2.1: {} + + readdirp@5.0.0: {} + + reflect-metadata@0.2.2: {} + + relateurl@0.2.7: {} + + rfdc@1.4.1: {} + + rolldown@1.0.3: + dependencies: + '@oxc-project/types': 0.133.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 + + rolldown@1.1.1: + dependencies: + '@oxc-project/types': 0.135.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.1 + '@rolldown/binding-darwin-arm64': 1.1.1 + '@rolldown/binding-darwin-x64': 1.1.1 + '@rolldown/binding-freebsd-x64': 1.1.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.1 + '@rolldown/binding-linux-arm64-gnu': 1.1.1 + '@rolldown/binding-linux-arm64-musl': 1.1.1 + '@rolldown/binding-linux-ppc64-gnu': 1.1.1 + '@rolldown/binding-linux-s390x-gnu': 1.1.1 + '@rolldown/binding-linux-x64-gnu': 1.1.1 + '@rolldown/binding-linux-x64-musl': 1.1.1 + '@rolldown/binding-openharmony-arm64': 1.1.1 + '@rolldown/binding-wasm32-wasi': 1.1.1 + '@rolldown/binding-win32-arm64-msvc': 1.1.1 + '@rolldown/binding-win32-x64-msvc': 1.1.1 + + run-applescript@7.1.0: {} + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + sass-embedded-all-unknown@1.100.0: + dependencies: + sass: 1.100.0 + optional: true + + sass-embedded-android-arm64@1.100.0: + optional: true + + sass-embedded-android-arm@1.100.0: + optional: true + + sass-embedded-android-riscv64@1.100.0: + optional: true + + sass-embedded-android-x64@1.100.0: + optional: true + + sass-embedded-darwin-arm64@1.100.0: + optional: true + + sass-embedded-darwin-x64@1.100.0: + optional: true + + sass-embedded-linux-arm64@1.100.0: + optional: true + + sass-embedded-linux-arm@1.100.0: + optional: true + + sass-embedded-linux-musl-arm64@1.100.0: + optional: true + + sass-embedded-linux-musl-arm@1.100.0: + optional: true + + sass-embedded-linux-musl-riscv64@1.100.0: + optional: true + + sass-embedded-linux-musl-x64@1.100.0: + optional: true + + sass-embedded-linux-riscv64@1.100.0: + optional: true + + sass-embedded-linux-x64@1.100.0: + optional: true + + sass-embedded-unknown-all@1.100.0: + dependencies: + sass: 1.100.0 + optional: true + + sass-embedded-win32-arm64@1.100.0: + optional: true + + sass-embedded-win32-x64@1.100.0: + optional: true + + sass-embedded@1.100.0: + dependencies: + '@bufbuild/protobuf': 2.12.0 + colorjs.io: 0.5.2 + immutable: 5.1.6 + rxjs: 7.8.2 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-all-unknown: 1.100.0 + sass-embedded-android-arm: 1.100.0 + sass-embedded-android-arm64: 1.100.0 + sass-embedded-android-riscv64: 1.100.0 + sass-embedded-android-x64: 1.100.0 + sass-embedded-darwin-arm64: 1.100.0 + sass-embedded-darwin-x64: 1.100.0 + sass-embedded-linux-arm: 1.100.0 + sass-embedded-linux-arm64: 1.100.0 + sass-embedded-linux-musl-arm: 1.100.0 + sass-embedded-linux-musl-arm64: 1.100.0 + sass-embedded-linux-musl-riscv64: 1.100.0 + sass-embedded-linux-musl-x64: 1.100.0 + sass-embedded-linux-riscv64: 1.100.0 + sass-embedded-linux-x64: 1.100.0 + sass-embedded-unknown-all: 1.100.0 + sass-embedded-win32-arm64: 1.100.0 + sass-embedded-win32-x64: 1.100.0 + + sass@1.100.0: + dependencies: + chokidar: 5.0.0 + immutable: 5.1.6 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + optional: true + + sax@1.1.4: {} + + scule@1.3.0: {} + + selfsigned@5.5.0: + dependencies: + '@peculiar/x509': 1.14.3 + pkijs: 3.4.0 + + semver@7.8.4: {} + + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serialize-javascript@7.0.6: {} + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + sisteransi@1.0.5: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + speakingurl@14.0.1: {} + + stack-trace@1.0.0: {} + + statuses@2.0.2: {} + + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.2.0 + + sync-message-port@1.2.0: {} + + tagged-tag@1.0.0: {} + + terser@5.48.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.17.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + toidentifier@1.0.1: {} + + ts-essentials@10.2.1(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsyringe@4.10.0: + dependencies: + tslib: 1.14.1 + + type-fest@5.7.0: + dependencies: + tagged-tag: 1.0.0 + + typescript@6.0.3: {} + + ufo@1.6.4: {} + + undici-types@6.21.0: {} + + universalify@2.0.1: {} + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.4 + + unplugin@3.0.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + varint@6.0.0: {} + + vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.0.3 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.19.21 + fsevents: 2.3.3 + jiti: 2.7.0 + sass: 1.100.0 + sass-embedded: 1.100.0 + terser: 5.48.0 + yaml: 2.9.0 + + vscode-uri@3.1.0: {} + + vue-advanced-cropper@2.8.9(vue@3.5.38(typescript@6.0.3)): + dependencies: + classnames: 2.5.1 + debounce: 1.2.1 + easy-bem: 1.1.1 + vue: 3.5.38(typescript@6.0.3) + + vue-i18n@11.4.6(vue@3.5.38(typescript@6.0.3)): + dependencies: + '@intlify/core-base': 11.4.6 + '@intlify/devtools-types': 11.4.6 + '@intlify/shared': 11.4.6 + '@vue/devtools-api': 6.6.4 + vue: 3.5.38(typescript@6.0.3) + + vue-router@5.1.0(@vue/compiler-sfc@3.5.38)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)))(vite@8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))(vue@3.5.38(typescript@6.0.3)): + dependencies: + '@babel/generator': 8.0.0 + '@vue-macros/common': 3.1.2(vue@3.5.38(typescript@6.0.3)) + '@vue/devtools-api': 8.1.3 + ast-walker-scope: 0.9.0 + chokidar: 5.0.0 + json5: 2.2.3 + local-pkg: 1.2.1 + magic-string: 0.30.21 + mlly: 1.8.2 + muggle-string: 0.4.1 + pathe: 2.0.3 + picomatch: 4.0.4 + scule: 1.3.0 + tinyglobby: 0.2.17 + unplugin: 3.0.0 + unplugin-utils: 0.3.1 + vue: 3.5.38(typescript@6.0.3) + yaml: 2.9.0 + optionalDependencies: + '@vue/compiler-sfc': 3.5.38 + pinia: 3.0.4(typescript@6.0.3)(vue@3.5.38(typescript@6.0.3)) + vite: 8.0.16(@types/node@22.19.21)(jiti@2.7.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) + + vue-tsc@3.3.5(typescript@6.0.3): + dependencies: + '@volar/typescript': 2.4.28 + '@vue/language-core': 3.3.5 + typescript: 6.0.3 + + vue@3.5.38(typescript@6.0.3): + dependencies: + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-sfc': 3.5.38 + '@vue/runtime-dom': 3.5.38 + '@vue/server-renderer': 3.5.38(vue@3.5.38(typescript@6.0.3)) + '@vue/shared': 3.5.38 + optionalDependencies: + typescript: 6.0.3 + + webpack-merge@6.0.1: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + webpack-virtual-modules@0.6.2: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wildcard@2.0.1: {} + + wsl-utils@0.3.1: + dependencies: + is-wsl: 3.1.1 + powershell-utils: 0.1.0 + + yaml@2.9.0: {} + + zod@4.4.3: {} diff --git a/frontend/pnpm-workspace.yaml b/frontend/pnpm-workspace.yaml new file mode 100644 index 0000000..9945010 --- /dev/null +++ b/frontend/pnpm-workspace.yaml @@ -0,0 +1,10 @@ +# https://pnpm.io/settings + +allowBuilds: + '@parcel/watcher': true + core-js: true + electron-winstaller: true + esbuild: true + lightningcss: true + rolldown: true + unrs-resolver: true diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..25db2f4 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,29 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +import autoprefixer from 'autoprefixer' +// import rtlcss from 'postcss-rtlcss' + +export default { + plugins: [ + // https://github.com/postcss/autoprefixer + autoprefixer({ + overrideBrowserslist: [ + 'last 4 Chrome versions', + 'last 4 Firefox versions', + 'last 4 Edge versions', + 'last 4 Safari versions', + 'last 4 Android versions', + 'last 4 ChromeAndroid versions', + 'last 4 FirefoxAndroid versions', + 'last 4 iOS versions' + ] + }), + + // https://github.com/elchininet/postcss-rtlcss + // If you want to support RTL css, then + // 1. yarn/pnpm/bun/npm install postcss-rtlcss + // 2. optionally set quasar.config.js > framework > lang to an RTL language + // 3. uncomment the following line (and its import statement above): + // rtlcss() + ] +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000..ae7bbdb Binary files /dev/null and b/frontend/public/favicon.ico differ diff --git a/frontend/public/icons/favicon-128x128.png b/frontend/public/icons/favicon-128x128.png new file mode 100644 index 0000000..1401176 Binary files /dev/null and b/frontend/public/icons/favicon-128x128.png differ diff --git a/frontend/public/icons/favicon-16x16.png b/frontend/public/icons/favicon-16x16.png new file mode 100644 index 0000000..679063a Binary files /dev/null and b/frontend/public/icons/favicon-16x16.png differ diff --git a/frontend/public/icons/favicon-32x32.png b/frontend/public/icons/favicon-32x32.png new file mode 100644 index 0000000..fd1fbc6 Binary files /dev/null and b/frontend/public/icons/favicon-32x32.png differ diff --git a/frontend/public/icons/favicon-96x96.png b/frontend/public/icons/favicon-96x96.png new file mode 100644 index 0000000..e93b80a Binary files /dev/null and b/frontend/public/icons/favicon-96x96.png differ diff --git a/frontend/quasar.config.ts b/frontend/quasar.config.ts new file mode 100644 index 0000000..88f19d1 --- /dev/null +++ b/frontend/quasar.config.ts @@ -0,0 +1,218 @@ +// Configuration for your app +// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file + +import { defineConfig } from '#q-app'; + +export default defineConfig((/* ctx */) => { + return { + // https://v2.quasar.dev/quasar-cli-vite/prefetch-feature + // preFetch: true, + + // app boot file (/src/boot) + // --> boot files are part of "main.js" + // https://v2.quasar.dev/quasar-cli-vite/boot-files + boot: [ + 'i18n', + ], + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#css + css: [ + 'app.css' + ], + + // https://github.com/quasarframework/quasar/tree/dev/extras + extras: [ + // 'ionicons-v4', + // 'mdi-v7', + // 'fontawesome-v7', + // 'eva-icons', + // 'themify', + // 'line-awesome', + // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! + + 'roboto-font', // optional, you are not bound to it + 'material-icons', // optional, you are not bound to it + ], + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#build + build: { + target: { + // browser: 'baseline-widely-available', + // node: 'node22' + }, + + typescript: { + strict: true, + vueShim: true + // extendTsConfig (tsConfig) {} + }, + + // https://v2.quasar.dev/quasar-cli-vite/page-routing-with-vue-router#filename-based-routing + // filenameBasedRouting: true, + + vueRouterMode: 'hash', // available values: 'hash', 'history' + // vueRouterBase, + // vueDevtools, + + // publicPath: '/', + // define: {}, + // defineEnv: {} + // ignorePublicFolder: true, + // minify: false, + // distDir + + extendViteConf (viteConf) { + viteConf.optimizeDeps = { + ...viteConf.optimizeDeps, + include: [ + ...(viteConf.optimizeDeps?.include ?? []), + 'zod', + 'vue-i18n', + ], + }; + }, + // viteVuePluginOptions: {}, + + // vitePlugins: [ + // [ 'package-name', { ..pluginOptions.. }, { server: true, client: true } ] + // ] + }, + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#devserver + devServer: { + // https: true, + open: true // opens browser window automatically + }, + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#framework + framework: { + config: {}, + + // iconSet: 'material-icons', // Quasar icon set + // lang: 'en-US', // Quasar language pack + + // For special cases outside of where the auto-import strategy can have an impact + // (like functional components as one of the examples), + // you can manually specify Quasar components/directives to be available everywhere: + // + // components: [], + // directives: [], + + // Quasar plugins + plugins: [] + }, + + // animations: 'all', // --- includes all animations + // https://v2.quasar.dev/options/animations + animations: [], + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#sourcefiles + sourceFiles: { + // rootComponent: 'src/App.vue', + // router: 'src/router/index', + store: 'src/stores/index', + // pwaRegisterServiceWorker: 'src-pwa/register-sw', + // pwaServiceWorker: 'src-pwa/sw/custom-sw', + // pwaManifestFile: 'src-pwa/manifest.json', + // electronMain: 'src-electron/electron-main', + // electronPreload: 'src-electron/electron-preload' + // bexManifestFile: 'src-bex/manifest.json' + }, + + // https://v2.quasar.dev/quasar-cli-vite/developing-ssr/configuring-ssr + ssr: { + prodPort: 3000, // The default port that the production server should use + // (gets superseded if process.env.PORT is specified at runtime) + + middlewares: [ + 'render' // keep this as last one + ], + + // extendSSRPackageJson (pkgJson) {}, + // extendSSRWebserverConf (rolldownConf) {}, + + // manualStoreSerialization: true, + // manualStoreSsrContextInjection: true, + // manualStoreHydration: true, + // manualPostHydrationTrigger: true, + + pwa: false + // pwaOfflineHtmlFilename: 'offline.html', // do NOT use index.html as name! + + // extendSSRGenerateSWOptions (cfg) {}, + // extendSSRInjectManifestOptions (cfg) {} + }, + + // https://v2.quasar.dev/quasar-cli-vite/developing-pwa/configuring-pwa + pwa: { + workboxMode: 'GenerateSW' // 'GenerateSW' or 'InjectManifest' + // swFilename: 'sw.js', + // manifestFilename: 'manifest.json', + // extendPWAManifestJson (json) {}, + // useCredentialsForManifestTag: true, + // injectPWAMetaTags: false, + // extendPWACustomSWConf (rolldownConf) {}, + // extendPWAGenerateSWOptions (cfg) {}, + // extendPWAInjectManifestOptions (cfg) {}, + // extendPWASwTsConfig (tsConfig) {} + }, + + // https://v2.quasar.dev/quasar-cli-vite/developing-cordova-apps/configuring-cordova + cordova: {}, + + // https://v2.quasar.dev/quasar-cli-vite/developing-capacitor-apps/configuring-capacitor + capacitor: { + hideSplashscreen: true + }, + + // https://v2.quasar.dev/quasar-cli-vite/developing-electron-apps/configuring-electron + electron: { + // extendElectronMainConf (rolldownConf) {}, + // extendElectronPreloadConf (rolldownConf) {}, + // extendElectronPackageJson (pkgJson) {}, + + // Electron preload scripts (if any) from /src-electron, WITHOUT file extension + preloadScripts: [ 'electron-preload' ], + + // specify the debugging port to use for the Electron app when running in development mode + inspectPort: 5858, + + bundler: 'packager', // 'packager' or 'builder' + + packager: { + // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options + + // OS X / Mac App Store + // appBundleId: '', + // appCategoryType: '', + // osxSign: '', + // protocol: 'myapp://path', + + // Windows only + // win32metadata: { ... } + }, + + builder: { + // https://www.electron.build/configuration + + appId: 'frontend' + } + }, + + // https://v2.quasar.dev/quasar-cli-vite/developing-browser-extensions/configuring-bex + bex: { + // extendBexScriptsConf (rolldownConf) {}, + // extendBexManifestJson (json) {}, + + /** + * The list of extra scripts (js/ts) not in your bex manifest that you want to + * compile and use in your browser extension. Maybe dynamic use them? + * + * Each entry in the list should be a relative filename to /src-bex/ + * + * @example [ 'my-script.ts', 'sub-folder/my-other-script.js' ] + */ + extraScripts: [] + } + } +}); diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..98240ae --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,3 @@ + diff --git a/frontend/src/assets/pexels-photo-4323307.jpg b/frontend/src/assets/pexels-photo-4323307.jpg new file mode 100644 index 0000000..a38235d Binary files /dev/null and b/frontend/src/assets/pexels-photo-4323307.jpg differ diff --git a/frontend/src/assets/quasar-logo-vertical.svg b/frontend/src/assets/quasar-logo-vertical.svg new file mode 100644 index 0000000..8210831 --- /dev/null +++ b/frontend/src/assets/quasar-logo-vertical.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/frontend/src/boot/.gitkeep b/frontend/src/boot/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/boot/i18n.ts b/frontend/src/boot/i18n.ts new file mode 100644 index 0000000..7d14638 --- /dev/null +++ b/frontend/src/boot/i18n.ts @@ -0,0 +1,6 @@ +import type { App } from 'vue'; +import { i18n } from '@/i18n'; + +export default ({ app }: { app: App }) => { + app.use(i18n); +}; diff --git a/frontend/src/components/AvatarUpload.vue b/frontend/src/components/AvatarUpload.vue new file mode 100644 index 0000000..0bd9c2d --- /dev/null +++ b/frontend/src/components/AvatarUpload.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/frontend/src/components/CropperImage.vue b/frontend/src/components/CropperImage.vue new file mode 100644 index 0000000..e548a2e --- /dev/null +++ b/frontend/src/components/CropperImage.vue @@ -0,0 +1,480 @@ + + + + + diff --git a/frontend/src/components/DrawerUserCard.vue b/frontend/src/components/DrawerUserCard.vue new file mode 100644 index 0000000..c89aeec --- /dev/null +++ b/frontend/src/components/DrawerUserCard.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/frontend/src/components/EssentialLink.vue b/frontend/src/components/EssentialLink.vue new file mode 100644 index 0000000..bebad79 --- /dev/null +++ b/frontend/src/components/EssentialLink.vue @@ -0,0 +1,35 @@ + + + diff --git a/frontend/src/css/app.css b/frontend/src/css/app.css new file mode 100644 index 0000000..0fc2c34 --- /dev/null +++ b/frontend/src/css/app.css @@ -0,0 +1 @@ +/* app global css */ diff --git a/frontend/src/data/countries.ts b/frontend/src/data/countries.ts new file mode 100644 index 0000000..b20073a --- /dev/null +++ b/frontend/src/data/countries.ts @@ -0,0 +1,257 @@ +export const countries = [ + {'CH' : 'Switzerland'}, + {'IT' : 'Italy'}, + {'FR' : 'France'}, + {'DE' : 'Germany'}, + {'GB' : 'United Kingdom of Great Britain and Northern Ireland (the)'}, + {'US' : 'United States of America (the)'}, + + {'AF' : 'Afghanistan'}, + {'AL' : 'Albania'}, + {'DZ' : 'Algeria'}, + {'AS' : 'American Samoa'}, + {'AD' : 'Andorra'}, + {'AO' : 'Angola'}, + {'AI' : 'Anguilla'}, + {'AQ' : 'Antarctica'}, + {'AG' : 'Antigua and Barbuda'}, + {'AR' : 'Argentina'}, + {'AM' : 'Armenia'}, + {'AW' : 'Aruba'}, + {'AU' : 'Australia'}, + {'AT' : 'Austria'}, + {'AZ' : 'Azerbaijan'}, + {'BS' : 'Bahamas (The)'}, + {'BH' : 'Bahrain'}, + {'BD' : 'Bangladesh'}, + {'BB' : 'Barbados'}, + {'BY' : 'Belarus'}, + {'BE' : 'Belgium'}, + {'BZ' : 'Belize'}, + {'BJ' : 'Benin'}, + {'BM' : 'Bermuda'}, + {'BT' : 'Bhutan'}, + {'BO' : 'Bolivia (Plurinational State of)'}, + {'BQ' : 'Bonaire, Sint Eustatius and Saba'}, + {'BA' : 'Bosnia and Herzegovina'}, + {'BW' : 'Botswana'}, + {'BV' : 'Bouvet Island'}, + {'BR' : 'Brazil'}, + {'IO' : 'British Indian Ocean Territory (the)'}, + {'BN' : 'Brunei Darussalam'}, + {'BG' : 'Bulgaria'}, + {'BF' : 'Burkina Faso'}, + {'BI' : 'Burundi'}, + {'CV' : 'Cabo Verde'}, + {'KH' : 'Cambodia'}, + {'CM' : 'Cameroon'}, + {'CA' : 'Canada'}, + {'KY' : 'Cayman Islands (the)'}, + {'CF' : 'Central African Republic (the)'}, + {'TD' : 'Chad'}, + {'CL' : 'Chile'}, + {'CN' : 'China'}, + {'CX' : 'Christmas Island'}, + {'CC' : 'Cocos (Keeling) Islands (the)'}, + {'CO' : 'Colombia'}, + {'KM' : 'Comoros (the)'}, + {'CD' : 'Congo (the Democratic Republic of the)'}, + {'CG' : 'Congo (the)'}, + {'CK' : 'Cook Islands (the)'}, + {'CR' : 'Costa Rica'}, + {'HR' : 'Croatia'}, + {'CU' : 'Cuba'}, + {'CW' : 'Curaçao'}, + {'CY' : 'Cyprus'}, + {'CZ' : 'Czechia'}, + {'CI' : "Côte d'Ivoire"}, + {'DK' : 'Denmark'}, + {'DJ' : 'Djibouti'}, + {'DM' : 'Dominica'}, + {'DO' : 'Dominican Republic (the)'}, + {'EC' : 'Ecuador'}, + {'EG' : 'Egypt'}, + {'SV' : 'El Salvador'}, + {'GQ' : 'Equatorial Guinea'}, + {'ER' : 'Eritrea'}, + {'EE' : 'Estonia'}, + {'SZ' : 'Eswatini'}, + {'ET' : 'Ethiopia'}, + {'FK' : 'Falkland Islands (the) [Malvinas]'}, + {'FO' : 'Faroe Islands (the)'}, + {'FJ' : 'Fiji'}, + {'FI' : 'Finland'}, + {'FR' : 'France'}, + {'GF' : 'French Guiana'}, + {'PF' : 'French Polynesia'}, + {'TF' : 'French Southern Territories (the)'}, + {'GA' : 'Gabon'}, + {'GM' : 'Gambia (the)'}, + {'GE' : 'Georgia'}, + + {'GH' : 'Ghana'}, + {'GI' : 'Gibraltar'}, + {'GR' : 'Greece'}, + {'GL' : 'Greenland'}, + {'GD' : 'Grenada'}, + {'GP' : 'Guadeloupe'}, + {'GU' : 'Guam'}, + {'GT' : 'Guatemala'}, + {'GG' : 'Guernsey'}, + {'GN' : 'Guinea'}, + {'GW' : 'Guinea-Bissau'}, + {'GY' : 'Guyana'}, + {'HT' : 'Haiti'}, + {'HM' : 'Heard Island and McDonald Islands'}, + {'VA' : 'Holy See (the)'}, + {'HN' : 'Honduras'}, + {'HK' : 'Hong Kong'}, + {'HU' : 'Hungary'}, + {'IS' : 'Iceland'}, + {'IN' : 'India'}, + {'ID' : 'Indonesia'}, + {'IR' : 'Iran (Islamic Republic of)'}, + {'IQ' : 'Iraq'}, + {'IE' : 'Ireland'}, + {'IM' : 'Isle of Man'}, + {'IL' : 'Israel'}, + + {'JM' : 'Jamaica'}, + {'JP' : 'Japan'}, + {'JE' : 'Jersey'}, + {'JO' : 'Jordan'}, + {'KZ' : 'Kazakhstan'}, + {'KE' : 'Kenya'}, + {'KI' : 'Kiribati'}, + {'KP' : "Korea (the Democratic People's Republic of)"}, + {'KR' : 'Korea (the Republic of)'}, + {'KW' : 'Kuwait'}, + {'KG' : 'Kyrgyzstan'}, + {'LA' : "Lao People's Democratic Republic (the)"}, + {'LV' : 'Latvia'}, + {'LB' : 'Lebanon'}, + {'LS' : 'Lesotho'}, + {'LR' : 'Liberia'}, + {'LY' : 'Libya'}, + {'LI' : 'Liechtenstein'}, + {'LT' : 'Lithuania'}, + {'LU' : 'Luxembourg'}, + {'MO' : 'Macao'}, + {'MG' : 'Madagascar'}, + {'MW' : 'Malawi'}, + {'MY' : 'Malaysia'}, + {'MV' : 'Maldives'}, + {'ML' : 'Mali'}, + {'MT' : 'Malta'}, + {'MH' : 'Marshall Islands (the)'}, + {'MQ' : 'Martinique'}, + {'MR' : 'Mauritania'}, + {'MU' : 'Mauritius'}, + {'YT' : 'Mayotte'}, + {'MX' : 'Mexico'}, + {'FM' : 'Micronesia (Federated States of)'}, + {'MD' : 'Moldova (the Republic of)'}, + {'MC' : 'Monaco'}, + {'MN' : 'Mongolia'}, + {'ME' : 'Montenegro'}, + {'MS' : 'Montserrat'}, + {'MA' : 'Morocco'}, + {'MZ' : 'Mozambique'}, + {'MM' : 'Myanmar'}, + {'NA' : 'Namibia'}, + {'NR' : 'Nauru'}, + {'NP' : 'Nepal'}, + {'NL' : 'Netherlands (Kingdom of the)'}, + {'NC' : 'New Caledonia'}, + {'NZ' : 'New Zealand'}, + {'NI' : 'Nicaragua'}, + {'NE' : 'Niger (the)'}, + {'NG' : 'Nigeria'}, + {'NU' : 'Niue'}, + {'NF' : 'Norfolk Island'}, + {'MK' : 'North Macedonia'}, + {'MP' : 'Northern Mariana Islands (the)'}, + {'NO' : 'Norway'}, + {'OM' : 'Oman'}, + {'PK' : 'Pakistan'}, + {'PW' : 'Palau'}, + {'PS' : 'Palestine, State of'}, + {'PA' : 'Panama'}, + {'PG' : 'Papua New Guinea'}, + {'PY' : 'Paraguay'}, + {'PE' : 'Peru'}, + {'PH' : 'Philippines (the)'}, + {'PN' : 'Pitcairn'}, + {'PL' : 'Poland'}, + {'PT' : 'Portugal'}, + {'PR' : 'Puerto Rico'}, + {'QA' : 'Qatar'}, + {'RO' : 'Romania'}, + {'RU' : 'Russian Federation (the)'}, + {'RW' : 'Rwanda'}, + {'RE' : 'Réunion'}, + {'BL' : 'Saint Barthélemy'}, + {'SH' : 'Saint Helena, Ascension and Tristan da Cunha'}, + {'KN' : 'Saint Kitts and Nevis'}, + {'LC' : 'Saint Lucia'}, + {'MF' : 'Saint Martin (French part)'}, + {'PM' : 'Saint Pierre and Miquelon'}, + {'VC' : 'Saint Vincent and the Grenadines'}, + {'WS' : 'Samoa'}, + {'SM' : 'San Marino'}, + {'ST' : 'Sao Tome and Principe'}, + {'SA' : 'Saudi Arabia'}, + {'SN' : 'Senegal'}, + {'RS' : 'Serbia'}, + {'SC' : 'Seychelles'}, + {'SL' : 'Sierra Leone'}, + {'SG' : 'Singapore'}, + {'SX' : 'Sint Maarten (Dutch part)'}, + {'SK' : 'Slovakia'}, + {'SI' : 'Slovenia'}, + {'SB' : 'Solomon Islands'}, + {'SO' : 'Somalia'}, + {'ZA' : 'South Africa'}, + {'GS' : 'South Georgia and the South Sandwich Islands'}, + {'SS' : 'South Sudan'}, + {'ES' : 'Spain'}, + {'LK' : 'Sri Lanka'}, + {'SD' : 'Sudan (the)'}, + {'SR' : 'Suriname'}, + {'SJ' : 'Svalbard and Jan Mayen'}, + {'SE' : 'Sweden'}, + + {'SY' : 'Syrian Arab Republic (the)'}, + {'TW' : 'Taiwan (Province of China)'}, + {'TJ' : 'Tajikistan'}, + {'TZ' : 'Tanzania, the United Republic of'}, + {'TH' : 'Thailand'}, + {'TL' : 'Timor-Leste'}, + {'TG' : 'Togo'}, + {'TK' : 'Tokelau'}, + {'TO' : 'Tonga'}, + {'TT' : 'Trinidad and Tobago'}, + {'TN' : 'Tunisia'}, + {'TM' : 'Turkmenistan'}, + {'TC' : 'Turks and Caicos Islands (the)'}, + {'TV' : 'Tuvalu'}, + {'TR' : 'Türkiye'}, + {'UG' : 'Uganda'}, + {'UA' : 'Ukraine'}, + {'AE' : 'United Arab Emirates (the)'}, + {'GB' : 'United Kingdom of Great Britain and Northern Ireland (the)'}, + {'UM' : 'United States Minor Outlying Islands (the)'}, + + {'UY' : 'Uruguay'}, + {'UZ' : 'Uzbekistan'}, + {'VU' : 'Vanuatu'}, + {'VE' : 'Venezuela (Bolivarian Republic of)'}, + {'VN' : 'Viet Nam'}, + {'VG' : 'Virgin Islands (British)'}, + {'VI' : 'Virgin Islands (U.S.)'}, + {'WF' : 'Wallis and Futuna'}, + {'EH' : 'Western Sahara*'}, + {'YE' : 'Yemen'}, + {'ZM' : 'Zambia'}, + {'ZW' : 'Zimbabwe'}, +] diff --git a/frontend/src/encore/client.ts b/frontend/src/encore/client.ts new file mode 100755 index 0000000..eb92258 --- /dev/null +++ b/frontend/src/encore/client.ts @@ -0,0 +1,1365 @@ +// Code generated by the Encore v1.57.8 client generator. DO NOT EDIT. + +// Disable eslint, jshint, and jslint for this file. +/* eslint-disable */ +/* jshint ignore:start */ +/*jslint-disable*/ + +/** + * BaseURL is the base URL for calling the Encore application's API. + */ +export type BaseURL = string + +export const Local: BaseURL = "http://localhost:4000" + +/** + * Environment returns a BaseURL for calling the cloud environment with the given name. + */ +export function Environment(name: string): BaseURL { + return `https://${name}-q55oi.encr.app` +} + +/** + * PreviewEnv returns a BaseURL for calling the preview environment with the given PR number. + */ +export function PreviewEnv(pr: number | string): BaseURL { + return Environment(`pr${pr}`) +} + +const BROWSER = typeof globalThis === "object" && ("window" in globalThis); + +/** + * Client is an API client for the q55oi Encore application. + */ +export default class Client { + public readonly admin: admin.ServiceClient + public readonly auth: auth.ServiceClient + public readonly hello: hello.ServiceClient + public readonly profiles: profiles.ServiceClient + public readonly registration: registration.ServiceClient + private readonly options: ClientOptions + private readonly target: string + + + /** + * Creates a Client for calling the public and authenticated APIs of your Encore application. + * + * @param target The target which the client should be configured to use. See Local and Environment for options. + * @param options Options for the client + */ + constructor(target: BaseURL, options?: ClientOptions) { + this.target = target + this.options = options ?? {} + const base = new BaseClient(this.target, this.options) + this.admin = new admin.ServiceClient(base) + this.auth = new auth.ServiceClient(base) + this.hello = new hello.ServiceClient(base) + this.profiles = new profiles.ServiceClient(base) + this.registration = new registration.ServiceClient(base) + } + + /** + * Creates a new Encore client with the given client options set. + * + * @param options Client options to set. They are merged with existing options. + **/ + public with(options: ClientOptions): Client { + return new Client(this.target, { + ...this.options, + ...options, + }) + } +} + +/** + * ClientOptions allows you to override any default behaviour within the generated Encore client. + */ +export interface ClientOptions { + /** + * By default the client will use the inbuilt fetch function for making the API requests. + * however you can override it with your own implementation here if you want to run custom + * code on each API request made or response received. + */ + fetcher?: Fetcher + + /** Default RequestInit to be used for the client */ + requestInit?: Omit & { headers?: Record } + + /** + * Allows you to set the authentication data to be used for each + * request either by passing in a static object or by passing in + * a function which returns a new object for each request. + */ + auth?: auth.AuthParams | AuthDataGenerator +} + +/** + * Service admin provides administrative endpoints for managing application data. + */ +export namespace admin { + export interface ListProfilesResponse { + profiles: Profile[] + } + + export interface PersonalData { + "user_id": string + "first_name": string + "last_name": string + address: string + city: string + country: string + "created_at": string + "updated_at": string + } + + export interface PersonalDataParams { + "first_name": string + "last_name": string + address: string + city: string + country: string + } + + export interface Profile { + "user_id": string + email: string + "display_name": string + "avatar_url": string + "is_artist": boolean + role: string + status: profiles.Status + "created_at": string + "updated_at": string + } + + export interface ProfileParams { + "display_name": string + "avatar_url": string + } + + export interface RegisterParams { + email: string + "display_name": string + "avatar_url": string + password: string + } + + export interface SystemOptionsResponse { + roles: auth.RoleOption[] + statuses: profiles.StatusOption[] + } + + export interface UpdateProfileArtistParams { + "is_artist": boolean + } + + export interface UpdateProfileRoleParams { + role: string + } + + export interface UpdateProfileStatusParams { + status: profiles.Status + } + + export class ServiceClient { + private baseClient: BaseClient + + constructor(baseClient: BaseClient) { + this.baseClient = baseClient + this.DeleteProfile = this.DeleteProfile.bind(this) + this.GetPersonalData = this.GetPersonalData.bind(this) + this.GetProfile = this.GetProfile.bind(this) + this.GetSystemOptions = this.GetSystemOptions.bind(this) + this.InsertProfile = this.InsertProfile.bind(this) + this.ListProfiles = this.ListProfiles.bind(this) + this.UpdateProfile = this.UpdateProfile.bind(this) + this.UpdateProfileArtist = this.UpdateProfileArtist.bind(this) + this.UpdateProfileRole = this.UpdateProfileRole.bind(this) + this.UpdateProfileStatus = this.UpdateProfileStatus.bind(this) + this.UpsertPersonalData = this.UpsertPersonalData.bind(this) + } + + /** + * DeleteProfile removes any user's profile. + */ + public async DeleteProfile(userID: string): Promise { + await this.baseClient.callTypedAPI("DELETE", `/admin/profiles/${encodeURIComponent(userID)}`) + } + + /** + * GetPersonalData returns the personal data for the given user. + */ + public async GetPersonalData(userID: string): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/admin/profiles/${encodeURIComponent(userID)}/personal-data`) + return await resp.json() as PersonalData + } + + /** + * GetProfile returns the profile for the given user. + */ + public async GetProfile(userID: string): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/admin/profiles/${encodeURIComponent(userID)}`) + return await resp.json() as Profile + } + + /** + * GetSystemOptions returns the valid roles and profile statuses, each with a + * display name and underlying value, for use in admin UI dropdowns. + */ + public async GetSystemOptions(): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/admin/system/options`) + return await resp.json() as SystemOptionsResponse + } + + /** + * InsertProfile creates a new user profile with a server-generated UUID v4, + * delegating credential setup to the auth service. + */ + public async InsertProfile(params: RegisterParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("POST", `/admin/profiles`, JSON.stringify(params)) + return await resp.json() as Profile + } + + /** + * ListProfiles returns all user profiles, ordered by user ID. + */ + public async ListProfiles(): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/admin/profiles`) + return await resp.json() as ListProfilesResponse + } + + /** + * UpdateProfile replaces the data of any user's profile. + */ + public async UpdateProfile(userID: string, params: ProfileParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("PUT", `/admin/profiles/${encodeURIComponent(userID)}`, JSON.stringify(params)) + return await resp.json() as Profile + } + + /** + * UpdateProfileArtist sets the artist flag of any user's profile. + */ + public async UpdateProfileArtist(userID: string, params: UpdateProfileArtistParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("PUT", `/admin/profiles/${encodeURIComponent(userID)}/artist`, JSON.stringify(params)) + return await resp.json() as Profile + } + + /** + * UpdateProfileRole sets the role of any user's profile. + */ + public async UpdateProfileRole(userID: string, params: UpdateProfileRoleParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("PUT", `/admin/profiles/${encodeURIComponent(userID)}/role`, JSON.stringify(params)) + return await resp.json() as Profile + } + + /** + * UpdateProfileStatus sets the status of any user's profile. + */ + public async UpdateProfileStatus(userID: string, params: UpdateProfileStatusParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("PUT", `/admin/profiles/${encodeURIComponent(userID)}/status`, JSON.stringify(params)) + return await resp.json() as Profile + } + + /** + * UpsertPersonalData creates or replaces the personal data for the given user. + */ + public async UpsertPersonalData(userID: string, params: PersonalDataParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("PUT", `/admin/profiles/${encodeURIComponent(userID)}/personal-data`, JSON.stringify(params)) + return await resp.json() as PersonalData + } + } +} + +/** + * Service auth owns authentication: credentials, sessions, login and logout. + */ +export namespace auth { + export interface AuthParams { + Authorization: string + } + + /** + * RoleOption describes a valid role for display in admin UIs. + */ + export interface RoleOption { + name: string + value: string + } + + export interface SetPasswordParams { + password: string + } + + export class ServiceClient { + private baseClient: BaseClient + + constructor(baseClient: BaseClient) { + this.baseClient = baseClient + this.Logout = this.Logout.bind(this) + this.SetPassword = this.SetPassword.bind(this) + } + + /** + * Logout revokes the session used to authenticate the current request. + */ + public async Logout(): Promise { + await this.baseClient.callTypedAPI("POST", `/auth/logout`) + } + + /** + * SetPassword changes the password for the authenticated user. + */ + public async SetPassword(params: SetPasswordParams): Promise { + await this.baseClient.callTypedAPI("PUT", `/auth/password`, JSON.stringify(params)) + } + } +} + +/** + * Service hello implements a simple hello world REST API. + */ +export namespace hello { + export interface Response { + Message: string + } + + export class ServiceClient { + private baseClient: BaseClient + + constructor(baseClient: BaseClient) { + this.baseClient = baseClient + this.Index = this.Index.bind(this) + this.World = this.World.bind(this) + } + + /** + * Landing page with usage instructions. + */ + public async Index(method: string, path: string[], body?: RequestInit["body"], options?: CallParameters): Promise { + return this.baseClient.callAPI(method, `/${path.map(encodeURIComponent).join("/")}`, body, options) + } + + /** + * This is a public REST API that responds with a personalized greeting. + * Learn more about defining APIs with Encore: + * https://encore.dev/docs/primitives/services-and-apis + * + * To call it, run in your terminal: + * + * curl http://localhost:4000/hello/World + */ + public async World(name: string): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("POST", `/hello/${encodeURIComponent(name)}`) + return await resp.json() as Response + } + } +} + +/** + * Service profiles stores and serves user profile information. + */ +export namespace profiles { + export interface LoginParams { + "user_email": string + password: string + } + + export interface LoginResponse { + token: string + "expires_at": string + } + + /** + * PersonalData holds the personal details linked one-to-one to a user profile. + */ + export interface PersonalData { + "user_id": string + "first_name": string + "last_name": string + address: string + city: string + country: string + "created_at": string + "updated_at": string + } + + /** + * PersonalDataParams are the editable fields of a user's personal data. + */ + export interface PersonalDataParams { + "first_name": string + "last_name": string + address: string + city: string + country: string + } + + export interface Profile { + "user_id": string + email: string + "display_name": string + "avatar_url": string + "is_artist": boolean + role: string + status: Status + "created_at": string + "updated_at": string + } + + export interface ProfileParams { + "display_name": string + "avatar_url": string + } + + export interface RegisterParams { + email: string + "display_name": string + "avatar_url": string + password: string + } + + export type Status = number + + /** + * StatusOption describes a valid profile status for display in admin UIs. + */ + export interface StatusOption { + name: string + value: Status + updatable: boolean + } + + export class ServiceClient { + private baseClient: BaseClient + + constructor(baseClient: BaseClient) { + this.baseClient = baseClient + this.Delete = this.Delete.bind(this) + this.Get = this.Get.bind(this) + this.GetPersonalData = this.GetPersonalData.bind(this) + this.Insert = this.Insert.bind(this) + this.Login = this.Login.bind(this) + this.Me = this.Me.bind(this) + this.Update = this.Update.bind(this) + this.UploadAvatar = this.UploadAvatar.bind(this) + this.UpsertPersonalData = this.UpsertPersonalData.bind(this) + } + + /** + * Delete removes the authenticated user's own profile. + */ + public async Delete(): Promise { + await this.baseClient.callTypedAPI("DELETE", `/profiles`) + } + + /** + * Get returns the profile for the given user. For the caller's own profile + * (including when not authenticated), see MyProfile. + */ + public async Get(): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/profiles/profile`) + return await resp.json() as Profile + } + + /** + * GetPersonalData returns the authenticated user's own personal data. + */ + public async GetPersonalData(): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/profiles/personal-data`) + return await resp.json() as PersonalData + } + + /** + * Insert registers a new profile with a server-generated UUID v4, delegating + * credential setup to the auth service. + */ + public async Insert(params: RegisterParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("POST", `/profiles`, JSON.stringify(params)) + return await resp.json() as Profile + } + + /** + * Login is the public entry point for authenticating a user. It first + * resolves the given email to a user ID via the local profiles database. + * The actual credential check lives in the auth service; rather than calling + * it directly, this hands the request off over Pub/Sub (publishing to + * auth.LoginRequests) and waits for the matching auth.LoginCompleted reply + * on auth.LoginResults before responding to the caller. + * + * NOTE: the wait is implemented with an in-process registry keyed by request + * ID, so the instance that publishes the request must be the one that + * receives the reply. That holds for local development (a single instance) + * but not for a horizontally scaled deployment, which would need a shared + * mechanism instead (e.g. a results table polled with retry_until). + */ + public async Login(params: LoginParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("POST", `/auth/login`, JSON.stringify(params)) + return await resp.json() as LoginResponse + } + + /** + * Me returns the profile of the currently authenticated caller, or nil if + * the request is not authenticated. + */ + public async Me(): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/auth/me`) + return await resp.json() as Profile + } + + /** + * Update replaces the data of the authenticated user's own profile. + */ + public async Update(params: ProfileParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("PUT", `/profiles`, JSON.stringify(params)) + return await resp.json() as Profile + } + + /** + * UploadAvatar stores the request body as a new avatar image and returns its + * public URL. The caller is expected to persist the URL via the profile + * endpoints. Each upload gets a fresh key, so re-uploading never overwrites. + */ + public async UploadAvatar(method: "POST", body?: RequestInit["body"], options?: CallParameters): Promise { + return this.baseClient.callAPI(method, `/profiles/avatar`, body, options) + } + + /** + * UpsertPersonalData creates or replaces the authenticated user's own personal data. + */ + public async UpsertPersonalData(params: PersonalDataParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("PUT", `/profiles/personal-data`, JSON.stringify(params)) + return await resp.json() as PersonalData + } + } +} + +/** + * Service registration orchestrates new user registration. + */ +export namespace registration { + export interface EmailAvailabilityResponse { + email: string + available: boolean + "mx_valid": boolean + } + + export interface RegisterParams { + email: string + "display_name": string + "avatar_url": string + password: string + } + + export interface RegisterResponse { + profile: profiles.Profile + } + + export interface WelcomeResponse { + email: string + confirmed: boolean + "used_at": string + } + + export class ServiceClient { + private baseClient: BaseClient + + constructor(baseClient: BaseClient) { + this.baseClient = baseClient + this.CheckEmail = this.CheckEmail.bind(this) + this.ConfirmWelcome = this.ConfirmWelcome.bind(this) + this.Register = this.Register.bind(this) + } + + /** + * CheckEmail reports whether an email can be used for a new registration. + */ + public async CheckEmail(email: string): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("GET", `/registration/email/${encodeURIComponent(email)}`) + return await resp.json() as EmailAvailabilityResponse + } + + /** + * ConfirmWelcome validates the welcome email token. + */ + public async ConfirmWelcome(token: string): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("POST", `/registration/welcome/${encodeURIComponent(token)}`) + return await resp.json() as WelcomeResponse + } + + /** + * Register creates a new user and records the welcome transactional email. + */ + public async Register(params: RegisterParams): Promise { + // Now make the actual call to the API + const resp = await this.baseClient.callTypedAPI("POST", `/registration`, JSON.stringify(params)) + return await resp.json() as RegisterResponse + } + } +} + +export namespace http { + /** + * A Cookie represents an HTTP cookie as sent in the Set-Cookie header of an + * HTTP response or the Cookie header of an HTTP request. + * + * See https://tools.ietf.org/html/rfc6265 for details. + */ + export interface Cookie { + Name: string + Value: string + /** + * indicates whether the Value was originally quoted + */ + Quoted: boolean + + /** + * optional + */ + Path: string + + /** + * optional + */ + Domain: string + + /** + * optional + */ + Expires: string + + /** + * for reading cookies only + */ + RawExpires: string + + /** + * MaxAge=0 means no 'Max-Age' attribute specified. + * MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0' + * MaxAge>0 means Max-Age attribute present and given in seconds + */ + MaxAge: number + + Secure: boolean + HttpOnly: boolean + SameSite: SameSite + Partitioned: boolean + Raw: string + /** + * Raw text of unparsed attribute-value pairs + */ + Unparsed: string[] + } + + /** + * SameSite allows a server to define a cookie attribute making it impossible for + * the browser to send this cookie along with cross-site requests. The main + * goal is to mitigate the risk of cross-origin information leakage, and provide + * some protection against cross-site request forgery attacks. + * + * See https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00 for details. + */ + export type SameSite = number +} + + + +function encodeQuery(parts: Record): string { + const pairs: string[] = [] + for (const key in parts) { + const val = (Array.isArray(parts[key]) ? parts[key] : [parts[key]]) as string[] + for (const v of val) { + pairs.push(`${key}=${encodeURIComponent(v)}`) + } + } + return pairs.join("&") +} + +// makeRecord takes a record and strips any undefined values from it, +// and returns the same record with a narrower type. +// @ts-ignore - TS ignore because makeRecord is not always used +function makeRecord(record: Record): Record { + for (const key in record) { + if (record[key] === undefined) { + delete record[key] + } + } + return record as Record +} + +function encodeWebSocketHeaders(headers: Record) { + // url safe, no pad + const base64encoded = btoa(JSON.stringify(headers)) + .replaceAll("=", "") + .replaceAll("+", "-") + .replaceAll("/", "_"); + return "encore.dev.headers." + base64encoded; +} + +class WebSocketConnection { + public ws: WebSocket; + + private hasUpdateHandlers: (() => void)[] = []; + + constructor(url: string, headers?: Record) { + let protocols = ["encore-ws"]; + if (headers) { + protocols.push(encodeWebSocketHeaders(headers)) + } + + this.ws = new WebSocket(url, protocols) + + this.on("error", () => { + this.resolveHasUpdateHandlers(); + }); + + this.on("close", () => { + this.resolveHasUpdateHandlers(); + }); + } + + resolveHasUpdateHandlers() { + const handlers = this.hasUpdateHandlers; + this.hasUpdateHandlers = []; + + for (const handler of handlers) { + handler() + } + } + + async hasUpdate() { + // await until a new message have been received, or the socket is closed + await new Promise((resolve) => { + this.hasUpdateHandlers.push(() => resolve(null)) + }); + } + + on(type: "error" | "close" | "message" | "open", handler: (event: any) => void) { + this.ws.addEventListener(type, handler); + } + + off(type: "error" | "close" | "message" | "open", handler: (event: any) => void) { + this.ws.removeEventListener(type, handler); + } + + close() { + this.ws.close(); + } +} + +export class StreamInOut { + public socket: WebSocketConnection; + private buffer: Response[] = []; + + constructor(url: string, headers?: Record) { + this.socket = new WebSocketConnection(url, headers); + this.socket.on("message", (event: any) => { + this.buffer.push(JSON.parse(event.data)); + this.socket.resolveHasUpdateHandlers(); + }); + } + + close() { + this.socket.close(); + } + + async send(msg: Request) { + if (this.socket.ws.readyState === WebSocket.CONNECTING) { + // await that the socket is opened + await new Promise((resolve) => { + this.socket.ws.addEventListener("open", resolve, { once: true }); + }); + } + + return this.socket.ws.send(JSON.stringify(msg)); + } + + async next(): Promise { + for await (const next of this) return next; + return undefined; + } + + async *[Symbol.asyncIterator](): AsyncGenerator { + while (true) { + if (this.buffer.length > 0) { + yield this.buffer.shift() as Response; + } else { + if (this.socket.ws.readyState === WebSocket.CLOSED) return; + await this.socket.hasUpdate(); + } + } + } +} + +export class StreamIn { + public socket: WebSocketConnection; + private buffer: Response[] = []; + + constructor(url: string, headers?: Record) { + this.socket = new WebSocketConnection(url, headers); + this.socket.on("message", (event: any) => { + this.buffer.push(JSON.parse(event.data)); + this.socket.resolveHasUpdateHandlers(); + }); + } + + close() { + this.socket.close(); + } + + async next(): Promise { + for await (const next of this) return next; + return undefined; + } + + async *[Symbol.asyncIterator](): AsyncGenerator { + while (true) { + if (this.buffer.length > 0) { + yield this.buffer.shift() as Response; + } else { + if (this.socket.ws.readyState === WebSocket.CLOSED) return; + await this.socket.hasUpdate(); + } + } + } +} + +export class StreamOut { + public socket: WebSocketConnection; + private responseValue: Promise; + + constructor(url: string, headers?: Record) { + let responseResolver: (_: any) => void; + this.responseValue = new Promise((resolve) => responseResolver = resolve); + + this.socket = new WebSocketConnection(url, headers); + this.socket.on("message", (event: any) => { + responseResolver(JSON.parse(event.data)) + }); + } + + async response(): Promise { + return this.responseValue; + } + + close() { + this.socket.close(); + } + + async send(msg: Request) { + if (this.socket.ws.readyState === WebSocket.CONNECTING) { + // await that the socket is opened + await new Promise((resolve) => { + this.socket.ws.addEventListener("open", resolve, { once: true }); + }); + } + + return this.socket.ws.send(JSON.stringify(msg)); + } +} +// CallParameters is the type of the parameters to a method call, but require headers to be a Record type +type CallParameters = Omit & { + /** Headers to be sent with the request */ + headers?: Record + + /** Query parameters to be sent with the request */ + query?: Record +} + +// AuthDataGenerator is a function that returns a new instance of the authentication data required by this API +export type AuthDataGenerator = () => + | auth.AuthParams + | Promise + | undefined; + +// A fetcher is the prototype for the inbuilt Fetch function +export type Fetcher = typeof fetch; + +const boundFetch = fetch.bind(this); + +class BaseClient { + readonly baseURL: string + readonly fetcher: Fetcher + readonly headers: Record + readonly requestInit: Omit & { headers?: Record } + readonly authGenerator?: AuthDataGenerator + + constructor(baseURL: string, options: ClientOptions) { + this.baseURL = baseURL + this.headers = {} + + // Add User-Agent header if the script is running in the server + // because browsers do not allow setting User-Agent headers to requests + if (!BROWSER) { + this.headers["User-Agent"] = "q55oi-Generated-TS-Client (Encore/v1.57.8)"; + } + + this.requestInit = options.requestInit ?? {}; + + // Setup what fetch function we'll be using in the base client + if (options.fetcher !== undefined) { + this.fetcher = options.fetcher + } else { + this.fetcher = boundFetch + } + + // Setup an authentication data generator using the auth data token option + if (options.auth !== undefined) { + const auth = options.auth + if (typeof auth === "function") { + this.authGenerator = auth + } else { + this.authGenerator = () => auth + } + } + } + + async getAuthData(): Promise { + let authData: auth.AuthParams | undefined; + + // If authorization data generator is present, call it and add the returned data to the request + if (this.authGenerator) { + const mayBePromise = this.authGenerator(); + if (mayBePromise instanceof Promise) { + authData = await mayBePromise; + } else { + authData = mayBePromise; + } + } + + if (authData) { + const data: CallParameters = {}; + + data.headers = makeRecord({ + authorization: authData.Authorization, + }); + + return data; + } + + return undefined; + } + + // createStreamInOut sets up a stream to a streaming API endpoint. + async createStreamInOut(path: string, params?: CallParameters): Promise> { + let { query, headers } = params ?? {}; + + // Fetch auth data if there is any + const authData = await this.getAuthData(); + + // If we now have authentication data, add it to the request + if (authData) { + if (authData.query) { + query = {...query, ...authData.query}; + } + if (authData.headers) { + headers = {...headers, ...authData.headers}; + } + } + + const queryString = query ? '?' + encodeQuery(query) : '' + return new StreamInOut(this.baseURL + path + queryString, headers); + } + + // createStreamIn sets up a stream to a streaming API endpoint. + async createStreamIn(path: string, params?: CallParameters): Promise> { + let { query, headers } = params ?? {}; + + // Fetch auth data if there is any + const authData = await this.getAuthData(); + + // If we now have authentication data, add it to the request + if (authData) { + if (authData.query) { + query = {...query, ...authData.query}; + } + if (authData.headers) { + headers = {...headers, ...authData.headers}; + } + } + + const queryString = query ? '?' + encodeQuery(query) : '' + return new StreamIn(this.baseURL + path + queryString, headers); + } + + // createStreamOut sets up a stream to a streaming API endpoint. + async createStreamOut(path: string, params?: CallParameters): Promise> { + let { query, headers } = params ?? {}; + + // Fetch auth data if there is any + const authData = await this.getAuthData(); + + // If we now have authentication data, add it to the request + if (authData) { + if (authData.query) { + query = {...query, ...authData.query}; + } + if (authData.headers) { + headers = {...headers, ...authData.headers}; + } + } + + const queryString = query ? '?' + encodeQuery(query) : '' + return new StreamOut(this.baseURL + path + queryString, headers); + } + + // callTypedAPI makes an API call, defaulting content type to "application/json" + public async callTypedAPI(method: string, path: string, body?: RequestInit["body"], params?: CallParameters): Promise { + return this.callAPI(method, path, body, { + ...params, + headers: { "Content-Type": "application/json", ...params?.headers } + }); + } + + // callAPI is used by each generated API method to actually make the request + public async callAPI(method: string, path: string, body?: RequestInit["body"], params?: CallParameters): Promise { + let { query, headers, ...rest } = params ?? {} + const init = { + ...this.requestInit, + ...rest, + method, + body: body ?? null, + } + + // Merge our headers with any predefined headers + init.headers = {...this.headers, ...init.headers, ...headers} + + // Fetch auth data if there is any + const authData = await this.getAuthData(); + + // If we now have authentication data, add it to the request + if (authData) { + if (authData.query) { + query = {...query, ...authData.query}; + } + if (authData.headers) { + init.headers = {...init.headers, ...authData.headers}; + } + } + + // Make the actual request + const queryString = query ? '?' + encodeQuery(query) : '' + const response = await this.fetcher(this.baseURL+path+queryString, init) + + // handle any error responses + if (!response.ok) { + // try and get the error message from the response body + let body: APIErrorResponse = { code: ErrCode.Unknown, message: `request failed: status ${response.status}` } + + // if we can get the structured error we should, otherwise give a best effort + try { + const text = await response.text() + + try { + const jsonBody = JSON.parse(text) + if (isAPIErrorResponse(jsonBody)) { + body = jsonBody + } else { + body.message += ": " + JSON.stringify(jsonBody) + } + } catch { + body.message += ": " + text + } + } catch (e) { + // otherwise we just append the text to the error message + body.message += ": " + String(e) + } + + throw new APIError(response.status, body) + } + + return response + } +} + +/** + * APIErrorDetails represents the response from an Encore API in the case of an error + */ +interface APIErrorResponse { + code: ErrCode + message: string + details?: any +} + +function isAPIErrorResponse(err: any): err is APIErrorResponse { + return ( + err !== undefined && err !== null && + isErrCode(err.code) && + typeof(err.message) === "string" && + (err.details === undefined || err.details === null || typeof(err.details) === "object") + ) +} + +function isErrCode(code: any): code is ErrCode { + return code !== undefined && Object.values(ErrCode).includes(code) +} + +/** + * APIError represents a structured error as returned from an Encore application. + */ +export class APIError extends Error { + /** + * The HTTP status code associated with the error. + */ + public readonly status: number + + /** + * The Encore error code + */ + public readonly code: ErrCode + + /** + * The error details + */ + public readonly details?: any + + constructor(status: number, response: APIErrorResponse) { + // extending errors causes issues after you construct them, unless you apply the following fixes + super(response.message); + + // set error name as constructor name, make it not enumerable to keep native Error behavior + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target#new.target_in_constructors + Object.defineProperty(this, 'name', { + value: 'APIError', + enumerable: false, + configurable: true, + }) + + // fix the prototype chain + if ((Object as any).setPrototypeOf == undefined) { + (this as any).__proto__ = APIError.prototype + } else { + Object.setPrototypeOf(this, APIError.prototype); + } + + // capture a stack trace + if ((Error as any).captureStackTrace !== undefined) { + (Error as any).captureStackTrace(this, this.constructor); + } + + this.status = status + this.code = response.code + this.details = response.details + } +} + +/** + * Typeguard allowing use of an APIError's fields' + */ +export function isAPIError(err: any): err is APIError { + return err instanceof APIError; +} + +export enum ErrCode { + /** + * OK indicates the operation was successful. + */ + OK = "ok", + + /** + * Canceled indicates the operation was canceled (typically by the caller). + * + * Encore will generate this error code when cancellation is requested. + */ + Canceled = "canceled", + + /** + * Unknown error. An example of where this error may be returned is + * if a Status value received from another address space belongs to + * an error-space that is not known in this address space. Also + * errors raised by APIs that do not return enough error information + * may be converted to this error. + * + * Encore will generate this error code in the above two mentioned cases. + */ + Unknown = "unknown", + + /** + * InvalidArgument indicates client specified an invalid argument. + * Note that this differs from FailedPrecondition. It indicates arguments + * that are problematic regardless of the state of the system + * (e.g., a malformed file name). + * + * This error code will not be generated by the gRPC framework. + */ + InvalidArgument = "invalid_argument", + + /** + * DeadlineExceeded means operation expired before completion. + * For operations that change the state of the system, this error may be + * returned even if the operation has completed successfully. For + * example, a successful response from a server could have been delayed + * long enough for the deadline to expire. + * + * The gRPC framework will generate this error code when the deadline is + * exceeded. + */ + DeadlineExceeded = "deadline_exceeded", + + /** + * NotFound means some requested entity (e.g., file or directory) was + * not found. + * + * This error code will not be generated by the gRPC framework. + */ + NotFound = "not_found", + + /** + * AlreadyExists means an attempt to create an entity failed because one + * already exists. + * + * This error code will not be generated by the gRPC framework. + */ + AlreadyExists = "already_exists", + + /** + * PermissionDenied indicates the caller does not have permission to + * execute the specified operation. It must not be used for rejections + * caused by exhausting some resource (use ResourceExhausted + * instead for those errors). It must not be + * used if the caller cannot be identified (use Unauthenticated + * instead for those errors). + * + * This error code will not be generated by the gRPC core framework, + * but expect authentication middleware to use it. + */ + PermissionDenied = "permission_denied", + + /** + * ResourceExhausted indicates some resource has been exhausted, perhaps + * a per-user quota, or perhaps the entire file system is out of space. + * + * This error code will be generated by the gRPC framework in + * out-of-memory and server overload situations, or when a message is + * larger than the configured maximum size. + */ + ResourceExhausted = "resource_exhausted", + + /** + * FailedPrecondition indicates operation was rejected because the + * system is not in a state required for the operation's execution. + * For example, directory to be deleted may be non-empty, an rmdir + * operation is applied to a non-directory, etc. + * + * A litmus test that may help a service implementor in deciding + * between FailedPrecondition, Aborted, and Unavailable: + * (a) Use Unavailable if the client can retry just the failing call. + * (b) Use Aborted if the client should retry at a higher-level + * (e.g., restarting a read-modify-write sequence). + * (c) Use FailedPrecondition if the client should not retry until + * the system state has been explicitly fixed. E.g., if an "rmdir" + * fails because the directory is non-empty, FailedPrecondition + * should be returned since the client should not retry unless + * they have first fixed up the directory by deleting files from it. + * (d) Use FailedPrecondition if the client performs conditional + * REST Get/Update/Delete on a resource and the resource on the + * server does not match the condition. E.g., conflicting + * read-modify-write on the same resource. + * + * This error code will not be generated by the gRPC framework. + */ + FailedPrecondition = "failed_precondition", + + /** + * Aborted indicates the operation was aborted, typically due to a + * concurrency issue like sequencer check failures, transaction aborts, + * etc. + * + * See litmus test above for deciding between FailedPrecondition, + * Aborted, and Unavailable. + */ + Aborted = "aborted", + + /** + * OutOfRange means operation was attempted past the valid range. + * E.g., seeking or reading past end of file. + * + * Unlike InvalidArgument, this error indicates a problem that may + * be fixed if the system state changes. For example, a 32-bit file + * system will generate InvalidArgument if asked to read at an + * offset that is not in the range [0,2^32-1], but it will generate + * OutOfRange if asked to read from an offset past the current + * file size. + * + * There is a fair bit of overlap between FailedPrecondition and + * OutOfRange. We recommend using OutOfRange (the more specific + * error) when it applies so that callers who are iterating through + * a space can easily look for an OutOfRange error to detect when + * they are done. + * + * This error code will not be generated by the gRPC framework. + */ + OutOfRange = "out_of_range", + + /** + * Unimplemented indicates operation is not implemented or not + * supported/enabled in this service. + * + * This error code will be generated by the gRPC framework. Most + * commonly, you will see this error code when a method implementation + * is missing on the server. It can also be generated for unknown + * compression algorithms or a disagreement as to whether an RPC should + * be streaming. + */ + Unimplemented = "unimplemented", + + /** + * Internal errors. Means some invariants expected by underlying + * system has been broken. If you see one of these errors, + * something is very broken. + * + * This error code will be generated by the gRPC framework in several + * internal error conditions. + */ + Internal = "internal", + + /** + * Unavailable indicates the service is currently unavailable. + * This is a most likely a transient condition and may be corrected + * by retrying with a backoff. Note that it is not always safe to retry + * non-idempotent operations. + * + * See litmus test above for deciding between FailedPrecondition, + * Aborted, and Unavailable. + * + * This error code will be generated by the gRPC framework during + * abrupt shutdown of a server process or network connection. + */ + Unavailable = "unavailable", + + /** + * DataLoss indicates unrecoverable data loss or corruption. + * + * This error code will not be generated by the gRPC framework. + */ + DataLoss = "data_loss", + + /** + * Unauthenticated indicates the request does not have valid + * authentication credentials for the operation. + * + * The gRPC framework will generate this error code when the + * authentication metadata is invalid or a Credentials callback fails, + * but also expect authentication middleware to generate it. + */ + Unauthenticated = "unauthenticated", +} diff --git a/frontend/src/encore/zod.ts b/frontend/src/encore/zod.ts new file mode 100644 index 0000000..6e02ee5 --- /dev/null +++ b/frontend/src/encore/zod.ts @@ -0,0 +1,71 @@ +// Code synced from src/encore/client.ts by frontend/tools/zod-sync.mjs. +// Existing field validators are preserved when this file is synced again. +import { z } from 'zod'; + +export const AdminPersonalDataParamsSchema = z.object({ + first_name: z.string().min(2).max(32), + last_name: z.string().min(2).max(32), + address: z.string().min(5).max(32), + city: z.string().min(2).max(32), + country: z.string(), +}); + +export const AdminProfileParamsSchema = z.object({ + display_name: z.string().min(2).max(32), + avatar_url: z.string(), +}); + +export const AdminRegisterParamsSchema = z.object({ + email: z.string(), + display_name: z.string(), + avatar_url: z.string(), + password: z.string(), +}); + +export const AdminUpdateProfileArtistParamsSchema = z.object({ + is_artist: z.boolean(), +}); + +export const AdminUpdateProfileRoleParamsSchema = z.object({ + role: z.string(), +}); + +export const AdminUpdateProfileStatusParamsSchema = z.object({ + status: z.number(), +}); + +export const AuthSetPasswordParamsSchema = z.object({ + password: z.string(), +}); + +export const ProfilesLoginParamsSchema = z.object({ + user_email: z.string(), + password: z.string(), +}); + +export const ProfilesPersonalDataParamsSchema = z.object({ + first_name: z.string(), + last_name: z.string(), + address: z.string(), + city: z.string(), + country: z.string(), +}); + +export const ProfilesProfileParamsSchema = z.object({ + display_name: z.string(), + avatar_url: z.string(), +}); + +export const ProfilesRegisterParamsSchema = z.object({ + email: z.string(), + display_name: z.string(), + avatar_url: z.string(), + password: z.string(), +}); + +export const RegistrationRegisterParamsSchema = z.object({ + email: z.string().email(), + display_name: z.string().min(2).max(32), + avatar_url: z.string(), + password: z.string().min(8), +}); diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts new file mode 100644 index 0000000..58d37f0 --- /dev/null +++ b/frontend/src/i18n/index.ts @@ -0,0 +1,558 @@ +import { createI18n } from 'vue-i18n'; + +export type SupportedLocale = 'en' | 'it' | 'fr' | 'de' | 'es'; + +export const localeOptions: { label: string; value: SupportedLocale }[] = [ + { label: 'English', value: 'en' }, + { label: 'Italiano', value: 'it' }, + { label: 'Français', value: 'fr' }, + { label: 'Deutsch', value: 'de' }, + { label: 'Español', value: 'es' }, +]; + +const fallbackLocale: SupportedLocale = 'en'; +const storageKey = 'app.locale'; + +const messages = { + en: { + app: { title: 'Encore Profiles' }, + nav: { + menu: 'Menu', + profiles: 'Profiles', + myProfile: 'My profile', + login: 'Log in', + register: 'Register', + logout: 'Log out ({name})', + logoutAction: 'Log out', + language: 'Language', + }, + actions: { + cancel: 'Cancel', + save: 'Save', + create: 'Create', + remove: 'Remove', + chooseFile: 'Choose file', + camera: 'Camera', + takePhoto: 'Take photo', + crop: 'Crop', + newProfile: 'New profile', + register: 'Register', + editProfile: 'Edit profile', + updateRole: 'Update role', + updateStatus: 'Update status', + }, + fields: { + email: 'Email', + password: 'Password', + displayName: 'Display name', + firstName: 'First name', + lastName: 'Last name', + address: 'Address', + city: 'City', + country: 'Country', + role: 'Role', + status: 'Status', + }, + avatar: { + cropAvatar: 'Crop avatar', + cameraUnavailable: 'Camera not available in this browser.', + }, + admin: { + dashboard: 'Dashboard', + profiles: 'Profiles', + personalData: 'Personal data', + profile: 'Profile', + notArtist: 'Not an artist', + artist: 'Artist', + columns: { + name: 'Name', + email: 'Email', + role: 'Role', + status: 'Status', + artist: 'Artist', + created: 'Created', + updated: 'Updated', + }, + }, + profile: { + title: 'My profile', + loginRequired: 'You must be logged in to view your profile.', + }, + login: { + title: 'Log in', + needAccount: 'Create an account', + }, + register: { + title: 'Create account', + welcomeTitle: 'Welcome', + haveAccount: 'I already have an account', + success: 'Registration completed. You can now log in.', + confirmationSent: 'We sent you a confirmation request. Please check your mailbox.', + emailUnavailable: 'This email is already registered.', + emailDomainInvalid: 'This email domain cannot receive email.', + }, + welcome: { + title: 'Email confirmation', + success: 'Email confirmed for {email}.', + missingToken: 'Missing confirmation token.', + }, + pages: { + home: 'Home', + goHome: 'Go Home', + goToIndex: 'Go to Index Page', + goToSecond: 'Go to Second Page', + cropperExample: 'Cropper example', + notFound: 'Oops. Nothing here...', + unauthorized: 'Unauthorized', + unauthorizedHint: 'You need to log in to access this page.', + }, + status: { + 0: 'Active', + 1: 'Inactive', + 2: 'Suspended', + 3: 'Deleted', + 4: 'Pending', + 5: 'Waiting deletion', + 6: 'Banned', + unknown: 'Unknown ({status})', + }, + }, + it: { + app: { title: 'Profili Encore' }, + nav: { + menu: 'Menu', + profiles: 'Profili', + myProfile: 'Il mio profilo', + login: 'Accedi', + register: 'Registrati', + logout: 'Esci ({name})', + logoutAction: 'Esci', + language: 'Lingua', + }, + actions: { + cancel: 'Annulla', + save: 'Salva', + create: 'Crea', + remove: 'Rimuovi', + chooseFile: 'Scegli file', + camera: 'Fotocamera', + takePhoto: 'Scatta foto', + crop: 'Ritaglia', + newProfile: 'Nuovo profilo', + register: 'Registrati', + editProfile: 'Modifica profilo', + updateRole: 'Aggiorna ruolo', + updateStatus: 'Aggiorna stato', + }, + fields: { + email: 'Email', + password: 'Password', + displayName: 'Nome visualizzato', + firstName: 'Nome', + lastName: 'Cognome', + address: 'Indirizzo', + city: 'Città', + country: 'Paese', + role: 'Ruolo', + status: 'Stato', + }, + avatar: { + cropAvatar: 'Ritaglia avatar', + cameraUnavailable: 'Fotocamera non disponibile in questo browser.', + }, + admin: { + dashboard: 'Dashboard', + profiles: 'Profili', + personalData: 'Dati personali', + profile: 'Profilo', + notArtist: 'Non artista', + artist: 'Artista', + columns: { + name: 'Nome', + email: 'Email', + role: 'Ruolo', + status: 'Stato', + artist: 'Artista', + created: 'Creato', + updated: 'Aggiornato', + }, + }, + profile: { + title: 'Il mio profilo', + loginRequired: 'Devi effettuare l’accesso per visualizzare il profilo.', + }, + login: { + title: 'Accedi', + needAccount: 'Crea un account', + }, + register: { + title: 'Crea account', + welcomeTitle: 'Benvenuto', + haveAccount: 'Ho già un account', + success: 'Registrazione completata. Ora puoi accedere.', + confirmationSent: 'Ti abbiamo inviato una richieta di conferma, consulta la tua casella di posta.', + emailUnavailable: 'Questa email è già registrata.', + emailDomainInvalid: 'Il dominio di questa email non può ricevere posta.', + }, + welcome: { + title: 'Conferma email', + success: 'Email confermata per {email}.', + missingToken: 'Token di conferma mancante.', + }, + pages: { + home: 'Home', + goHome: 'Vai alla home', + goToIndex: 'Vai alla pagina iniziale', + goToSecond: 'Vai alla seconda pagina', + cropperExample: 'Esempio cropper', + notFound: 'Ops. Qui non c’è niente...', + unauthorized: 'Non autorizzato', + unauthorizedHint: 'Devi effettuare l’accesso per visualizzare questa pagina.', + }, + status: { + 0: 'Attivo', + 1: 'Inattivo', + 2: 'Sospeso', + 3: 'Eliminato', + 4: 'In attesa', + 5: 'In attesa di eliminazione', + 6: 'Bannato', + unknown: 'Sconosciuto ({status})', + }, + }, + fr: { + app: { title: 'Profils Encore' }, + nav: { + menu: 'Menu', + profiles: 'Profils', + myProfile: 'Mon profil', + login: 'Connexion', + register: 'Inscription', + logout: 'Déconnexion ({name})', + logoutAction: 'Déconnexion', + language: 'Langue', + }, + actions: { + cancel: 'Annuler', + save: 'Enregistrer', + create: 'Créer', + remove: 'Supprimer', + chooseFile: 'Choisir un fichier', + camera: 'Caméra', + takePhoto: 'Prendre une photo', + crop: 'Recadrer', + newProfile: 'Nouveau profil', + register: 'S’inscrire', + editProfile: 'Modifier le profil', + updateRole: 'Modifier le rôle', + updateStatus: 'Modifier le statut', + }, + fields: { + email: 'Email', + password: 'Mot de passe', + displayName: 'Nom affiché', + firstName: 'Prénom', + lastName: 'Nom', + address: 'Adresse', + city: 'Ville', + country: 'Pays', + role: 'Rôle', + status: 'Statut', + }, + avatar: { + cropAvatar: 'Recadrer l’avatar', + cameraUnavailable: 'Caméra non disponible dans ce navigateur.', + }, + admin: { + dashboard: 'Tableau de bord', + profiles: 'Profils', + personalData: 'Données personnelles', + profile: 'Profil', + notArtist: 'Pas artiste', + artist: 'Artiste', + columns: { + name: 'Nom', + email: 'Email', + role: 'Rôle', + status: 'Statut', + artist: 'Artiste', + created: 'Créé', + updated: 'Mis à jour', + }, + }, + profile: { + title: 'Mon profil', + loginRequired: 'Vous devez être connecté pour voir votre profil.', + }, + login: { + title: 'Connexion', + needAccount: 'Créer un compte', + }, + register: { + title: 'Créer un compte', + welcomeTitle: 'Bienvenue', + haveAccount: 'J’ai déjà un compte', + success: 'Inscription terminée. Vous pouvez maintenant vous connecter.', + confirmationSent: 'Nous vous avons envoyé une demande de confirmation. Veuillez consulter votre boîte mail.', + emailUnavailable: 'Cet email est déjà enregistré.', + emailDomainInvalid: 'Ce domaine email ne peut pas recevoir d’e-mails.', + }, + welcome: { + title: 'Confirmation email', + success: 'Email confirmée pour {email}.', + missingToken: 'Jeton de confirmation manquant.', + }, + pages: { + home: 'Accueil', + goHome: 'Accueil', + goToIndex: 'Aller à la page d’accueil', + goToSecond: 'Aller à la deuxième page', + cropperExample: 'Exemple de recadrage', + notFound: 'Oups. Rien ici...', + unauthorized: 'Non autorisé', + unauthorizedHint: 'Vous devez vous connecter pour accéder à cette page.', + }, + status: { + 0: 'Actif', + 1: 'Inactif', + 2: 'Suspendu', + 3: 'Supprimé', + 4: 'En attente', + 5: 'Suppression en attente', + 6: 'Banni', + unknown: 'Inconnu ({status})', + }, + }, + de: { + app: { title: 'Encore Profile' }, + nav: { + menu: 'Menü', + profiles: 'Profile', + myProfile: 'Mein Profil', + login: 'Anmelden', + register: 'Registrieren', + logout: 'Abmelden ({name})', + logoutAction: 'Abmelden', + language: 'Sprache', + }, + actions: { + cancel: 'Abbrechen', + save: 'Speichern', + create: 'Erstellen', + remove: 'Entfernen', + chooseFile: 'Datei wählen', + camera: 'Kamera', + takePhoto: 'Foto aufnehmen', + crop: 'Zuschneiden', + newProfile: 'Neues Profil', + register: 'Registrieren', + editProfile: 'Profil bearbeiten', + updateRole: 'Rolle ändern', + updateStatus: 'Status ändern', + }, + fields: { + email: 'E-Mail', + password: 'Passwort', + displayName: 'Anzeigename', + firstName: 'Vorname', + lastName: 'Nachname', + address: 'Adresse', + city: 'Stadt', + country: 'Land', + role: 'Rolle', + status: 'Status', + }, + avatar: { + cropAvatar: 'Avatar zuschneiden', + cameraUnavailable: 'Kamera ist in diesem Browser nicht verfügbar.', + }, + admin: { + dashboard: 'Dashboard', + profiles: 'Profile', + personalData: 'Persönliche Daten', + profile: 'Profil', + notArtist: 'Kein Künstler', + artist: 'Künstler', + columns: { + name: 'Name', + email: 'E-Mail', + role: 'Rolle', + status: 'Status', + artist: 'Künstler', + created: 'Erstellt', + updated: 'Aktualisiert', + }, + }, + profile: { + title: 'Mein Profil', + loginRequired: 'Sie müssen angemeldet sein, um Ihr Profil zu sehen.', + }, + login: { + title: 'Anmelden', + needAccount: 'Konto erstellen', + }, + register: { + title: 'Konto erstellen', + welcomeTitle: 'Willkommen', + haveAccount: 'Ich habe bereits ein Konto', + success: 'Registrierung abgeschlossen. Sie können sich jetzt anmelden.', + confirmationSent: 'Wir haben Ihnen eine Bestätigungsanfrage gesendet. Bitte prüfen Sie Ihr Postfach.', + emailUnavailable: 'Diese E-Mail ist bereits registriert.', + emailDomainInvalid: 'Diese E-Mail-Domain kann keine E-Mails empfangen.', + }, + welcome: { + title: 'E-Mail-Bestätigung', + success: 'E-Mail für {email} bestätigt.', + missingToken: 'Bestätigungstoken fehlt.', + }, + pages: { + home: 'Startseite', + goHome: 'Zur Startseite', + goToIndex: 'Zur Startseite', + goToSecond: 'Zur zweiten Seite', + cropperExample: 'Cropper-Beispiel', + notFound: 'Hoppla. Hier ist nichts...', + unauthorized: 'Nicht autorisiert', + unauthorizedHint: 'Sie müssen angemeldet sein, um diese Seite aufzurufen.', + }, + status: { + 0: 'Aktiv', + 1: 'Inaktiv', + 2: 'Gesperrt', + 3: 'Gelöscht', + 4: 'Ausstehend', + 5: 'Löschung ausstehend', + 6: 'Gebannt', + unknown: 'Unbekannt ({status})', + }, + }, + es: { + app: { title: 'Perfiles Encore' }, + nav: { + menu: 'Menú', + profiles: 'Perfiles', + myProfile: 'Mi perfil', + login: 'Iniciar sesión', + register: 'Registrarse', + logout: 'Cerrar sesión ({name})', + logoutAction: 'Cerrar sesión', + language: 'Idioma', + }, + actions: { + cancel: 'Cancelar', + save: 'Guardar', + create: 'Crear', + remove: 'Eliminar', + chooseFile: 'Elegir archivo', + camera: 'Cámara', + takePhoto: 'Tomar foto', + crop: 'Recortar', + newProfile: 'Nuevo perfil', + register: 'Registrarse', + editProfile: 'Editar perfil', + updateRole: 'Actualizar rol', + updateStatus: 'Actualizar estado', + }, + fields: { + email: 'Email', + password: 'Contraseña', + displayName: 'Nombre visible', + firstName: 'Nombre', + lastName: 'Apellido', + address: 'Dirección', + city: 'Ciudad', + country: 'País', + role: 'Rol', + status: 'Estado', + }, + avatar: { + cropAvatar: 'Recortar avatar', + cameraUnavailable: 'La cámara no está disponible en este navegador.', + }, + admin: { + dashboard: 'Panel', + profiles: 'Perfiles', + personalData: 'Datos personales', + profile: 'Perfil', + notArtist: 'No artista', + artist: 'Artista', + columns: { + name: 'Nombre', + email: 'Email', + role: 'Rol', + status: 'Estado', + artist: 'Artista', + created: 'Creado', + updated: 'Actualizado', + }, + }, + profile: { + title: 'Mi perfil', + loginRequired: 'Debes iniciar sesión para ver tu perfil.', + }, + login: { + title: 'Iniciar sesión', + needAccount: 'Crear una cuenta', + }, + register: { + title: 'Crear cuenta', + welcomeTitle: 'Bienvenido', + haveAccount: 'Ya tengo una cuenta', + success: 'Registro completado. Ahora puedes iniciar sesión.', + confirmationSent: 'Te hemos enviado una solicitud de confirmación. Revisa tu buzón de correo.', + emailUnavailable: 'Este email ya está registrado.', + emailDomainInvalid: 'Este dominio de email no puede recibir correo.', + }, + welcome: { + title: 'Confirmación de email', + success: 'Email confirmado para {email}.', + missingToken: 'Falta el token de confirmación.', + }, + pages: { + home: 'Inicio', + goHome: 'Ir al inicio', + goToIndex: 'Ir a la página inicial', + goToSecond: 'Ir a la segunda página', + cropperExample: 'Ejemplo de recorte', + notFound: 'Vaya. Aquí no hay nada...', + unauthorized: 'No autorizado', + unauthorizedHint: 'Debes iniciar sesión para acceder a esta página.', + }, + status: { + 0: 'Activo', + 1: 'Inactivo', + 2: 'Suspendido', + 3: 'Eliminado', + 4: 'Pendiente', + 5: 'Esperando eliminación', + 6: 'Bloqueado', + unknown: 'Desconocido ({status})', + }, + }, +}; + +function detectLocale(): SupportedLocale { + const stored = window.localStorage.getItem(storageKey); + if (isSupportedLocale(stored)) return stored; + + const browserLocale = navigator.language.split('-')[0] ?? null; + if (isSupportedLocale(browserLocale)) return browserLocale; + + return fallbackLocale; +} + +function isSupportedLocale(locale: string | null): locale is SupportedLocale { + return localeOptions.some((option) => option.value === locale); +} + +export const i18n = createI18n({ + legacy: false, + locale: detectLocale(), + fallbackLocale, + messages, +}); + +export function setLocale(locale: SupportedLocale) { + i18n.global.locale.value = locale; + window.localStorage.setItem(storageKey, locale); +} diff --git a/frontend/src/layouts/AdminLayout.vue b/frontend/src/layouts/AdminLayout.vue new file mode 100644 index 0000000..f7a5979 --- /dev/null +++ b/frontend/src/layouts/AdminLayout.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/frontend/src/layouts/MainLayout.vue b/frontend/src/layouts/MainLayout.vue new file mode 100644 index 0000000..996a049 --- /dev/null +++ b/frontend/src/layouts/MainLayout.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/frontend/src/pages/ErrorNotFound.vue b/frontend/src/pages/ErrorNotFound.vue new file mode 100644 index 0000000..e0ed15e --- /dev/null +++ b/frontend/src/pages/ErrorNotFound.vue @@ -0,0 +1,23 @@ + diff --git a/frontend/src/pages/ErrorUnauthorized.vue b/frontend/src/pages/ErrorUnauthorized.vue new file mode 100644 index 0000000..ac332ba --- /dev/null +++ b/frontend/src/pages/ErrorUnauthorized.vue @@ -0,0 +1,35 @@ + diff --git a/frontend/src/pages/IndexPage.vue b/frontend/src/pages/IndexPage.vue new file mode 100644 index 0000000..858fa66 --- /dev/null +++ b/frontend/src/pages/IndexPage.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/src/pages/LoginPage.vue b/frontend/src/pages/LoginPage.vue new file mode 100644 index 0000000..dec2aef --- /dev/null +++ b/frontend/src/pages/LoginPage.vue @@ -0,0 +1,78 @@ + + + diff --git a/frontend/src/pages/ProfilePage.vue b/frontend/src/pages/ProfilePage.vue new file mode 100644 index 0000000..954aeeb --- /dev/null +++ b/frontend/src/pages/ProfilePage.vue @@ -0,0 +1,69 @@ + + + diff --git a/frontend/src/pages/RegisterPage.vue b/frontend/src/pages/RegisterPage.vue new file mode 100644 index 0000000..6259564 --- /dev/null +++ b/frontend/src/pages/RegisterPage.vue @@ -0,0 +1,170 @@ + + + diff --git a/frontend/src/pages/SecondPage.vue b/frontend/src/pages/SecondPage.vue new file mode 100644 index 0000000..87f4ce4 --- /dev/null +++ b/frontend/src/pages/SecondPage.vue @@ -0,0 +1,9 @@ + + + diff --git a/frontend/src/pages/WelcomePage.vue b/frontend/src/pages/WelcomePage.vue new file mode 100644 index 0000000..690c50f --- /dev/null +++ b/frontend/src/pages/WelcomePage.vue @@ -0,0 +1,60 @@ + + + diff --git a/frontend/src/pages/admin/DashboardPage.vue b/frontend/src/pages/admin/DashboardPage.vue new file mode 100644 index 0000000..cb4e93c --- /dev/null +++ b/frontend/src/pages/admin/DashboardPage.vue @@ -0,0 +1,11 @@ + + + diff --git a/frontend/src/pages/admin/ProfilesPage.vue b/frontend/src/pages/admin/ProfilesPage.vue new file mode 100644 index 0000000..660edaf --- /dev/null +++ b/frontend/src/pages/admin/ProfilesPage.vue @@ -0,0 +1,151 @@ + + + diff --git a/frontend/src/pages/admin/dialogs/CreateProfileDialog.vue b/frontend/src/pages/admin/dialogs/CreateProfileDialog.vue new file mode 100644 index 0000000..a8684db --- /dev/null +++ b/frontend/src/pages/admin/dialogs/CreateProfileDialog.vue @@ -0,0 +1,86 @@ + + + diff --git a/frontend/src/pages/admin/dialogs/EditProfileDialog.vue b/frontend/src/pages/admin/dialogs/EditProfileDialog.vue new file mode 100644 index 0000000..9300289 --- /dev/null +++ b/frontend/src/pages/admin/dialogs/EditProfileDialog.vue @@ -0,0 +1,249 @@ + + + diff --git a/frontend/src/pages/admin/dialogs/UpdateRoleDialog.vue b/frontend/src/pages/admin/dialogs/UpdateRoleDialog.vue new file mode 100644 index 0000000..0523785 --- /dev/null +++ b/frontend/src/pages/admin/dialogs/UpdateRoleDialog.vue @@ -0,0 +1,76 @@ + + + diff --git a/frontend/src/pages/admin/dialogs/UpdateStatusDialog.vue b/frontend/src/pages/admin/dialogs/UpdateStatusDialog.vue new file mode 100644 index 0000000..557d739 --- /dev/null +++ b/frontend/src/pages/admin/dialogs/UpdateStatusDialog.vue @@ -0,0 +1,77 @@ + + + diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts new file mode 100644 index 0000000..c1f0816 --- /dev/null +++ b/frontend/src/router/index.ts @@ -0,0 +1,36 @@ +import { defineRouter } from '#q-app'; +import { + createMemoryHistory, + createRouter, + createWebHashHistory, + createWebHistory, +} from 'vue-router'; + +import routes from './routes'; + +/* + * If not building with SSR mode, you can + * directly export the Router instantiation; + * + * The function below can be async too; either use + * async/await or return a Promise which resolves + * with the Router instance. + */ + +export default defineRouter((/* { store, ssrContext } */) => { + const createHistory = import.meta.env.QUASAR_SERVER + ? createMemoryHistory + : (import.meta.env.QUASAR_VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory); + + const Router = createRouter({ + scrollBehavior: () => ({ left: 0, top: 0 }), + routes, + + // Leave this as is and make changes in quasar.conf.js instead! + // quasar.conf.js -> build -> vueRouterMode + // quasar.conf.js -> build -> publicPath + history: createHistory(import.meta.env.QUASAR_VUE_ROUTER_BASE) + }); + + return Router; +}); diff --git a/frontend/src/router/routes.ts b/frontend/src/router/routes.ts new file mode 100644 index 0000000..2712c7a --- /dev/null +++ b/frontend/src/router/routes.ts @@ -0,0 +1,33 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/', + component: () => import('@/layouts/MainLayout.vue'), + children: [ + { path: '', component: () => import('@/pages/IndexPage.vue') }, + { path: 'second', component: () => import('@/pages/SecondPage.vue') }, + { path: 'login', component: () => import('@/pages/LoginPage.vue') }, + { path: 'register', component: () => import('@/pages/RegisterPage.vue') }, + { path: 'welcome', component: () => import('@/pages/WelcomePage.vue') }, + { path: 'profile', component: () => import('@/pages/ProfilePage.vue') }, + { path: '401', component: () => import('@/pages/ErrorUnauthorized.vue') }, + ], + }, + { + path: '/admin', + component: () => import('@/layouts/AdminLayout.vue'), + children: [ + { path: 'dashboard', component: () => import('@/pages/admin/DashboardPage.vue') }, + { path: 'profiles', component: () => import('@/pages/admin/ProfilesPage.vue') } + ], + }, + // Always leave this as last one, + // but you can also remove it + { + path: '/:catchAll(.*)*', + component: () => import('@/pages/ErrorNotFound.vue'), + }, +]; + +export default routes; diff --git a/frontend/src/stores/admin-store.ts b/frontend/src/stores/admin-store.ts new file mode 100644 index 0000000..751a122 --- /dev/null +++ b/frontend/src/stores/admin-store.ts @@ -0,0 +1,150 @@ +import { defineStore } from 'pinia'; +import { ref, computed } from 'vue'; +import Client, { Local, admin as AdminNS, auth as AuthNS, profiles as ProfilesNS } from '@/encore/client'; +import { useProfilesStore } from '@/stores/profiles-store'; + +export type Profile = AdminNS.Profile; +export type ProfileParams = AdminNS.ProfileParams; +export type RegisterParams = AdminNS.RegisterParams; +export type PersonalData = AdminNS.PersonalData; +export type PersonalDataParams = AdminNS.PersonalDataParams; +export type RoleOption = AuthNS.RoleOption; +export type StatusOption = ProfilesNS.StatusOption; + +export const useAdminStore = defineStore('admin', () => { + const profiles = ref([]); + const roles = ref([]); + const statuses = ref([]); + const loading = ref(false); + const error = ref(null); + + const profilesStore = useProfilesStore(); + + const client = new Client(Local, { + auth: () => (profilesStore.token ? { Authorization: `Bearer ${profilesStore.token}` } : undefined), + }); + + async function withLoading(fn: () => Promise): Promise { + loading.value = true; + error.value = null; + try { + return await fn(); + } catch (err) { + error.value = err instanceof Error ? err.message : String(err); + throw err; + } finally { + loading.value = false; + } + } + + /** Fetches all profiles into `profiles`. Requires the caller to be logged in as an admin. */ + async function listProfiles(): Promise { + return withLoading(async () => { + const res = await client.admin.ListProfiles(); + profiles.value = res.profiles; + return res.profiles; + }); + } + + /** Creates a new user profile with credentials. Requires the caller to be logged in as an admin. */ + async function insertProfile(params: RegisterParams): Promise { + return withLoading(async () => { + const res = await client.admin.InsertProfile(params); + profiles.value.push(res); + return res; + }); + } + + /** Fetches the valid roles and profile statuses into `roles` and `statuses`. */ + async function fetchSystemOptions(): Promise { + return withLoading(async () => { + const res = await client.admin.GetSystemOptions(); + roles.value = res.roles; + statuses.value = res.statuses; + }); + } + + /** Statuses that an admin can manually set on a profile. */ + const updatableStatuses = computed(() => statuses.value.filter((s) => s.updatable)); + + function replaceProfile(updated: Profile) { + const idx = profiles.value.findIndex((p) => p.user_id === updated.user_id); + if (idx !== -1) { + profiles.value[idx] = updated; + } + } + + /** Updates any user's profile. Requires the caller to be logged in as an admin. */ + async function updateProfile(userID: string, params: ProfileParams): Promise { + return withLoading(async () => { + const res = await client.admin.UpdateProfile(userID, params); + replaceProfile(res); + return res; + }); + } + + /** Updates the role of any user's profile. */ + async function updateProfileRole(userID: string, role: string): Promise { + return withLoading(async () => { + const res = await client.admin.UpdateProfileRole(userID, { role }); + replaceProfile(res); + return res; + }); + } + + /** Updates the status of any user's profile. */ + async function updateProfileStatus(userID: string, status: ProfilesNS.Status): Promise { + return withLoading(async () => { + const res = await client.admin.UpdateProfileStatus(userID, { status }); + replaceProfile(res); + return res; + }); + } + + /** Fetches the personal data of any user. Requires the caller to be logged in as an admin. */ + async function getPersonalData(userID: string): Promise { + return withLoading(async () => { + return await client.admin.GetPersonalData(userID); + }); + } + + /** Creates or replaces the personal data of any user. */ + async function upsertPersonalData(userID: string, params: PersonalDataParams): Promise { + return withLoading(async () => { + return await client.admin.UpsertPersonalData(userID, params); + }); + } + + /** Uploads an avatar image and returns its public URL. */ + async function uploadAvatar(image: Blob): Promise { + return withLoading(async () => { + const resp = await client.profiles.UploadAvatar('POST', image); + if (!resp.ok) { + throw new Error(`avatar upload failed (${resp.status})`); + } + const data = (await resp.json()) as { url: string }; + return data.url; + }); + } + + return { + // state + profiles, + roles, + statuses, + loading, + error, + // getters + updatableStatuses, + // actions + listProfiles, + fetchSystemOptions, + insertProfile, + updateProfile, + updateProfileRole, + updateProfileStatus, + getPersonalData, + upsertPersonalData, + uploadAvatar, + }; +}); diff --git a/frontend/src/stores/index.ts b/frontend/src/stores/index.ts new file mode 100644 index 0000000..14c3df4 --- /dev/null +++ b/frontend/src/stores/index.ts @@ -0,0 +1,32 @@ +import { defineStore } from '#q-app'; +import { createPinia } from 'pinia'; + +/* + * When adding new properties to stores, you should also + * extend the `PiniaCustomProperties` interface. + * @see https://pinia.vuejs.org/core-concepts/plugins.html#Typing-new-store-properties + */ +declare module 'pinia' { + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + export interface PiniaCustomProperties { + // add your custom properties here, if any + } +} + +/* + * If not building with SSR mode, you can + * directly export the Store instantiation; + * + * The function below can be async too; either use + * async/await or return a Promise which resolves + * with the Store instance. + */ + +export default defineStore((/* { ssrContext } */) => { + const pinia = createPinia(); + + // You can add Pinia plugins here + // pinia.use(SomePiniaPlugin) + + return pinia; +}); diff --git a/frontend/src/stores/profiles-store.ts b/frontend/src/stores/profiles-store.ts new file mode 100644 index 0000000..5a37040 --- /dev/null +++ b/frontend/src/stores/profiles-store.ts @@ -0,0 +1,167 @@ +import { defineStore } from 'pinia'; +import { ref, computed } from 'vue'; +import { LocalStorage } from 'quasar'; +import Client, { Local, profiles as ProfilesNS } from '@/encore/client'; + +export type Profile = ProfilesNS.Profile; +export type ProfileParams = ProfilesNS.ProfileParams; +export type RegisterParams = ProfilesNS.RegisterParams; +export type LoginParams = ProfilesNS.LoginParams; +export type LoginResponse = ProfilesNS.LoginResponse; +export type Status = ProfilesNS.Status; +export type PersonalData = ProfilesNS.PersonalData; +export type PersonalDataParams = ProfilesNS.PersonalDataParams; + +/** Display info for each Status value, mirroring profiles/status.go. */ +export const STATUS_INFO: { label: string; color: string }[] = [ + { label: 'Active', color: 'positive' }, + { label: 'Inactive', color: 'grey' }, + { label: 'Suspended', color: 'warning' }, + { label: 'Deleted', color: 'negative' }, + { label: 'Pending', color: 'info' }, + { label: 'Waiting deletion', color: 'warning' }, + { label: 'Banned', color: 'negative' }, +]; + +export function statusInfo(status: Status): { label: string; color: string } { + return STATUS_INFO[status] ?? { label: `Unknown (${status})`, color: 'grey' }; +} + +const TOKEN_STORAGE_KEY = 'profiles.token'; + +export const useProfilesStore = defineStore('profiles', () => { + const token = ref(LocalStorage.getItem(TOKEN_STORAGE_KEY)); + const profile = ref(null); + const personalData = ref(null); + const loading = ref(false); + const error = ref(null); + + const isAuthenticated = computed(() => token.value !== null); + + const client = new Client(Local, { + auth: () => (token.value ? { Authorization: `Bearer ${token.value}` } : undefined), + }); + + async function withLoading(fn: () => Promise): Promise { + loading.value = true; + error.value = null; + try { + return await fn(); + } catch (err) { + error.value = err instanceof Error ? err.message : String(err); + throw err; + } finally { + loading.value = false; + } + } + + function setToken(newToken: string | null) { + token.value = newToken; + if (newToken) { + LocalStorage.set(TOKEN_STORAGE_KEY, newToken); + } else { + LocalStorage.remove(TOKEN_STORAGE_KEY); + } + } + + /** Logs in and fetches the resulting profile into `profile`. */ + async function login(params: LoginParams): Promise { + return withLoading(async () => { + const res = await client.profiles.Login(params); + setToken(res.token); + await me(); + return res; + }); + } + + /** Clears the local session. Does not call the auth service's Logout endpoint. */ + function logout() { + setToken(null); + profile.value = null; + personalData.value = null; + } + + /** Fetches the authenticated caller's profile, or null if not authenticated. */ + async function me(): Promise { + return withLoading(async () => { + const res = await client.profiles.Me(); + profile.value = res; + return res; + }); + } + + /** Registers a new profile (and credentials) and returns it. */ + async function register(params: RegisterParams): Promise { + return withLoading(async () => { + return await client.profiles.Insert(params); + }); + } + + /** Updates the authenticated caller's own profile. */ + async function update(params: ProfileParams): Promise { + return withLoading(async () => { + const res = await client.profiles.Update(params); + profile.value = res; + return res; + }); + } + + /** Deletes the authenticated caller's own profile and clears the session. */ + async function remove(): Promise { + return withLoading(async () => { + await client.profiles.Delete(); + logout(); + }); + } + + /** Fetches the authenticated caller's own personal data into `personalData`. */ + async function fetchPersonalData(): Promise { + return withLoading(async () => { + const res = await client.profiles.GetPersonalData(); + personalData.value = res; + return res; + }); + } + + /** Creates or replaces the authenticated caller's own personal data. */ + async function savePersonalData(params: PersonalDataParams): Promise { + return withLoading(async () => { + const res = await client.profiles.UpsertPersonalData(params); + personalData.value = res; + return res; + }); + } + + /** Uploads an avatar image and returns its public URL. */ + async function uploadAvatar(image: Blob): Promise { + return withLoading(async () => { + const resp = await client.profiles.UploadAvatar('POST', image); + if (!resp.ok) { + throw new Error(`avatar upload failed (${resp.status})`); + } + const data = (await resp.json()) as { url: string }; + return data.url; + }); + } + + return { + // state + token, + profile, + personalData, + loading, + error, + // getters + isAuthenticated, + // actions + login, + logout, + me, + register, + update, + remove, + fetchPersonalData, + savePersonalData, + uploadAvatar, + }; +}); diff --git a/frontend/tools/zod-sync.mjs b/frontend/tools/zod-sync.mjs new file mode 100644 index 0000000..2e4812e --- /dev/null +++ b/frontend/tools/zod-sync.mjs @@ -0,0 +1,327 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import ts from 'typescript'; + +const rootDir = process.cwd(); +const clientPath = path.join(rootDir, 'src/encore/client.ts'); +const outputPath = path.join(rootDir, 'src/encore/zod.ts'); + +const clientSource = fs.readFileSync(clientPath, 'utf8'); +const clientFile = ts.createSourceFile(clientPath, clientSource, ts.ScriptTarget.Latest, true); +const existingSource = fs.existsSync(outputPath) ? fs.readFileSync(outputPath, 'utf8') : ''; +const existingFile = ts.createSourceFile(outputPath, existingSource, ts.ScriptTarget.Latest, true); + +const schemas = collectEncoreSchemas(clientFile); +const existingSchemas = collectExistingSchemas(existingFile, existingSource); +const generated = renderOutput(schemas, existingSchemas); + +fs.writeFileSync(outputPath, generated); +console.log(`Synced ${schemas.length} Zod schemas to ${path.relative(rootDir, outputPath)}`); + +function collectEncoreSchemas(sourceFile) { + const found = []; + const typeAliases = new Map(); + const writableParamTypes = collectWritableParamTypes(sourceFile); + + for (const statement of sourceFile.statements) { + if (!isExportedNamespace(statement)) continue; + const namespaceName = statement.name.text; + const body = statement.body; + if (!body || !ts.isModuleBlock(body)) continue; + + for (const child of body.statements) { + if (ts.isTypeAliasDeclaration(child) && isExported(child)) { + typeAliases.set(`${namespaceName}.${child.name.text}`, child.type); + } + } + } + + for (const statement of sourceFile.statements) { + if (!isExportedNamespace(statement)) continue; + const namespaceName = statement.name.text; + const body = statement.body; + if (!body || !ts.isModuleBlock(body)) continue; + + for (const child of body.statements) { + const qualifiedName = `${namespaceName}.${child.name?.text ?? ''}`; + if (!writableParamTypes.has(qualifiedName)) continue; + + if (ts.isInterfaceDeclaration(child) && isExported(child)) { + found.push({ + kind: 'object', + namespaceName, + typeName: child.name.text, + schemaName: schemaName(namespaceName, child.name.text), + fields: child.members + .filter(ts.isPropertySignature) + .map((member) => ({ + name: propertyName(member.name), + zod: zodForType(member.type, namespaceName, typeAliases), + })) + .filter((field) => field.name), + }); + } + + if (ts.isTypeAliasDeclaration(child) && isExported(child)) { + found.push({ + kind: 'alias', + namespaceName, + typeName: child.name.text, + schemaName: schemaName(namespaceName, child.name.text), + zod: zodForType(child.type, namespaceName, typeAliases), + }); + } + } + } + + return found; +} + +function collectWritableParamTypes(sourceFile) { + const found = new Set(); + + for (const statement of sourceFile.statements) { + if (!isExportedNamespace(statement)) continue; + const namespaceName = statement.name.text; + const body = statement.body; + if (!body || !ts.isModuleBlock(body)) continue; + + for (const child of body.statements) { + if (!ts.isClassDeclaration(child) || child.name?.text !== 'ServiceClient') continue; + + for (const member of child.members) { + if (!ts.isMethodDeclaration(member)) continue; + const httpMethod = writableHttpMethod(member); + if (!httpMethod) continue; + + const bodyParamName = jsonStringifiedParamName(member); + if (!bodyParamName) continue; + + const param = member.parameters.find((candidate) => propertyName(candidate.name) === bodyParamName); + if (!param?.type || !ts.isTypeReferenceNode(param.type)) continue; + + const ref = typeNameText(param.type.typeName); + const qualifiedRef = ref.includes('.') ? ref : `${namespaceName}.${ref}`; + found.add(qualifiedRef); + } + } + } + + return found; +} + +function writableHttpMethod(method) { + let result = ''; + + visit(method.body); + return result; + + function visit(node) { + if (result || !node) return; + + if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) { + const callName = node.expression.name.text; + if (callName === 'callTypedAPI' || callName === 'callAPI') { + const [methodArg] = node.arguments; + if (methodArg && ts.isStringLiteral(methodArg) && ['POST', 'PUT'].includes(methodArg.text)) { + result = methodArg.text; + return; + } + } + } + + ts.forEachChild(node, visit); + } +} + +function jsonStringifiedParamName(method) { + let result = ''; + + visit(method.body); + return result; + + function visit(node) { + if (result || !node) return; + + if ( + ts.isCallExpression(node) && + ts.isPropertyAccessExpression(node.expression) && + ts.isIdentifier(node.expression.expression) && + node.expression.expression.text === 'JSON' && + node.expression.name.text === 'stringify' + ) { + const [arg] = node.arguments; + if (arg && ts.isIdentifier(arg)) { + result = arg.text; + return; + } + } + + ts.forEachChild(node, visit); + } +} + +function collectExistingSchemas(sourceFile, sourceText) { + const result = new Map(); + + for (const statement of sourceFile.statements) { + if (!ts.isVariableStatement(statement) || !isExported(statement)) continue; + + for (const declaration of statement.declarationList.declarations) { + if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue; + if (!declaration.name.text.endsWith('Schema')) continue; + + const objectLiteral = zodObjectLiteral(declaration.initializer); + if (!objectLiteral) continue; + + const fields = new Map(); + for (const prop of objectLiteral.properties) { + if (!ts.isPropertyAssignment(prop)) continue; + const name = propertyName(prop.name); + if (!name) continue; + fields.set(name, prop.initializer.getText(sourceFile)); + } + + result.set(declaration.name.text, { fields }); + } + } + + if (!sourceText.trim()) return result; + return result; +} + +function renderOutput(schemas, existingSchemas) { + const lines = [ + '// Code synced from src/encore/client.ts by frontend/tools/zod-sync.mjs.', + '// Existing field validators are preserved when this file is synced again.', + "import { z } from 'zod';", + '', + ]; + + for (const schema of schemas) { + if (schema.kind === 'alias') { + lines.push(`export const ${schema.schemaName} = ${schema.zod};`); + lines.push(''); + continue; + } + + const existing = existingSchemas.get(schema.schemaName); + const currentNames = new Set(schema.fields.map((field) => field.name)); + lines.push(`export const ${schema.schemaName} = z.object({`); + for (const field of schema.fields) { + const expression = existing?.fields.get(field.name) ?? field.zod; + lines.push(` ${quoteKey(field.name)}: ${expression},`); + } + for (const [name, expression] of existing?.fields ?? []) { + if (currentNames.has(name)) continue; + lines.push(` // TODO: no longer present in Encore type ${schema.namespaceName}.${schema.typeName}`); + lines.push(` ${quoteKey(name)}: ${expression},`); + } + lines.push('});'); + lines.push(''); + } + + return `${lines.join('\n').trimEnd()}\n`; +} + +function zodObjectLiteral(initializer) { + if (!ts.isCallExpression(initializer)) return null; + if (!ts.isPropertyAccessExpression(initializer.expression)) return null; + if (initializer.expression.name.text !== 'object') return null; + if (!ts.isIdentifier(initializer.expression.expression)) return null; + if (initializer.expression.expression.text !== 'z') return null; + const [arg] = initializer.arguments; + return arg && ts.isObjectLiteralExpression(arg) ? arg : null; +} + +function zodForType(type, namespaceName, typeAliases) { + if (!type) return 'z.unknown()'; + + if (type.kind === ts.SyntaxKind.StringKeyword) return 'z.string()'; + if (type.kind === ts.SyntaxKind.NumberKeyword) return 'z.number()'; + if (type.kind === ts.SyntaxKind.BooleanKeyword) return 'z.boolean()'; + if (type.kind === ts.SyntaxKind.AnyKeyword) return 'z.any()'; + if (type.kind === ts.SyntaxKind.UnknownKeyword) return 'z.unknown()'; + + if (ts.isArrayTypeNode(type)) { + return `z.array(${zodForType(type.elementType, namespaceName, typeAliases)})`; + } + + if (ts.isUnionTypeNode(type)) { + const literals = type.types.filter(ts.isLiteralTypeNode); + if (literals.length === type.types.length && literals.length > 0) { + return `z.union([${literals.map((literal) => zodLiteral(literal)).join(', ')}])`; + } + return 'z.unknown()'; + } + + if (ts.isTypeLiteralNode(type)) { + const fields = type.members + .filter(ts.isPropertySignature) + .map((member) => `${quoteKey(propertyName(member.name))}: ${zodForType(member.type, namespaceName, typeAliases)}`); + return `z.object({ ${fields.join(', ')} })`; + } + + if (ts.isTypeReferenceNode(type)) { + const ref = typeNameText(type.typeName); + const qualifiedRef = ref.includes('.') ? ref : `${namespaceName}.${ref}`; + const aliasType = typeAliases.get(qualifiedRef); + if (aliasType) return zodForType(aliasType, namespaceName, typeAliases); + return `z.lazy(() => ${schemaNameFromReference(ref, namespaceName)})`; + } + + return 'z.unknown()'; +} + +function zodLiteral(literal) { + const node = literal.literal; + if (ts.isStringLiteral(node)) return `z.literal(${JSON.stringify(node.text)})`; + if (ts.isNumericLiteral(node)) return `z.literal(${node.text})`; + if (node.kind === ts.SyntaxKind.TrueKeyword) return 'z.literal(true)'; + if (node.kind === ts.SyntaxKind.FalseKeyword) return 'z.literal(false)'; + return 'z.unknown()'; +} + +function schemaNameFromReference(ref, namespaceName) { + if (ref.includes('.')) { + const [ns, name] = ref.split('.'); + return schemaName(ns, name); + } + return schemaName(namespaceName, ref); +} + +function schemaName(namespaceName, typeName) { + return `${pascal(namespaceName)}${pascal(typeName)}Schema`; +} + +function propertyName(name) { + if (!name) return ''; + if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) return name.text; + return ''; +} + +function quoteKey(key) { + return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key); +} + +function typeNameText(name) { + if (ts.isIdentifier(name)) return name.text; + if (ts.isQualifiedName(name)) return `${typeNameText(name.left)}.${name.right.text}`; + return 'unknown'; +} + +function pascal(value) { + return value + .split(/[^A-Za-z0-9]+/) + .filter(Boolean) + .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`) + .join(''); +} + +function isExportedNamespace(node) { + return ts.isModuleDeclaration(node) && isExported(node) && ts.isIdentifier(node.name); +} + +function isExported(node) { + return Boolean(node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)); +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..f154205 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./.quasar/tsconfig.json" +} \ No newline at end of file diff --git a/go.mod b/go.mod index 79c2688..6233a68 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,16 @@ module encore.app go 1.26 -require encore.dev v1.57.5 // indirect +require ( + encore.dev v1.57.5 + github.com/jackc/pgx/v5 v5.7.6 + golang.org/x/crypto v0.42.0 +) + +require ( + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/puddle/v2 v2.2.2 // indirect + golang.org/x/sync v0.17.0 // indirect + golang.org/x/text v0.29.0 // indirect +) diff --git a/go.sum b/go.sum index b3fbfde..3151643 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,30 @@ encore.dev v1.57.5 h1:gpcE2XF4Qvh0IzD+seLf9DPV9q8Mzr7bMaNJfpF2xuc= encore.dev v1.57.5/go.mod h1:lK8vSJG6uhYeUwT87/FEpcLdiN98QUcotd3gxRX0xDw= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.7.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk= +github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/mails/.DS_Store b/mails/.DS_Store new file mode 100644 index 0000000..0e150a8 Binary files /dev/null and b/mails/.DS_Store differ diff --git a/mails/mails.go b/mails/mails.go new file mode 100644 index 0000000..73feceb --- /dev/null +++ b/mails/mails.go @@ -0,0 +1,98 @@ +// Service mails handles transactional email delivery. +package mails + +import ( + "context" + "encoding/json" + "os" + "path/filepath" + "strings" + "time" + + "encore.dev/beta/errs" + "encore.dev/types/uuid" +) + +const outboxDir = "mails/outbox" + +type TransactionalMailParams struct { + To string `json:"to"` + Subject string `json:"subject"` + TextBody string `json:"text_body"` + HTMLBody string `json:"html_body"` + Metadata map[string]string `json:"metadata"` +} + +type TransactionalMail struct { + ID uuid.UUID `json:"id"` + To string `json:"to"` + Subject string `json:"subject"` + TextBody string `json:"text_body"` + HTMLBody string `json:"html_body"` + Metadata map[string]string `json:"metadata"` + CreatedAt time.Time `json:"created_at"` +} + +// SendTransactional records a transactional email in the local outbox. +// TODO: replace the file-backed outbox with an SMTP sender. +// +//encore:api private method=POST path=/mails/transactional +func SendTransactional(ctx context.Context, p *TransactionalMailParams) (*TransactionalMail, error) { + if strings.TrimSpace(p.To) == "" { + return nil, &errs.Error{Code: errs.InvalidArgument, Message: "recipient email is required"} + } + if strings.TrimSpace(p.Subject) == "" { + return nil, &errs.Error{Code: errs.InvalidArgument, Message: "email subject is required"} + } + + id, err := uuid.NewV4() + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to generate mail id") + } + + mail := TransactionalMail{ + ID: id, + To: p.To, + Subject: p.Subject, + TextBody: p.TextBody, + HTMLBody: p.HTMLBody, + Metadata: p.Metadata, + CreatedAt: time.Now().UTC(), + } + if mail.Metadata == nil { + mail.Metadata = map[string]string{} + } + + if err := saveToOutbox(ctx, &mail); err != nil { + return nil, err + } + return &mail, nil +} + +func saveToOutbox(ctx context.Context, mail *TransactionalMail) error { + if err := ctx.Err(); err != nil { + return err + } + if err := os.MkdirAll(outboxDir, 0o755); err != nil { + return errs.WrapCode(err, errs.Internal, "failed to create mail outbox") + } + + payload, err := json.MarshalIndent(mail, "", " ") + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to encode mail") + } + + baseFilename := mail.CreatedAt.Format("20060102T150405Z") + "_" + mail.ID.String() + jsonPath := filepath.Join(outboxDir, baseFilename+".json") + if err := os.WriteFile(jsonPath, payload, 0o644); err != nil { + return errs.WrapCode(err, errs.Internal, "failed to write mail to outbox") + } + + if strings.TrimSpace(mail.HTMLBody) != "" { + htmlPath := filepath.Join(outboxDir, baseFilename+".html") + if err := os.WriteFile(htmlPath, []byte(mail.HTMLBody), 0o644); err != nil { + return errs.WrapCode(err, errs.Internal, "failed to write mail html to outbox") + } + } + return nil +} diff --git a/mails/outbox/.gitignore b/mails/outbox/.gitignore new file mode 100644 index 0000000..5bdaae1 --- /dev/null +++ b/mails/outbox/.gitignore @@ -0,0 +1,3 @@ +*.json +*.html +!.gitkeep diff --git a/mails/outbox/.gitkeep b/mails/outbox/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/mails/outbox/.gitkeep @@ -0,0 +1 @@ + diff --git a/mysql.sql b/mysql.sql new file mode 100644 index 0000000..7936303 --- /dev/null +++ b/mysql.sql @@ -0,0 +1,431 @@ +-- MariaDB dump 10.19 Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: test.easysync.tv Database: pastelle +-- ------------------------------------------------------ +-- Server version 10.10.2-MariaDB-1:10.10.2+maria~ubu2204 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `actions` +-- + +DROP TABLE IF EXISTS `actions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `actions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `method` varchar(255) DEFAULT NULL, + `route` varchar(255) DEFAULT NULL, + `owner` int(11) DEFAULT 0, + `public` int(11) DEFAULT 0, + `xrh` int(11) DEFAULT 1, + `version` bigint(20) DEFAULT NULL, + `description` text DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=217 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `actions` +-- + +LOCK TABLES `actions` WRITE; +/*!40000 ALTER TABLE `actions` DISABLE KEYS */; +INSERT INTO `actions` VALUES (1,'get','/heartbet',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(2,'post','/user/log',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(3,'post','/user/routinglog',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(4,'get','/user/account',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(5,'put','/user/account',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(6,'delete','/user/account',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(7,'post','/user/updateBio',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(8,'post','/user/loadBio',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(9,'post','/user/updateDetails',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(10,'post','/user/loadDetails',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(11,'post','/user/loadMusicSamples',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(12,'post','/user/deleteMusicSample',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(13,'post','/user/insertPresentation',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(14,'post','/user/loadPresentation',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(15,'get','/user/pendingPresentation',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(16,'get','/user/downloads',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(17,'get','/user/downloadsAll/:user',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(18,'post','/user/signup',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(19,'post','/user/confirm',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(20,'post','/user/login',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(21,'post','/user/superlogin',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(22,'post','/user/avatar',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(23,'post','/user/confirmActivation',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(24,'post','/user/recover',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(25,'post','/user/forgot',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(26,'get','/user/logout',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(27,'get','/users',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(28,'get','/users/shortlist',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(29,'post','/users/update/data',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(30,'post','/users/update/type',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(31,'post','/users/update/roles',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(32,'post','/users/update/status',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(33,'post','/users/delete',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(34,'post','/user/activateInfo',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(35,'post','/user/activate',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(36,'post','/user/reactivate',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(37,'post','/user/rechargewallet',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(38,'get','/users/superadmin',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(39,'get','/users/test',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(40,'get','/actions/listAll',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(41,'get','/actions/permissions/:actionId',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(42,'post','/actions/updateDescription',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(43,'post','/actions/updatePermissions',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(44,'get','/roles/listAll',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(45,'get','/actions',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(46,'post','/upload/demoMusic',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(47,'get','/DEMOMUSIC/*',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(48,'get','/MUSIC/*',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(49,'get','/RAWMUSIC/*',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(50,'post','/newsletter/subscribe',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(51,'post','/newsletter/confirm',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(52,'get','/categories/roots',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(53,'get','/search/index',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(54,'get','/search/indexversion',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(55,'get','/search/resetindex',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(56,'get','/search/subtracks/:trackId',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(57,'get','/search/trackinfo/:trackId',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(58,'get','/search/trackpeaks/:trackId',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(59,'get','/search/musicdemopeaks/:userId/:trackId',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(60,'get','/tracks/updaterating',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(61,'get','/licenses/download/mp3/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(62,'get','/licenses/download/wav/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(63,'get','/RAWMUSIC/wav/:code/:license',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(64,'get','/RAWMUSIC/mp3/:code/:title/:subscription',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(65,'get','/tracks/download/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(66,'get','/tracks/downloaduser',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(67,'get','/tracks/downloadall',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(68,'get','/tracks/playlist/:id',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(69,'get','/projects/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(70,'get','/projects',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(71,'post','/projects/add',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(72,'post','/projects/addversion',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(73,'get','/projects/delete/:id',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(74,'get','/projects/deleteversion/:id',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(75,'post','/projects/save/:id/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(76,'post','/projects/savefavorites/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(77,'post','/projects/upload/:id',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(78,'post','/projects/upload2',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(79,'get','/projects/status/:id',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(80,'post','/projects/buffer/:id/:version',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(81,'get','/projects/bufferstatus/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(82,'get','/PROJECTS/video/:id/:name',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(83,'get','/PROJECTS/audio/:id/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(84,'get','/PROJECTS/preview/:uuid/:id/:movie',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(85,'get','/PROJECTS/haspreview/:id/:movie',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(86,'get','/projects/export/favorites/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(87,'get','/PROJECTS/favorites/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(88,'get','/projects/export/cuesheet/:uuid/:version',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(89,'get','/projects/cuesheetinfo/:uuid/:version',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(90,'get','/PROJECTS/cuesheet/:uuid/:version',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(91,'post','/projects/addvoice/:project',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(92,'get','/PROJECTS/voice/:project/:uuid',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(93,'get','/templates',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(94,'post','/templates/save',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(95,'post','/templates/pdf',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(96,'post','/messages/support',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(97,'post','/messages/test',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(98,'post','/messages/add',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(99,'get','/helps/templates',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(100,'get','/helps/template/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(101,'get','/helps/template/load/:name',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(102,'post','/helps/templates/text/:uuid',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(103,'post','/helps/templates/add',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(104,'delete','/helps/templates/:uuid',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(105,'get','/cmspages',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(106,'get','/cmspages/templates',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(107,'get','/cmspages/template/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(108,'get','/cmspages/template/load/:name',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(109,'put','/cmspages/templates/:uuid',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(110,'post','/cmspages/templates/add',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(111,'delete','/cmspages/templates/:uuid',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(112,'get','/emailtemplates',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(113,'get','/emailtemplates/all',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(114,'get','/emailtemplates/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(115,'get','/emailtemplates/load/:name',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(116,'put','/emailtemplates/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(117,'post','/emailtemplates/add',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(118,'delete','/emailtemplates/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(119,'get','/billtemplates',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(120,'get','/billtemplates/all',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(121,'get','/billtemplates/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(122,'get','/billtemplates/load/:name',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(123,'put','/billtemplates/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(124,'post','/billtemplates/add',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(125,'delete','/billtemplates/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(126,'post','/billtemplates/test',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(127,'post','/module/add',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(128,'put','/module/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(129,'delete','/module/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(130,'get','/modules',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(131,'get','/module/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(132,'get','/modules/videos',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(133,'get','/modules/images',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(134,'get','/modules/audios',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(135,'get','/RESOURCE/video/:title',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(136,'get','/RESOURCE/image/:title',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(137,'get','/RESOURCE/audio/:title',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(138,'post','/UPLOAD/videos',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(139,'post','/UPLOAD/images',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(140,'post','/UPLOAD/audios',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(141,'post','/UPLOAD/editorimages',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(142,'get','/RESOURCE/editorimage/:title',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(143,'get','/subscriptions',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(144,'get','/subscriptions/:uuid',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(145,'get','/SNIPCART/:subscription/:uuid/:userUUID',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(146,'post','/SNIPCART/HOOKS',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(147,'get','/userbills/:uuid',0,0,1,0,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:44'),(148,'get','/playlists',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(149,'post','/playlists/add',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(150,'post','/playlists/del',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(151,'post','/playlists/new',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(152,'post','/playlists/remove',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(153,'get','/documents/templates',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(154,'get','/documents/template/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(155,'get','/documents/template/load/:name',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(156,'post','/documents/templates/text/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(157,'post','/documents/templates/add',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(158,'delete','/documents/templates/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(159,'get','/wallet',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(160,'get','/wallet/last',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(161,'get','/wallet/all/:userId',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(162,'post','/wallet/buy',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(163,'post','/wallet/consume',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(164,'get','/licenses',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(165,'get','/licenses/prices',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(166,'get','/licenses/one/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(167,'get','/licenses/text/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(168,'get','/licenses/pdf/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(169,'get','/licenses/all/:userId',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(170,'get','/licenses/gropus',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(171,'get','/licenses/templates',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(172,'post','/licenses/template',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(173,'post','/licenses/template/savehelp',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(174,'post','/licenses/template/savetemplate',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(175,'post','/licenses/template/saveoptions',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(176,'get','/partners',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(177,'get','/partners/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(178,'get','/partner/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(179,'get','/partner/activate/:uuid/:partneruuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(180,'get','/partner/remove/:uuid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(181,'get','/partner/data/:userid',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(182,'post','/partner',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(183,'get','/bills/:userID',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(184,'get','/bills/render/:id',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(185,'get','/bills/activate/:id',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(186,'post','/bills/license',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(187,'get','/',0,0,1,1729615604972,NULL,'2019-12-09 11:45:17','2024-10-22 16:46:45'),(188,'get','/wallet/affiliates',0,0,1,1729615604972,NULL,'2019-12-10 16:42:52','2024-10-22 16:46:45'),(189,'post','/users/update/password',0,0,1,1729615604972,NULL,'2019-12-11 15:22:07','2024-10-22 16:46:45'),(190,'post','/users/newuser',0,0,1,1729615604972,NULL,'2019-12-16 17:07:39','2024-10-22 16:46:45'),(191,'post','/user/playinfo',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(192,'post','/projects/exist',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(193,'put','/helps/template/:uuid',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(194,'post','/helps/template/add',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(195,'delete','/helps/template/:uuid',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(196,'put','/cmspages/:uuid',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(197,'post','/cmspages/add',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(198,'delete','/cmspages/:uuid',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(199,'get','/licensesall',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(200,'post','/licenses/testtemplate',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(201,'get','/bills/pdf/:number',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(202,'get','/corporates',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(203,'get','/corporate/:uuid',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(204,'post','/corporate/add',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(205,'post','/corporate/update',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(206,'delete','/corporate/:uuid',0,0,1,1729615604972,NULL,'2021-05-29 08:46:35','2024-10-22 16:46:45'),(207,'get','/RAWMUSIC/wav/:code/:title',0,0,1,1729615604972,NULL,'2023-01-11 14:48:39','2024-10-22 16:46:45'),(208,'get','/RAWMUSIC/mp3/:code/:title',0,0,1,1729615604972,NULL,'2023-01-13 11:21:07','2024-10-22 16:46:45'),(209,'get','/RAWMUSIC/qs/:code/:title',0,0,1,1729615604972,NULL,'2023-01-16 17:09:10','2024-10-22 16:46:45'),(210,'get','/RAWMUSIC/json/:code/:title',0,0,1,1729615604972,NULL,'2023-01-16 17:09:10','2024-10-22 16:46:45'),(211,'get','/tracks/getwav/:code/:title',0,0,1,1729615604972,NULL,'2023-02-06 12:07:36','2024-10-22 16:46:45'),(212,'get','/PROJECTS/voice/:project/:uuid/:userId',0,0,1,1729615604972,NULL,'2023-02-07 16:00:30','2024-10-22 16:46:45'),(213,'get','/INFO/title/:title',0,0,1,1729615604972,NULL,'2023-02-07 16:38:15','2024-10-22 16:46:45'),(214,'post','/tracks/playlist',0,0,1,1729615604972,NULL,'2023-12-15 09:04:34','2024-10-22 16:46:45'),(215,'get','/logs/listAll',0,0,1,1729615604972,NULL,'2023-12-15 09:04:34','2024-10-22 16:46:45'),(216,'post','/logs/add',0,0,1,1729615604972,NULL,'2023-12-15 09:04:34','2024-10-22 16:46:45'); +/*!40000 ALTER TABLE `actions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `actions_permission` +-- + +DROP TABLE IF EXISTS `actions_permission`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `actions_permission` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `action_id` int(10) unsigned NOT NULL, + `role_id` int(10) unsigned NOT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `actions_permission_action_id_foreign` (`action_id`), + KEY `actions_permission_permission_id_foreign` (`role_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `actions_permission` +-- + +LOCK TABLES `actions_permission` WRITE; +/*!40000 ALTER TABLE `actions_permission` DISABLE KEYS */; +/*!40000 ALTER TABLE `actions_permission` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `activate_token` +-- + +DROP TABLE IF EXISTS `activate_token`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `activate_token` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `user_id` int(10) unsigned DEFAULT NULL, + `token` varchar(255) DEFAULT NULL, + `expires_at` datetime DEFAULT NULL, + `fired_at` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `activate_token` +-- + +LOCK TABLES `activate_token` WRITE; +/*!40000 ALTER TABLE `activate_token` DISABLE KEYS */; +/*!40000 ALTER TABLE `activate_token` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bill_templates` +-- + +DROP TABLE IF EXISTS `bill_templates`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bill_templates` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `uuid` varchar(255) DEFAULT NULL, + `system` int(11) DEFAULT 0, + `name` varchar(255) DEFAULT NULL, + `params` longtext DEFAULT NULL, + `text` longtext DEFAULT NULL, + `html` longtext DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bill_templates` +-- + +LOCK TABLES `bill_templates` WRITE; +/*!40000 ALTER TABLE `bill_templates` DISABLE KEYS */; +INSERT INTO `bill_templates` VALUES (1,'9284d580-0aec-11ea-a44a-dbeb988a9404',1,'License',NULL,'

Pastelle Media Sagl

Via Cantonale 18

6928 - Manno  Switzerland



{{user_title}}

{{name}}

{{address_1}}

{{address_2}}

{{zipcode}} - {{city}} - {{country}}



{{date}}

Bill - {{billNr}}

{{prices}}

',NULL,NULL,'2019-11-19 07:49:37','2021-06-21 13:48:02'),(2,'81b08e60-0aed-11ea-a44a-dbeb988a9404',1,'Wallet Recharge',NULL,'

Squync

Pastelle Media Sagl

Via S.Gottardo 18

6928 Manno


{{info}}


Customer

{{firstname}} {{lastname}}

{{address}}

{{zipcode}} {{city}}, {{country}}


Manno,  {{created_at}}


Invoice nr {{invoice_number}}


{{type}}

{{restriction}}

Seconds .........: {{seconds}}

Price per second : {{price_per_second}}{{currency}}

------------------

Total ...........: {{total}}{{currency}}





',NULL,NULL,'2019-11-19 02:56:18','2021-06-22 09:17:42'),(3,'8dd9b0c0-d9c9-11eb-946c-d995b9f42517',0,'Bill Test',NULL,'',NULL,NULL,'2021-06-30 17:35:25','2021-06-30 17:35:25'); +/*!40000 ALTER TABLE `bill_templates` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `categories` +-- + +DROP TABLE IF EXISTS `categories`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `categories` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `catId` int(11) DEFAULT 0, + `parentId` int(11) DEFAULT 0, + `count` int(11) DEFAULT 0, + `level` int(11) DEFAULT 0, + `text` varchar(255) DEFAULT NULL, + `tracks` text DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1261 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `categories` +-- + +LOCK TABLES `categories` WRITE; +/*!40000 ALTER TABLE `categories` DISABLE KEYS */; +INSERT INTO `categories` VALUES (1,1,0,0,0,'Musical Styles',NULL),(2,190,11,2,2,'Famous Classical Works','[2033,4750]'),(3,58,0,0,0,'Mood / Emotion',NULL),(4,115,0,0,0,'Instrumentation',NULL),(5,123,0,0,0,'Production Genre',NULL),(6,28,1,0,1,'Grunge',NULL),(7,30,1,21,1,'House','[108,167,499,507,519,1163,1342,2702,4841,5879,6505,6435,8481,7365,7377,7380,7381,7385,7388,8965,10018]'),(8,3,1,244,1,'Ballad','[307,308,310,313,315,316,317,323,324,353,352,351,343,341,1841,375,376,402,1156,1637,1354,475,476,595,642,646,650,666,647,651,661,664,693,694,702,706,708,715,716,793,799,807,914,927,931,933,937,944,948,954,963,953,952,899,901,905,903,1302,562,563,569,578,584,586,1222,1250,1276,1294,1295,2068,1679,1689,1850,1851,286,270,1131,1822,2016,2181,1126,1125,1123,1122,1121,1114,2211,2193,2197,2206,2213,2216,1118,2235,2169,2307,2661,2665,2681,2726,2571,2544,2565,2818,2821,2837,3037,3039,3073,3064,3056,3052,3256,2866,3311,3028,3307,3032,3031,2254,3601,3335,3338,3400,3425,3444,4186,3731,3856,3452,3470,3492,3522,3979,566,3280,3281,2526,2527,4196,4589,4640,4641,4445,4531,4670,1173,4455,4478,4484,4500,4831,4840,4904,5012,4930,2436,2479,2449,5612,5613,5581,5589,4742,4687,4683,4685,4689,4692,4710,5270,5271,5272,5278,4741,4709,5803,6445,5658,6885,6901,6453,7214,6737,6299,6338,7203,7201,7200,5362,8071,8067,7785,7786,7809,7803,7800,5433,8163,8180,8188,8195,8212,8218,8222,8228,8230,8251,8266,8283,8296,8299,8300,8304,8311,8318,8369,8385,2212,8421,8503,8511,8512,7747,7749,8861,7327,8095,8098,8099,8104,8105,7956,8841,8852,8872,5497,5501,7364,9027,9028,9070,4358,312]'),(9,2,1,503,1,'Ambient / Textural Feels','[108,123,158,1550,1181,55,1558,1714,1724,1728,1735,1719,1830,1828,1178,1185,1190,1190,1187,1189,1148,1352,595,642,646,650,658,660,679,680,688,689,657,636,639,647,654,661,664,665,671,672,673,678,684,685,687,690,692,694,701,702,707,708,716,757,768,785,786,787,793,799,800,806,807,811,812,816,817,821,828,829,833,834,839,840,977,917,914,918,930,933,934,938,943,944,966,969,972,959,953,952,926,910,982,881,791,792,981,978,906,904,794,751,750,749,1,24,24,1305,1209,1210,1212,1214,1237,1242,2072,1891,287,283,274,1110,1115,2248,2347,2648,2655,2375,2385,2389,3140,3310,3312,638,3544,3620,3589,3583,3552,2109,3650,3862,2410,2412,2413,2413,2415,2426,2438,2443,2453,2463,2470,2484,2482,2481,2428,3966,3967,3969,3971,3980,3990,3990,3991,4642,4635,4466,4475,4475,4494,4496,4522,4209,3115,3115,4806,4852,4852,4945,4680,2489,2476,5681,5691,5771,5734,5236,4438,5866,6084,2467,2467,2439,2434,6504,6803,6789,6583,4692,4711,5265,4697,4701,4702,5266,5279,5279,5282,5283,5285,5286,5287,5269,5268,5267,4739,4734,4705,5264,4717,4738,4729,5276,4693,5274,4722,4699,4698,4690,4695,4688,6191,961,6234,6244,6313,6313,6314,6314,5308,5360,5478,5390,5381,5392,8071,8069,8069,8067,7281,7757,7597,7805,7664,7664,7665,7668,7670,7667,7667,5424,5425,5426,5431,5433,5434,5436,5436,5440,5441,5446,5447,5452,5455,5458,5459,5459,5460,5462,5463,5467,5468,5469,5474,5477,8074,8076,8076,8078,8078,8088,8090,8239,8239,8273,8274,8274,8536,8549,7328,8654,8655,8655,8656,8657,7724,7680,7681,7684,7687,7688,7690,7699,7701,7704,7709,7711,7715,7716,7721,7673,7392,7876,8612,8613,8616,8616,8617,8618,8620,8621,8623,8624,8625,8628,8830,8831,8832,8834,8837,8839,8843,8845,8851,8853,7526,7730,7730,5499,9097,9097,9050,9050,9051,9052,9053,9056,9058,9058,9059,9060,9061,9062,9064,9065,9066,9067,8955,8955,8957,8961,8961,8961,8975,8136,7078,7079,7079,7080,7082,7084,7085,7087,7089,7090,7090,7091,7092,7095,7095,6059,6063,5937,5789,5790,4322,4064,4083,4124,9165,9167,9171,9179,9322,9339,9345,9347,9348,9349,9350,9351,9352,9353,9354,9355,9357,9361,9365,9366,9369,9379,9381,9285,9302,9310,9312,9313,9320,9396,9428,9433,9434,9444,9446,9462,9499,9511,9519,9533,9559,9567,9570,9573,9733,9748,9808,9865,9867,9868,9922,9923,9924,9926,9927,10025,10028,10029,10029,10029,10030,10032,10037,10042,10043,10080,10089,10089,10096,10104,10156,10156,10157,10157,10157,10158,10160,10160,10160,10162,10163,10163,10167,10168,10168,10172,10172,10172,10173,10174,10177,10177,10177,10178,10179,10181,10181,10181,10182,10183,10184,10186,10187,10188,10189,10190,10192,10194,10197,10199,10200,10201,10203,10206,10207,10209,10210,10211,10213,10214,10215,10218,10221,10226,10229,10231,10233,10234,10235,10236,10248,10249,10253,10268,10281,10283,10292,10319,10320,10340,10343,10345,10364,10369,10372,10380,10382,10384,10386,10398,9872]'),(10,29,1,114,1,'Hip Hop','[515,1831,1167,891,2668,2691,2543,2590,2618,2621,2634,2635,2638,2644,2537,2545,2554,2556,2567,2569,2575,2578,2580,2530,2589,2536,2540,2541,2546,2550,2557,2568,2586,2531,2591,2595,2602,2606,2607,2622,2625,2626,2628,2637,2551,2552,2553,2560,2562,2563,2528,2529,2588,2592,2603,2617,2627,2532,2548,2555,2587,2558,516,4199,4505,4752,4806,4834,2608,2640,2561,2689,2469,7795,5397,5414,5415,5420,8177,8859,7349,2538,8963,8967,9450,9540,9835,9837,9839,9841,9843,9852,9885,9889,9893,9898,9902,9906,9910,9914,9918,9968,9988,10005,10027,10031,10034,10039,10044,10054,5456,10429,10454,10879]'),(11,33,1,46,1,'Latin','[593,593,593,602,602,603,612,614,615,616,618,620,2255,2255,2255,2257,2258,2256,2138,2166,2157,3329,3331,3576,3301,3337,4194,4546,4545,4544,4528,4524,4481,4509,4509,4520,4221,3223,5856,6718,6735,6736,7162,590,7574,8393,9432,9543,9970,10012,10038,10377]'),(12,31,1,139,1,'Jazz','[1149,1149,1150,1150,1157,1157,1158,1158,1194,1194,1194,416,413,418,293,331,1827,377,1159,1159,1160,1160,1160,1161,1161,1161,1197,1641,1644,1643,1338,1341,1740,1286,1705,1688,1671,2035,2026,1428,2194,2222,2226,2241,2243,2233,2233,2141,2158,2159,2161,2246,2249,2234,2286,2570,2860,3036,3035,2254,1676,3342,3598,3595,3575,3570,3550,3291,3859,3859,3863,3863,3745,4386,4555,4538,4537,4524,4394,1681,4474,4486,4501,3211,3076,3076,4834,1673,3609,2476,2432,5019,4749,2458,6479,6479,4709,5658,6718,6735,7199,7190,7162,5362,7750,8857,8858,7682,7811,7811,7816,7839,7845,7849,7849,7881,7908,7926,8647,7731,9031,6745,6058,5107,3812,3821,3901,3941,4022,4064,4074,4077,4082,9323,9342,9371,9409,9413,9487,9509,9512,9542,9666,9667,9763,9764,9765,9970,9984,9985,10030,10041,10042,10049,10375,10483,10830,10830]'),(13,32,1,0,1,'Jungle',NULL),(14,36,1,188,1,'National / International','[1146,520,333,1834,1835,406,1340,960,729,1307,1299,1308,585,1251,1270,603,594,597,600,1698,1668,1693,2021,1881,2253,2188,2189,2205,2210,2190,2251,2251,2252,2219,2225,2231,2239,2238,2125,2130,2133,2135,2136,2134,2138,2149,2162,2200,2220,2220,2228,2228,2229,2230,2192,2156,2262,2656,2661,2684,2686,2700,2713,2387,2724,2720,2799,2214,2374,2203,2203,3542,3613,3592,3582,3568,3563,3548,4187,4190,3727,3864,3864,3978,3287,4536,4675,4675,4673,4674,4668,4668,4677,4677,4672,4672,4391,4951,4952,4957,4983,4984,1639,4470,4478,4481,4485,5060,4242,4763,4763,4837,4966,4966,4967,4967,4968,334,2018,1155,2418,2420,2421,2425,2477,2483,2483,5609,5614,5622,5652,5652,5659,5666,5685,5671,5486,5486,5487,5487,5489,5490,5490,5491,5492,5492,5493,5494,5494,5495,5496,5123,5137,4749,5856,5899,6068,2488,2471,6560,6561,6562,6562,6563,6564,6565,6566,6567,6568,4740,4737,4728,4728,4716,4715,4709,4703,5843,5674,6710,5394,5363,8072,7773,7432,7432,7574,5410,8352,8375,8856,7725,8534,8534,7822,7822,7851,7864,7871,7872,7897,7906,7906,8630,8645,8626,7351,8663,8137,9358,9360,9374,9379]'),(15,34,1,8,1,'Middle Of The Road / MOR','[610,617,619,1706,3569,3501,4612,10174]'),(16,35,1,30,1,'Musical Effects','[1177,1305,1205,1207,1207,1208,1215,1221,1226,1274,613,621,621,2205,2210,3973,3974,3975,3977,3984,3984,3990,3991,3996,3997,4707,4706,4717,7665,8530,9054,9057,9517]'),(17,37,1,0,1,'National Anthems',NULL),(18,38,1,47,1,'New Age','[259,340,1833,655,658,660,666,657,671,684,685,1306,1739,2729,3860,3862,2411,2438,4438,9067,8975,5344,9123,9126,9132,9157,9165,9167,9171,9179,9369,9302,9419,9421,9472,9560,9582,9673,9681,9684,9864,9866,9869,9874,10228,10236,10340]'),(19,48,1,35,1,'RnB (Contemporary)','[2596,2598,2615,2616,2631,2633,2636,2566,2572,2585,3611,3573,3345,4200,4579,4584,2473,9128,9130,9132,9161,9816,9818,9819,9821,9822,9866,9881,9966,9967,9968,9969,9973,9987,10022]'),(20,40,1,236,1,'Pop','[507,512,374,378,381,382,408,379,1151,1640,1645,1339,451,849,848,856,859,865,870,884,889,893,895,896,897,898,900,1202,582,1254,1598,1602,1617,1398,1649,1669,1701,1695,1683,1663,2658,2660,2663,2665,2669,2672,2678,2693,2695,2722,2721,2596,2601,2611,2632,2643,2548,2564,2576,2633,2587,2558,2805,2739,3068,3053,2861,2862,2863,2864,3535,3537,3545,3332,3334,3338,2094,3642,3515,3524,573,4574,4584,4612,4552,4543,4542,4456,4485,5072,5072,3174,3340,2034,5594,5598,5602,5636,5757,6132,6092,6457,6460,6465,6462,6461,6458,6466,6467,6470,6473,6475,6478,6481,6483,6493,6496,6499,6500,6505,6506,6835,6814,6757,6673,6659,6616,6605,6570,5631,6909,6978,7007,7036,7047,7097,3803,7259,7421,7467,7607,7788,7810,7799,8083,8090,8176,8181,8196,8200,8202,8205,8234,8240,8250,8279,8284,8312,8257,8361,8387,8393,8413,8417,8425,8427,8430,8435,8437,8438,8445,8480,8485,8492,8497,8499,8508,8508,8513,8520,8550,7333,7689,8092,8097,7887,7901,7956,7959,7959,7961,7961,7965,8871,9018,9020,9023,9026,9029,8989,6753,6062,5937,4104,9175,9456,9526,9693,9697,9704,9726,9734,9741,9742,9744,9746,9750,9752,9754,9756,9757,9762,9876,9882,9973,9989,9990,10046,10046,10052,10057,10176,10618,10636,10644,10652,10658,10662,10689,10712,10870]'),(21,39,1,112,1,'Period','[308,500,502,327,355,331,332,1152,1191,1195,1192,1193,1196,1647,1631,1338,1339,1375,1299,1308,1306,1283,1622,600,1648,1105,1309,2163,2215,2142,2204,2318,2327,2652,2679,2721,2634,2739,3235,3618,3615,3601,3560,3859,3863,3446,4579,4584,4644,4530,4465,4471,4476,4480,4485,4486,4489,4498,4508,3682,3174,3104,3076,4387,4749,6092,6659,6648,4719,4721,4737,6441,6453,3030,6193,5326,4433,4432,4429,4428,4427,5363,4434,4431,4436,7237,7785,7786,7809,7804,7803,7801,7800,7798,7797,7335,7671,7674,7675,7672,7673,7816,7839,7845,7849,7961,7962,7963,7965,8672,7947,7731]'),(22,50,1,5,1,'Ska','[2148,3187,9495,9859,9860]'),(23,49,1,523,1,'Rock','[289,300,301,302,305,305,313,315,317,317,318,326,327,407,408,409,410,411,1630,1633,1646,1188,1188,1199,1200,1344,1344,450,462,473,474,487,479,660,657,639,647,651,665,672,785,857,866,901,902,549,541,542,543,544,548,552,560,562,564,565,567,568,569,570,572,575,577,577,578,579,580,581,583,586,587,588,588,589,1594,1595,1604,1610,1612,1612,1614,1618,1620,1621,1621,1626,1648,1652,1666,1692,1703,255,262,260,260,2017,2165,2147,2163,2264,2286,2307,2327,2356,2659,2671,2674,2675,2677,2679,2682,2683,2694,2688,2698,2701,2705,2716,2709,2708,2706,2654,2594,2620,2547,2535,2760,2764,2772,2808,2841,2829,3037,3039,3074,3073,3071,3071,3070,3066,3062,3060,3058,3054,3044,3042,3042,3265,3251,3250,3250,3246,3242,3239,3239,3235,2861,2862,2863,2864,2865,2865,2866,2867,2867,2868,2869,2870,2871,3268,3270,3272,3324,2379,638,3541,3546,3619,3618,3614,3605,3600,3593,3592,3586,3580,3578,3567,3567,3565,3562,3560,3559,3557,3557,3556,3554,2099,2099,2101,2103,3630,3662,3368,3446,3462,3473,3477,3483,3488,3501,3508,3985,574,574,576,551,4618,4627,4627,4547,4532,4527,4526,4670,4951,4951,4952,4952,4953,4953,4953,4954,4954,4955,4955,4956,4956,4957,4979,4979,4980,4980,4981,4981,4982,4982,4983,4983,4984,4984,4985,4985,4986,4986,4987,4987,4988,4988,4989,4989,4990,4990,4991,4991,4992,4992,4993,4993,4994,4994,4995,4995,4996,4996,4996,4453,4459,4464,4471,4479,4497,4505,4508,4514,4516,5094,4242,4204,3704,3670,3670,3095,2913,2904,4978,4416,4422,4423,4424,4424,4425,4425,4426,4426,1700,303,303,5544,5722,5746,5710,5548,5548,5549,5550,5557,5557,5559,5559,5560,5562,5564,5565,5566,5569,5109,5150,5170,5571,5571,5572,5572,5573,5583,5585,5585,5591,4976,3751,5844,5844,5888,5888,6132,6101,6101,2417,2422,2441,2437,6480,6486,6486,6780,6780,6594,6998,7027,5277,6427,6428,6429,6430,6430,6431,6431,6432,6432,6433,6426,6426,6434,6434,5818,6949,6938,6958,7191,7148,5578,5922,3245,5047,5049,4297,3803,5020,3040,5587,7224,7224,7246,7293,7270,7270,7302,7757,7444,7498,7476,7487,7586,7641,7652,7652,7607,7788,7810,7798,8081,8179,8235,8345,8411,8425,8562,8580,7742,7743,7744,7745,7746,7747,7748,7748,7749,7751,7752,7395,7397,7397,8862,7333,7336,7695,8092,8093,8096,8098,8100,8100,8102,8103,8104,8110,8110,7732,7733,7735,7735,7737,7739,7741,8047,8048,8049,8056,8056,8061,7887,8633,8635,8637,8673,8627,8833,8841,8853,8855,8866,8866,8866,8867,8867,8868,8868,8869,8869,8869,8870,8870,8871,8873,8873,8874,8875,9023,9024,9025,9030,9032,9033,9034,9035,9036,9041,9068,9068,8993,9008,8933,8128,8128,5057,4300,4311,4317,4362,4358,4329,4322,3773,3815,3820,3822,3866,3941,3954,4010,4023,4060,4074,4084,4115,4165,4165,4167,4279,9193,9194,9407,9420,9463,9471,9476,9493,9501,9515,9515,9524,9525,9528,9571,9576,9652,9660,9668,9675,9682,9686,9690,9692,9699,9701,9707,9714,9716,9719,9724,9726,9728,9730,9731,9737,9738,9740,9754,9759,9760,9797,9804,9805,9805,9807,9815,9824,9825,9826,9827,9828,9862,9878,9979,9978,9980,9981,9982,9983,10162,10347,10362,8528,8528,10418,10472,10500,10539,10551,10559,10587,10668,10669,10669,10737,10746,10760,10766,10774,10787,10794,10846,10889,10895]'),(24,52,1,45,1,'Stings','[504,523,345,344,346,2176,2175,3572,8267,8269,8276,8291,8311,8318,8320,8345,8415,8444,8477,8480,8491,8511,8558,8561,8562,8566,8567,8568,8570,8574,8576,8577,8578,8580,8583,8586,8587,8588,8590,8591,8594,8605,8607,8634,10724]'),(25,51,1,23,1,'Soul','[1636,1709,1688,1706,2318,3034,3611,3030,5050,9027,3773,9766,9935,9938,9944,9945,9960,9969,9970,9971,9972,9974,9975]'),(26,53,1,23,1,'Techno','[1103,1104,515,1163,2710,4495,2689,4435,4433,4432,4430,4429,4428,4427,4434,4431,3811,9378,9415,9520,9710,9713,9871]'),(27,55,1,40,1,'Trip Hop / Downbeat','[1074,1420,1550,55,1558,993,1022,1075,1167,1578,2043,2057,2093,1658,1662,1682,281,280,260,4462,2931,4752,4755,4806,4866,4975,8443,8474,8518,9342,10032,10033,10037,10041,10044,10054,10163,10167,10180,10217]'),(28,54,1,14,1,'Trance','[1101,1102,466,477,869,1606,359,360,362,363,2702,2727,361,5251]'),(29,56,1,31,1,'Urban','[9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9849,9852,9885,9889,9893,9898,9902,9906,9910,9914,9918,9988,9999,10429,10454,10497]'),(30,57,1,132,1,'World Music / Crossover','[1233,1253,1270,1272,1273,1624,602,603,594,609,611,612,1881,1883,2188,2189,2205,2210,2252,2230,2192,2397,2724,2546,2592,2857,3072,3155,2374,3542,3544,3613,3606,3589,3577,3561,3551,3548,3298,3299,3304,3306,3373,4183,3858,3860,3505,3976,3991,4534,4676,4675,4673,4674,4672,4457,4478,4484,4870,4905,4681,4682,2416,2418,2475,2464,5666,5490,5491,5493,5495,5496,2488,2442,6464,5263,5843,5677,961,8072,8066,7780,5455,5475,2143,8395,8473,8856,7710,7714,8051,7822,7851,7871,7872,7880,7897,7906,7912,8630,8616,8626,8844,8854,9026,8997,6055,6061,3853,9166,9174,9322,9323,9344,9358,9360,9388,9423,9426,9443,9448,9685,9687,9696,9798,9801,9803,9808,9842,9863,9959,10173]'),(31,142,2,25,2,'Chill Out','[1558,688,673,678,833,2347,4475,2476,5866,6084,6803,6789,5426,8076,7721,7673,7392,8830,8831,8837,8839,8845,8853,10042,10043]'),(32,141,2,11,2,'Bright / Optimistic','[1728,636,639,829,3620,5446,7876,10025,10156,10174,10206]'),(33,143,2,24,2,'Cold / Barren','[1190,1305,3967,3991,4717,4695,7597,5462,8273,8274,7681,7688,7701,7716,7730,9062,8975,9381,10089,10096,10172,10181,10210,10226]'),(34,144,2,2,2,'Dance / Modern','[108,10037]'),(35,145,2,40,2,'Dark','[904,750,2413,2443,2484,2482,2428,3966,4494,4209,3115,4806,2439,2434,5268,5267,4739,4734,4705,4738,6191,6234,5434,5440,8616,7526,10157,10167,10172,10179,10183,10188,10189,10203,10209,10215,10229,10253,10281,10345]'),(36,147,2,23,2,'Dream / Heavenly / Flight','[1189,595,2109,3969,4635,4852,6313,6314,8071,8076,8078,8239,7699,8843,8851,9097,8955,8961,7095,9369,10104,10160,10221]'),(37,146,2,2,2,'Dawn','[1181,8069]'),(38,149,2,4,2,'Electronic','[7281,10162,10182,10199]'),(39,150,2,4,2,'Exotic','[5455,5474,10030,10173]'),(40,148,2,0,2,'Drone',NULL),(41,159,2,1,2,'Power / Energy','[7757]'),(42,158,2,17,2,'Peaceful / Pastoral','[1830,687,287,1115,6583,7667,5425,8655,8617,8624,8832,8834,7079,7080,10029,10089,10163]'),(43,151,2,3,2,'Fantasy','[800,7684,9285]'),(44,160,2,10,2,'Quirky / Strange','[5392,9050,9058,9060,9061,9067,10157,10168,10172,10218]'),(45,161,2,13,2,'Sad','[694,793,24,1210,2072,3980,4702,5266,5279,4722,8067,10201,10364]'),(46,162,2,27,2,'Sci-Fi / Space','[55,1178,1185,1190,665,757,768,2648,2655,3140,2413,2415,2426,2463,3971,3990,4522,5431,5447,5468,8274,8620,8621,7730,7090,4083,10178]'),(47,164,2,3,2,'Simple / Sparse / Minimal','[2410,7680,10181]'),(48,163,2,10,2,'Sea / Water','[123,817,1237,1891,4475,4438,6504,7664,7667,5459]'),(49,165,2,10,2,'Slow Motion','[812,751,5265,5381,7665,8078,8656,7690,8961,10177]'),(50,191,11,11,2,'Minimalist','[10273,10275,10278,10291,10296,10297,10298,10307,10311,10323,10327]'),(51,166,2,0,2,'Violence',NULL),(52,167,2,26,2,'Warm / Uplifting','[1724,1735,1719,650,660,654,661,708,799,807,811,839,966,959,952,881,792,794,2389,3589,4466,4711,5433,8088,8090,6059]'),(53,1247,2,13,2,'Horror / Tension','[9050,9053,9056,9058,9059,9064,9065,9066,8136,7078,9355,10157,10369]'),(54,192,11,2,2,'Opera','[5017,4750]'),(55,277,12,0,2,'Links',NULL),(56,196,11,0,2,'Pastoral',NULL),(57,194,11,0,2,'Palm Court',NULL),(58,193,11,3,2,'Orchestral March','[9671,10250,10267]'),(59,195,11,0,2,'Panoramic',NULL),(60,198,11,6,2,'Romantic Period (c1830-1900)','[5609,5614,9431,9497,9688,9689]'),(61,197,11,50,2,'Quasi-Classical','[2022,2185,1116,4448,4442,4443,4446,4447,4449,4452,4388,4389,4413,4414,4415,4904,4971,4940,5612,5613,1336,5271,5272,5278,4708,4724,4725,5288,4731,6299,5361,5364,5365,5391,5387,5376,5374,5373,5368,8070,8062,8383,8058,7862,7904,7964,7341,8131,10274,10371]'),(62,200,11,26,2,'Solo Instrument','[1841,1832,1134,1135,1136,2186,2177,2182,2183,2176,2175,2033,4388,4389,4413,4414,4390,4415,5606,5609,5612,5613,5614,5611,8212,8058]'),(63,199,11,7,2,'Small Ensemble','[2068,2184,4971,5786,9429,9430,10266]'),(64,1077,11,12,2,'Contemporary','[311,1134,1135,1136,2174,4691,4684,5373,7318,7319,7320,7683]'),(65,201,11,6,2,'String Quartet / Quintet','[1228,2022,4444,4451,4724,10263]'),(66,266,12,2,2,'Badly Played','[467,4840]'),(67,267,12,13,2,'Cartoons / Animation','[1175,1170,1174,468,2154,4398,4513,4963,4964,5816,7839,10634,10718]'),(68,268,12,5,2,'Chase','[2167,3857,4963,4964,4965]'),(69,269,12,1,2,'Cheeky','[5028]'),(70,270,12,1,2,'Cheesy / Kitsch','[10346]'),(71,271,12,3,2,'Comedy Effects','[2155,2157,4399]'),(72,273,12,1,2,'Cumbersome / Plodding','[2155]'),(73,272,12,6,2,'Comedy General','[2217,3743,5813,5818,10352,10357]'),(74,275,12,16,2,'Jaunty / Whimsical','[467,1672,2150,2151,2155,2846,3861,3497,4399,4400,4521,4963,6648,5806,7773,7847]'),(75,274,12,4,2,'Happy','[2152,3497,5629,5212]'),(76,276,12,0,2,'Jews / Jaws Harp',NULL),(77,284,12,0,2,'Saucy',NULL),(78,285,12,0,2,'Saw',NULL),(79,286,12,5,2,'Sit Com','[2832,3405,4400,5573,6648]'),(80,4,1,4,1,'Big Beat / Nu Skool','[8535,9371,10053,10056]'),(81,11,1,177,1,'Classical','[254,311,311,1710,1841,1832,1191,1192,1337,1335,1228,2068,1134,1134,1135,1135,1136,1136,2032,2022,2022,1821,2187,2186,2186,2185,2184,2177,2177,2182,2182,2183,2183,2176,2175,2178,2174,2033,2033,2033,1116,2401,2723,3588,4448,4442,4442,4443,4443,4444,4444,4445,4446,4446,4447,4447,4449,4449,4450,4452,4452,4451,4451,4388,4388,4389,4389,4413,4413,4414,4414,4390,4415,4415,4904,4971,4971,4940,5606,5606,5609,5609,5612,5612,5613,5613,5614,5614,5611,5611,5017,5017,4750,4750,4750,1336,1336,5271,5272,5278,4708,4724,4724,4725,4736,4741,5288,4731,4691,4684,6299,5361,5364,5365,5391,5387,5376,5374,5373,5373,5368,8070,8070,8062,8212,8383,7318,7319,7320,7683,8058,8058,7862,7904,7964,8832,7341,9099,9098,8131,5786,5789,5791,5302,5341,5343,5344,3624,3627,5107,5108,4280,4302,9123,9126,9157,9164,9165,9174,9359,9375,9380,9389,9392,9393,9394,9398,9403,9404,9405,9406,9419,9429,9430,9431,9440,9470,9482,9484,9497,9500,9549,9548,9561,9671,9688,9689,9692,9799,9873,9951,9962,9963,9964,9965,9998,10003,10004,10239,10250,10263,10266,10267,10273,10274,10275,10278,10291,10296,10297,10298,10307,10311,10323,10327,10371]'),(82,287,12,4,2,'Slapstick','[2217,2150,2154,3857]'),(83,6,1,23,1,'Blues','[315,2274,2649,2651,2671,2700,1676,3614,3602,4189,4608,4634,4488,2886,5658,7109,5578,8836,9191,9534,9538,9971,428]'),(84,13,1,119,1,'Country','[325,354,353,352,351,349,348,402,1307,2160,2152,2356,2649,2656,2667,2671,2680,2684,2387,2777,2786,2792,2799,2851,2818,2846,3617,3582,3732,3734,3735,3736,3737,3739,3492,3512,3519,3528,3529,3533,3970,3982,3983,3992,4541,4535,4637,4639,4458,4479,4513,4515,4517,4519,3693,306,5610,5675,5671,5541,5543,2471,5105,5798,5799,5804,5807,5810,6727,6733,6737,7200,7183,7172,7164,7148,7134,7120,7109,7197,5028,5042,5037,7769,7778,7780,8370,7742,7316,8101,7847,7883,8836,8137,8133,8123,8118,6739,6748,4033,9420,9461,9479,9516,9644,9646,9648,9650,9701,9800,9810,9855,9857,9858,9859,9860,9861,10354,10879]'),(85,21,1,748,1,'Electronica','[994,1074,108,123,158,167,1420,1181,1182,1183,993,993,1022,1075,1101,1102,1103,1104,292,294,499,500,502,506,515,519,519,521,1711,1711,1727,384,385,386,391,1137,1163,1164,1153,1185,1187,1188,1199,1184,1352,456,472,478,477,470,494,655,643,636,947,967,864,888,890,891,981,975,769,729,11,1302,1304,561,564,565,1204,1211,1212,1216,1232,1233,1235,1237,1238,1239,1242,1249,1268,1275,1285,1287,1290,1291,1292,1293,1296,1297,1298,1600,1606,604,605,608,613,618,356,2047,2051,2084,2081,2078,2073,1648,1659,1660,1684,1696,1699,1686,1690,1702,1707,1698,1703,1675,1675,1105,360,362,363,276,263,261,2037,1886,2247,2215,2237,2131,2207,2153,2242,2347,2650,2657,2670,2673,2718,2377,2381,2383,2391,2391,2393,2604,2619,2630,2542,2543,2549,2559,2581,2536,2601,2582,2533,2599,2614,2613,2624,2629,2539,2573,2574,2579,2579,2856,2859,2858,3125,3130,3135,3135,3140,3145,3150,3155,3160,3164,3169,3319,3326,3315,3029,3033,2223,516,3621,3620,3610,3599,3590,3585,3583,3571,2872,3290,3293,3294,3297,3298,3299,3300,3302,3303,3305,3344,3346,3347,3348,3349,2106,2111,2112,2113,2114,2115,4184,4185,4187,4190,4193,3981,4199,4202,4598,4603,4644,3295,4554,4548,4395,4397,4454,4463,4466,4476,4493,4495,4503,4520,4522,4209,3115,3086,2931,4773,4781,4790,4809,4841,4841,4852,4855,4858,4870,4873,4893,4914,4978,4941,4937,4977,4977,4416,4417,4418,4419,4420,4421,4422,4423,4424,2561,361,5594,5598,5602,5746,4975,4976,1100,5879,5908,6122,6076,2485,2478,6459,6465,6462,6458,6466,6497,6497,6499,6502,6503,6506,4733,4733,4718,4712,5259,6435,6441,6449,5943,5943,5944,5944,5945,5946,5946,5946,5947,5948,5948,5949,5950,5950,6064,6065,6066,5839,5649,5649,7216,5962,5988,6228,6240,6248,6252,6257,6265,6268,6274,6278,6281,6285,6288,6290,6307,6413,6410,6402,6324,6327,6330,6349,6367,6378,6381,6385,6390,6394,5350,5350,5337,5326,5308,4411,4412,4435,5366,5382,5380,5377,5369,4434,4431,8068,8064,7237,7754,7421,7444,7467,7783,7784,7789,7790,7808,7807,7806,7802,7669,5402,5403,5403,5405,5406,5407,5408,5409,5410,5411,5413,5413,5414,5415,5416,5417,5417,5418,5419,5419,5419,5420,5421,5421,5422,5423,5427,5428,5430,5431,5432,5434,5435,5443,5444,5446,5447,5449,5450,5451,5452,5453,5454,5457,5458,5461,5463,5464,5465,5466,5470,5471,5472,5473,5476,8076,8079,8081,8083,8085,8086,8088,8090,8165,8166,8173,8208,8211,8221,8231,8239,8248,8249,8250,8250,8264,8267,8268,8274,8276,8277,8279,8286,8287,8291,8293,8297,8305,8320,8257,8323,8324,8340,8343,8346,8347,8351,8354,8358,8363,8396,8399,8400,8419,8437,8442,8443,8444,8481,8485,8508,8518,8538,8540,8545,8554,8557,7325,7323,8865,8652,8654,8112,7681,7684,7685,7686,7691,7694,7695,7698,7700,7702,7703,7705,7713,7721,7671,7674,7675,7672,7673,7365,7365,7366,7366,7369,7371,7372,7373,7373,7373,7376,7377,7377,7378,7378,7378,7379,7380,7380,7381,7381,7382,7383,7383,7383,7384,7384,7384,7385,7385,7386,7386,7386,7387,7387,7387,7388,7388,7390,7390,7390,7392,7391,7393,7732,7732,7733,7737,7737,7739,7741,8047,8048,8049,8052,8053,8054,8055,8057,8060,8529,8530,8535,8605,8606,8607,8608,8609,8610,8611,8864,7818,7835,7835,7868,7871,7880,7893,7914,7928,7933,8646,7958,7960,7962,7963,7967,8668,8669,8669,8670,8670,8671,8671,8672,8672,8673,8673,8674,8674,8674,8618,8619,8620,8621,8623,8627,8831,8833,8837,8838,8840,8842,8845,8847,8848,8849,8850,8855,7951,7950,7947,5505,7340,7349,9054,9059,9063,8965,8984,8987,2126,8136,5787,5790,3811,3815,3820,3822,3853,4064,4083,4084,4103,4114,9322,9340,9357,9367,9373,9377,9381,9385,9409,9415,9427,9441,9441,9442,9442,9459,9462,9465,9471,9487,9502,9505,9531,9539,9544,9555,9578,9580,9584,9591,9600,9608,9619,9627,9629,9670,9703,9704,9707,9708,9809,9810,9813,9836,9838,9840,9844,9845,9846,9849,9862,9871,9875,9928,9928,9934,9935,9936,9936,9938,9940,9940,9941,9941,9942,9942,9943,9944,9945,9945,9946,9946,9947,9948,9948,9949,9950,9952,9952,9953,9953,9956,9956,9957,9959,9960,9986,9991,9992,9996,9999,10000,10012,10018,10022,10023,10025,10035,10036,10039,10040,10040,10050,10051,10052,10053,10054,10055,10055,10056,10059,10073,10073,10104,10159,10167,10169,10175,10178,10180,10182,10183,10197,10199,10199,10210,10217,10225,10226,10251,10259,10277,10282,5456,5438,5941,5942,5404,10559,10613,10856,10878]'),(86,968,1,0,1,'Fabio Selection',NULL),(87,9,1,130,1,'Chill Out','[994,1420,275,1558,1831,1164,1166,1628,1635,1634,1632,1167,679,680,688,689,723,822,967,356,1697,1662,1664,1704,1670,1654,1886,2208,2232,2124,2195,2164,2144,2145,2146,2169,2375,2377,2385,2389,2393,2720,2537,2609,2533,2534,2639,2572,2623,2856,2379,3621,3587,3551,3294,3654,4545,4529,4636,4394,4454,4482,3717,4752,4866,4905,5866,6084,6502,6583,5839,5633,6970,4352,5362,5388,5369,7754,7666,5424,5435,5477,2143,7815,7880,7890,7897,8646,7963,8612,8622,8625,8830,8835,8838,8839,8842,8844,8845,8849,8850,8851,8852,8853,7340,4168,9128,9339,9433,10010,10012,10016,10023,10025,10026,10027,10031,10032,10033,10036,10038,10039,10040,10041,10043,10200,10206,10213,10425,10808]'),(88,16,1,13,1,'Disco','[502,506,355,1375,1608,607,1309,2245,2652,3615,3608,550,7818]'),(89,17,1,21,1,'Drum & Bass / Jungle','[4882,4893,5944,5945,5947,5948,5949,5950,6064,6065,6066,5319,8969,9308,9580,9943,9950,9957,9958,5438,5942]'),(90,14,1,55,1,'Dance (Traditional)','[559,2187,1129,2253,2240,2219,2221,2225,2231,2239,2238,2125,2133,2135,2156,2262,3327,3328,3463,3978,3280,4388,4391,4394,4501,3223,4930,2432,5699,5899,6560,6561,6563,6564,6565,6566,6567,6568,6718,6735,5479,7729,7864,6746,9191,9496,9498,10198,10337,10341,10350,10365,10366,10397,10466]'),(91,10,1,12,1,'Christmas','[335,471,1656,1657,3380,3462,4726,7097,5020,9031,9070,9667]'),(92,997,1,52,1,'Electro Pop','[275,518,1147,1151,1154,1153,1596,1665,1106,1884,2577,2752,2745,3313,3524,550,1155,5389,508,8202,8417,9062,8963,9006,9010,9138,9708,9709,9710,9712,9713,9746,9949,9977,10001,10002,10004,10005,10010,10013,10017,10026,10028,10051,10052,10055,10056,10059,10288,10437,10512,10635]'),(93,44,1,0,1,'Rave',NULL),(94,971,1,0,1,'Fabio Best Songs',NULL),(95,1091,1,16,1,'Metal','[332,2692,2696,2725,2437,7498,8345,8391,8452,4010,4070,4094,9829,9830,9831,10760]'),(96,216,14,0,2,'Gallop',NULL),(97,175,8,32,2,'Happy','[1672,2597,2583,3393,3394,3405,3408,3412,3420,3430,3740,3497,4594,4393,4398,4400,4521,5617,5626,5629,5687,5856,6484,6494,4726,6723,5028,8094,7912,7955,5499,7347]'),(98,1184,1,42,1,'Adult','[4612,4954,4955,4956,4957,4979,4980,4981,4982,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,5544,5549,5553,5555,5557,5559,5562,5564,5581,7201,7197,5579,7956,7965,8867,8868,8870,8871,8872,8873,8874,8875]'),(99,156,2,3,2,'Majestic / Panoramic','[5691,10029,10184]'),(100,1258,1,4,1,'Bossa','[9742,9934,10038,10256]'),(101,188,11,2,2,'Duets','[4741,8070]'),(102,182,8,1,2,'Sad','[5803]'),(103,174,8,7,2,'Fantasy','[1174,1656,1657,1667,1694,2171,2020]'),(104,185,11,10,2,'Chamber Orchestra','[4442,4443,4444,4445,4446,4447,4449,4450,4452,4451]'),(105,168,8,51,2,'Children 0-4','[3442,3445,3740,5626,5806,7773,7955,7347,7353,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10125,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155]'),(106,208,14,0,2,'Can Can',NULL),(107,207,14,1,2,'Calypso','[10366]'),(108,209,14,0,2,'Ceilidh',NULL),(109,210,14,0,2,'Cha Cha',NULL),(110,211,14,0,2,'Charleston',NULL),(111,187,11,5,2,'Classical Period (c1750-1830)','[2186,2177,2182,2183,10239]'),(112,184,11,4,2,'Baroque Period (c1600-1750)','[2033,5606,9099,9098]'),(113,212,14,0,2,'Conga',NULL),(114,214,14,1,2,'Folk','[3463]'),(115,215,14,0,2,'Fox Trot',NULL),(116,153,2,2,2,'Horror','[6244,9357]'),(117,221,14,0,2,'Klezmer',NULL),(118,218,14,0,2,'Hoe Down',NULL),(119,217,14,0,2,'Gypsy / Romany / Folk',NULL),(120,220,14,0,2,'Jive',NULL),(121,222,14,1,2,'Latin','[3328]'),(122,1262,14,1,2,'Boogie Woogie','[9191]'),(123,223,14,0,2,'Line / Square Dance',NULL),(124,224,14,0,2,'Military Two Step',NULL),(125,225,14,7,2,'Other Traditional Ethnic Dances','[559,4391,6560,6563,6566,6568,10350]'),(126,227,14,0,2,'Polka',NULL),(127,226,14,0,2,'Paso Doble',NULL),(128,234,14,0,2,'Tap',NULL),(129,236,14,16,2,'Waltz','[2187,2219,3280,4388,4930,2432,5899,6564,6565,6567,5479,7729,9498,10337,10341,10397]'),(130,235,14,0,2,'Twist',NULL),(131,1081,16,4,2,'French/Nu Disco','[506,1608,1309,550]'),(132,1069,21,17,2,'House','[515,1686,4187,5908,5326,8173,7365,7373,7378,7383,7384,7385,7386,7387,7388,7390,10035]'),(133,1239,19,6,2,'Future Bass','[5415,5418,5420,508,5445,5448]'),(134,992,21,3,2,'Reverse SFX','[1181,1187,1184]'),(135,1238,19,3,2,'Trap','[5410,5412,8474]'),(136,1048,21,11,2,'Fusion','[994,1074,993,1075,2391,3150,5649,4412,5463,9555,10000]'),(137,1049,21,2,2,'Folk','[1022,1702]'),(138,1005,21,7,2,'Percussive','[11,1302,2599,2629,2539,2579,2859]'),(139,1050,21,59,2,'Experimental','[123,1182,1183,993,499,1185,472,967,729,1242,1290,1292,613,2051,2073,3160,3169,3290,3305,3344,4790,4809,4870,4733,4718,4712,5649,5988,5308,5402,5409,5411,5413,5434,5466,5476,8274,8286,8297,8545,7681,7703,8060,8529,8605,8864,8620,8621,9629,9670,10175,10178,10180,10182,10197,10210,10226,10259,10277]'),(140,278,12,8,2,'Loony / Zany','[2217,2150,2154,2167,3740,3857,4399,10860]'),(141,280,12,0,2,'Modern',NULL),(142,283,12,6,2,'Quirky','[468,469,1300,4398,4931,2440]'),(143,1067,21,2,2,'Swing','[7694,7698]'),(144,281,12,0,2,'Music Hall / Vaudeville',NULL),(145,1082,21,20,2,'Glitch Hop','[1711,1304,1675,2673,516,3302,3347,4199,5879,5403,5406,5408,5413,8165,8343,9357,9367,9373,9377,9465]'),(146,282,12,0,2,'Pathos',NULL),(147,1083,21,7,2,'Dirty Dutch Music','[519,8965,9442,9471,9531,9544,9578]'),(148,279,12,1,2,'March','[2151]'),(149,1084,21,59,2,'Industrial','[519,1711,1600,2047,3135,3585,3348,2111,4193,3295,4463,3086,4773,4781,4858,4873,5746,4733,5943,5944,5945,5946,5948,5949,5950,6064,6065,6066,6228,6240,6257,6265,6268,6274,6281,6285,6290,6307,6410,6378,6385,6390,6394,5380,5430,8443,8444,7700,7732,8047,8048,8049,7951,10159,10167,5941,5942,10559,10878]'),(150,1105,21,107,2,'Dance','[1164,1675,2037,2237,2604,2619,2630,2542,2543,2549,2559,2581,2536,2601,2582,2613,2856,3590,3293,3346,4184,4548,4493,4841,4893,2561,6076,6459,6449,5350,5337,7421,7789,7808,5410,5415,5416,5417,5418,5419,5420,5421,8221,8268,8277,8279,8287,8291,8293,8323,8324,8340,8346,8351,8358,8363,8396,8442,8481,8485,8508,7323,8652,7365,7366,7369,7371,7373,7376,7377,7378,7380,7381,7383,7384,7386,7387,7388,7390,7818,7871,7893,7914,9703,9704,9707,9708,9928,9936,9940,9941,9942,9943,9945,9946,9947,9948,9949,9950,9952,9953,9956,10022,10023,10053,10282,10613]'),(151,1085,21,34,2,'Lounge','[521,2084,2081,2078,1690,4914,4941,6502,5839,7754,7669,8646,7963,9928,9934,9935,9936,9938,9940,9941,9942,9944,9945,9946,9948,9952,9953,9956,9959,9960,10036,10039,10040,10199]'),(152,1144,21,32,2,'Tech House','[1606,1707,2718,2391,2614,2624,2579,3135,4397,4495,4841,4417,6497,6435,5946,5403,5419,7373,7377,7378,7380,7381,7383,7384,7386,7387,7390,8535,8987,9441,9442,9871]'),(153,1172,21,36,2,'Pop','[3621,3620,3599,4395,4476,6499,6503,6506,5350,5382,7444,7467,5414,5417,5419,5421,5446,5452,5453,5457,8085,8086,8231,8250,8305,8320,8257,8419,8437,8518,7835,7967,8674,9999,10025,10052]'),(154,1173,21,34,2,'Cross Over','[3145,3155,2223,3583,3299,4190,3981,7691,7695,7702,7372,7385,7732,8608,7880,8619,8627,8833,8840,8842,8849,8850,8855,9415,9441,9462,9580,9591,9600,9608,9619,9809,9810,9813]'),(155,1197,21,5,2,'Progressive','[2931,4977,4416,9584,9996]'),(156,1223,23,1,2,'Pop','[6112]'),(157,1228,21,17,2,'IDM','[5943,5944,5946,5947,5948,5950,7366,10050,10051,10055,10056,10073,10169,10183,10199,10225,10251]'),(158,1242,21,14,2,'Psychedelic','[8668,8669,8670,8671,8672,8674,9836,9838,9840,9844,9845,9846,9849,9875]'),(159,1218,23,20,2,'Acoustic','[5541,5543,5553,5567,5181,5589,6768,5811,6729,5579,7769,7778,7780,9646,9648,9650,9654,9656,9658,9662]'),(160,1168,24,3,2,'Disco','[2782,4480,3104]'),(161,410,31,0,2,'Baroque Jazz',NULL),(162,414,31,3,2,'Boogie / Stride','[1688,2286,3291]'),(163,411,31,2,2,'Bebop','[1159,4749]'),(164,412,31,8,2,'Big Band','[1157,331,1338,4537,9031,3812,9542,9763]'),(165,413,31,3,2,'Blues / Folk','[5658,6058,3901]'),(166,290,12,1,2,'Vocal','[467]'),(167,1107,31,11,2,'Bossa','[1161,2233,2159,3570,3550,4524,4394,4501,6718,6735,6745]'),(168,291,12,0,2,'Wah-Wah Trumpet',NULL),(169,204,14,0,2,'Belly Dance',NULL),(170,289,12,0,2,'Villainy',NULL),(171,1195,13,15,2,'Americana','[4517,4519,5543,6727,6733,7183,7172,7164,7120,7109,7742,9644,9646,9648,9650]'),(172,202,14,0,2,'Ballet',NULL),(173,421,31,1,2,'Jazz Rock','[7190]'),(174,1255,13,7,2,'Western','[8137,8118,9461,9855,9857,9858,10354]'),(175,428,31,4,2,'Soul Jazz','[418,2194,9764,9765]'),(176,429,31,18,2,'Swing','[1157,1641,1644,1740,2158,2246,2249,3595,3211,3076,6479,7849,5107,9409,9487,9512,10483,10830]'),(177,431,31,4,2,'Vocal','[1158,1159,1160,1161]'),(178,430,31,0,2,'Trad Jazz',NULL),(179,171,8,55,2,'Children\'s TV','[3370,3386,4551,5626,5687,5212,5795,5802,5805,5813,5815,8361,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10125,10126,10127,10128,10130,10131,10132,10133,10134,10135,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10153,10154,10155,10338,10634,10718]'),(180,177,8,37,2,'Kids Singing / Children\'s Songs','[3367,3373,3377,3380,3397,3400,3406,3407,3408,3409,3412,3416,3428,3429,3431,3432,3433,3435,3436,3437,3731,5794,5795,5796,5797,5800,5801,5804,5805,5807,5808,5809,5812,5813,5814,5819,5820]'),(181,152,2,1,2,'Frantic / Busy','[10197]'),(182,1003,1,41,1,'Atmosphere','[340,469,2248,2251,2198,2199,2200,10165,10174,10279,10280,10281,10283,10287,10290,10297,10299,10302,10303,10304,10308,10310,10320,10322,10325,10331,10334,10340,10343,10344,10345,10348,10349,10359,10360,10374,10378,10384,10392,10395,10398]'),(183,985,1,0,1,'Matteo songs',NULL),(184,24,1,105,1,'Funk','[355,1831,1147,456,1600,606,607,1696,1703,2036,2201,2191,2222,2227,2241,2123,2132,2207,2137,2138,2140,2142,2204,2245,2318,2338,2652,2558,2782,2812,2841,2825,2739,3309,3034,3033,3536,3602,3597,3345,3646,3666,3744,550,4540,4538,4465,4480,4483,4491,4498,4511,3682,3104,2949,2904,2367,4387,1700,6472,3030,4436,7762,7766,8086,8202,8258,8269,8270,8305,8334,8425,8429,8431,8577,7750,7335,8093,8096,7962,8662,8661,5057,6057,4311,3866,3901,9391,9399,9414,9425,9457,9458,9469,9491,9509,9535,9537,9538,9575,9757,9967,10000,10394,10726]'),(185,180,8,8,2,'Nursery Rhymes','[2642,3392,3438,3439,3441,3442,3363,7347]'),(186,181,8,10,2,'Pop For Kids','[3385,3426,4551,5617,5793,5796,5802,5815,7237,7259]'),(187,1025,1,11,1,'Film','[9345,9346,9552,9554,9556,9557,9560,9561,9566,9567,9569]'),(188,1020,1,11,1,'Eclectic','[1156,1335,1271,1664,1135,2032,2022,1129,3246,3458,79]'),(189,1094,1,18,1,'Dark Wave','[1833,4427,9051,9053,9055,9057,9061,9063,9064,9065,9066,9067,4115,4167,9340,9341,9346,9363]'),(190,23,1,153,1,'Folk / Nu Folk','[1022,349,348,345,344,343,342,341,402,1171,1340,898,902,559,572,584,1206,1219,1220,1276,1279,1280,1281,1283,1649,1108,2211,2250,2160,2307,2656,2687,2799,3037,3039,3073,3068,3066,3064,3058,3056,3054,3052,3044,3042,3260,3256,2379,3538,3540,3546,3617,3602,3582,3435,3727,3744,3452,3458,3463,3483,3509,3513,3519,3522,3528,3533,3992,4195,4196,4589,4558,4550,4541,4637,3693,5671,5541,5543,5546,5553,5567,5181,5589,5017,5899,6112,2471,6768,6560,6561,6562,6563,6564,6565,6566,6568,4716,4715,5798,5799,5801,5804,5810,5811,5674,6719,6729,7164,7120,5037,3040,5579,7769,7778,7780,7316,8101,7847,7883,8663,8123,6753,6739,6747,6748,6569,9393,9395,9402,9408,9435,9470,9485,9490,9504,9644,9646,9648,9650,9652,9654,9656,9658,9662,10196,2261,10444,10447,10459,10607,10658,10662]'),(191,1154,1,0,1,'Beatboxing',NULL),(192,45,1,15,1,'Reggae','[591,2127,2136,2298,3564,3339,3356,4392,3187,8664,9682,9690,9821,10355,10676]'),(193,8,1,240,1,'Children','[1170,1174,1656,1657,1667,1672,1694,2171,2020,2597,2600,2642,2583,3365,3364,3366,3367,3367,3368,3369,3371,3372,3373,3373,3374,3375,3376,3377,3378,3370,3370,3379,3380,3381,3382,3383,3384,3385,3386,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3408,3409,3409,3410,3411,3412,3412,3412,3413,3414,3415,3416,3416,3417,3418,3419,3420,3421,3422,3423,3424,3426,3427,3428,3429,3429,3430,3431,3432,3432,3433,3434,3435,3436,3436,3437,3438,3438,3439,3439,3440,3441,3442,3442,3443,3445,3445,3363,3363,3731,3740,3740,3497,4594,4551,4551,4551,4393,4398,4400,4521,5617,5617,5626,5626,5626,5629,5687,5687,5212,5212,5856,6484,6494,4726,5105,5106,5793,5793,5794,5794,5794,5795,5795,5795,5796,5796,5796,5797,5797,5797,5798,5799,5800,5800,5800,5801,5801,5802,5802,5802,5803,5803,5804,5805,5805,5805,5806,5806,5807,5807,5808,5808,5808,5809,5809,5809,5811,5811,5812,5812,5813,5813,5814,5814,5814,5815,5815,5815,5816,5817,5817,5817,5818,5819,5819,5819,5820,5820,5820,6723,5028,8071,7237,7259,7773,8361,8094,7912,7912,7955,7955,5499,5499,7347,7347,7347,7353,7360,5107,5108,4041,9362,9368,9309,9310,9315,9316,9319,9321,9401,9402,9451,9460,9467,9468,9475,9476,9487,9495,9496,9497,9509,9512,9524,9534,9538,9553,9554,9565,9672,9676,9677,9678,9679,9685,9806,9814,10111,10111,10111,10112,10112,10112,10113,10113,10113,10114,10114,10114,10115,10115,10115,10116,10116,10116,10118,10118,10118,10119,10119,10119,10120,10120,10120,10121,10121,10121,10122,10122,10122,10124,10124,10124,10125,10125,10125,10126,10126,10127,10127,10127,10128,10128,10128,10129,10129,10130,10130,10130,10131,10131,10131,10132,10132,10132,10133,10133,10133,10134,10134,10134,10135,10135,10135,10136,10136,10136,10137,10137,10137,10139,10139,10139,10140,10140,10140,10141,10141,10141,10142,10142,10142,10143,10143,10143,10144,10144,10144,10145,10145,10145,10146,10146,10146,10147,10147,10147,10148,10148,10148,10149,10149,10149,10150,10150,10150,10151,10151,10151,10152,10152,10153,10153,10153,10154,10154,10154,10155,10155,10155,10176,10338,10634,10718]'),(194,1004,1,213,1,'Cinematic','[158,323,11,9123,9154,9156,9164,9166,9324,9325,9326,9327,9328,9329,9330,9332,9333,9334,9335,9336,9364,9367,9373,9286,9291,9292,9293,9295,9296,9299,9302,9303,9312,9390,9392,9394,9397,9398,9403,9405,9406,9416,9417,9418,9419,9424,9440,9445,9447,9448,9455,9460,9473,9474,9477,9480,9481,9482,9483,9493,9494,9498,9500,9503,9510,9522,9548,9550,9551,9558,9562,9563,9564,9568,9570,9572,9574,9577,9579,9664,9672,9676,9677,9678,9679,9691,9692,9796,9811,9864,9865,9867,9868,9869,9870,9873,9874,9986,9991,9992,9993,9995,10159,10170,10184,10204,10227,10234,10237,10240,10241,10242,10243,10244,10245,10246,10250,10252,10254,10255,10257,10258,10260,10261,10264,10265,10267,10269,10270,10271,10272,10274,10275,10276,10281,10289,10293,10294,10295,10298,10300,10307,10309,10310,10312,10314,10315,10316,10317,10318,10320,10321,10322,10324,10325,10326,10327,10328,10330,10331,10333,10335,10338,10339,10342,10351,10353,10356,10358,10361,10363,10368,10370,10373,10376,10379,10381,10383,10385,10387,10388,10389,10390,10391,10393,10396,10398,10399,288,10414,10443,10495,10496,10497,10498,10524,10539,10548,10575,10577,10584,10585,10586,10603,10614,10630,10667,10729,10773,10844,10852,10856,10861]'),(195,179,8,4,2,'Lullabies','[3432,3440,5105,8071]'),(196,1028,1,1,1,'Religious','[571]'),(197,1205,1,1,1,'Theatrical','[10332]'),(198,1243,1,0,1,'Nashville',NULL),(199,1183,1,38,1,'Singer/Songwriter','[5541,5544,5546,5549,5550,5553,5555,5560,5567,5569,5581,5583,5589,5591,4975,4976,5579,5587,9018,9020,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9041,9068,571]'),(200,140,2,22,2,'Beds / Underscore','[1828,1148,679,680,690,701,707,977,969,953,24,1212,3650,2412,2453,2489,5236,2467,10156,10160,10177,10200]'),(201,22,1,0,1,'Fanfares',NULL),(202,1006,1,16,1,'Electronic Beats','[1550,1137,8967,8969,8973,79,9161,9479,9555,10011,10013,10015,10027,10073,10169,10180]'),(203,1220,1,82,1,'Acoustic','[4742,6467,6469,6474,6484,6496,6501,6507,5105,6892,6909,7007,7036,7047,7214,6719,6723,6727,6729,6733,6736,6737,7203,7201,7200,7190,7183,7172,7134,7197,8218,8300,8370,8423,8435,8445,8462,8465,8491,8499,8506,7744,7751,7753,7395,8862,7315,7689,7712,7717,8094,8095,8097,8098,8102,8103,8104,8105,6747,6748,9386,9456,9478,9492,9507,9532,9533,9733,9748,10194,10211,10212,10213,10305,10459,10607,10658,10662,10703,10820,10862,10868]'),(204,969,1,0,1,'Fabio Specials',NULL),(205,1163,1,4,1,'Surf','[2679,4556,4514,7630]'),(206,1023,1,3,1,'Tango','[1835,1642,10329]'),(207,1244,1,0,1,'categoria Nicolò',NULL),(208,1245,1,2,1,'Reggaeton','[8664,10058]'),(209,189,11,4,2,'Early / Renaissance (c1450-1600)','[2178,2401,2723,8832]'),(210,298,33,0,2,'Cha Cha',NULL),(211,1117,31,14,2,'Chill Out / Lounge','[1341,2026,2243,2234,2570,2254,1681,4834,2476,2458,7881,4064,9667,10030]'),(212,41,1,9,1,'Punk','[473,1607,3658,5196,5020,3954,9527,9529,10794]'),(213,155,2,7,2,'Laid Back','[930,5436,8957,7079,9748,10211,10213]'),(214,1231,1,2,1,'World','[10158,10186]'),(215,19,1,42,1,'Dubstep','[2710,2581,2618,4199,4201,4203,4756,4763,4773,4781,4809,4858,4873,4916,5949,6064,6065,6066,5314,5406,5408,5410,5412,5415,5418,5420,508,5445,5448,8165,8282,8474,7686,8953,8963,8965,8973,8987,9578,9670,5941,5404]'),(216,1146,1,17,1,'Indie','[1615,606,620,573,4456,5573,5583,7270,7742,7395,7397,8862,9037,4168,4171,9304,9736]'),(217,1232,1,20,1,'World Music','[5663,9065,8121,5786,4358,10049,10080,10165,10173,10190,10196,10198,10223,10228,10230,10262,10301,10306,10313,10332]'),(218,178,8,0,2,'Links',NULL),(219,1198,1,66,1,'Ethnic','[4837,2018,1155,2416,2418,2475,5652,5666,5685,5681,5676,5489,5491,5492,5493,5494,5495,5496,6068,2442,4716,4715,5674,5677,5663,5394,5375,5367,5378,8072,8066,8062,7432,5474,8352,8375,8395,2212,8473,8588,8856,8051,8534,7815,7872,8645,8626,8840,8842,9619,9997,10080,10158,10165,10186,10192,10198,10209,10223,10230,10233,10301,10306,10332,10344,10676]'),(220,157,2,2,2,'Neutral','[4322,10231]'),(221,5,1,32,1,'Bluegrass / Hillbilly','[316,325,354,353,352,351,349,348,345,344,343,342,341,1171,2653,2846,2214,3519,4513,3693,5810,5812,5816,7183,7172,7164,7134,7120,7109,5037,7316,7883]'),(222,25,1,0,1,'Garage',NULL),(223,1029,1,0,1,'Religious',NULL),(224,292,33,0,2,'Argentina',NULL),(225,186,11,2,2,'Choral','[4736,9375]'),(226,1178,31,4,2,'Gypsy','[3575,3076,2432,6479]'),(227,219,14,0,2,'Jig',NULL),(228,7,1,5,1,'Breakbeat','[4893,5947,5405,8338,7700]'),(229,1155,1,0,1,'Vocals',NULL),(230,154,2,3,2,'Hot / Desert / Tropical','[10168,10186,10372]'),(231,12,1,63,1,'Comedy','[1175,249,1170,1174,467,467,467,468,468,469,1300,1672,2217,2217,2217,2150,2150,2150,2151,2151,2152,2154,2154,2154,2155,2155,2155,2157,2167,2167,2846,2832,3405,3740,3743,3857,3857,3857,3861,3497,3497,4398,4398,4399,4399,4399,4400,4400,4513,4521,4840,4963,4963,4963,4964,4964,4965,4965,4942,4931,4931,2440,5629,5212,5573,6648,6648,5806,5813,5816,5818,5028,7773,7839,7847,8953,9343,9305,9307,9319,9426,10346,10352,10357,2261,10634,10718,10860,10868]'),(232,293,33,0,2,'Bachata',NULL),(233,15,1,22,1,'Dance / Club (General)','[167,518,1164,1147,1339,1342,508,4141,9668,9709,9710,9947,10009,10011,10015,10016,10018,10023,10035,10053,10058,10868]'),(234,294,33,0,2,'Bolero',NULL),(235,295,33,5,2,'Bossa Nova','[3331,4524,3223,6718,6735]'),(236,296,33,1,2,'Brazil','[602]'),(237,297,33,2,2,'Calypso','[3576,5856]'),(238,46,1,3,1,'Retro','[6479,9501,9502]'),(239,172,8,75,2,'Educational / Times Tables','[3365,3364,3366,3367,3368,3369,3371,3372,3373,3374,3375,3376,3378,3370,3379,3381,3382,3383,3384,3386,3387,3388,3389,3390,3391,3395,3396,3397,3398,3399,3401,3402,3403,3404,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3421,3422,3423,3424,3427,3429,3434,3436,3438,3439,3443,3445,3363,5793,5794,5796,5797,5798,5800,5802,5807,5808,5809,5811,5812,5814,5817,5818,5819,5820]'),(240,308,33,5,2,'Latin Dance','[593,603,2258,2157,10012]'),(241,26,1,4,1,'Gospel','[3335,4673,4668,4677]'),(242,228,14,0,2,'Quick Step',NULL),(243,301,33,0,2,'Corridas',NULL),(244,302,33,1,2,'Cuba','[2255]'),(245,305,33,0,2,'Flamenco',NULL),(246,304,33,0,2,'Dominican Republic',NULL),(247,303,33,0,2,'Cumbia',NULL),(248,306,33,0,2,'Latin / Spanish Vocal',NULL),(249,230,14,2,2,'Samba','[6746,10466]'),(250,229,14,0,2,'Rumba',NULL),(251,231,14,0,2,'Scottish',NULL),(252,307,33,0,2,'Latin Big Band',NULL),(253,232,14,0,2,'Soft Shoe',NULL),(254,322,33,0,2,'Paso Doble',NULL),(255,314,33,1,2,'Latin Retro','[590]'),(256,315,33,0,2,'Latin Rock',NULL),(257,316,33,0,2,'Mambo',NULL),(258,317,33,0,2,'Mariachi',NULL),(259,318,33,0,2,'Merengue',NULL),(260,320,33,0,2,'Norteno / Norteño',NULL),(261,321,33,1,2,'Nu Latino','[593]'),(262,319,33,1,2,'Mexico','[4481]'),(263,327,33,0,2,'Rumba',NULL),(264,324,33,0,2,'Puerto Rico',NULL),(265,325,33,0,2,'Rancheras',NULL),(266,329,33,0,2,'Samba',NULL),(267,326,33,1,2,'Reggaeton','[8393]'),(268,323,33,0,2,'Peru / Andes',NULL),(269,335,33,3,2,'Tropical Latin','[4546,4544,4509]'),(270,328,33,2,2,'Salsa','[2166,4528]'),(271,330,33,0,2,'Soca',NULL),(272,336,33,0,2,'Venezuela',NULL),(273,331,33,0,2,'South America',NULL),(274,332,33,0,2,'Spain',NULL),(275,334,33,0,2,'Tango',NULL),(276,333,33,0,2,'Spanish Guitar',NULL),(277,337,33,2,2,'West Indies / Caribbean','[2255,7574]'),(278,1157,33,2,2,'Jazz','[2256,7162]'),(279,1147,33,3,2,'Alternative','[593,602,10377]'),(280,240,35,1,2,'Effects','[3996]'),(281,238,35,0,2,'Comedy',NULL),(282,1190,24,7,2,'Rock','[4540,2949,2904,2367,8425,8093,8096]'),(283,1225,21,4,2,'Retrowave','[6497,7737,8673,9862]'),(284,237,35,0,2,'Clocks / Time',NULL),(285,239,35,9,2,'Drones / Tones','[1305,1207,1208,1221,3973,3974,3975,3997,7665]'),(286,241,35,0,2,'Electronic',NULL),(287,242,35,0,2,'Fills',NULL),(288,243,35,2,2,'General Musical Effects','[3984,3991]'),(289,416,31,5,2,'Classic Jazz 1920`s','[1149,1194,1197,3859,3863]'),(290,415,31,0,2,'Burlesque',NULL),(291,418,31,2,2,'Fusion','[4538,4486]'),(292,419,31,0,2,'Hot Club Of France',NULL),(293,417,31,3,2,'Dixieland','[1194,3859,3863]'),(294,420,31,6,2,'Jazz Band / General','[1827,7849,8647,3941,9323,9984]'),(295,258,35,2,2,'Swells / Bumpers','[621,3990]'),(296,424,31,7,2,'Modern Jazz','[1150,413,1160,1161,1286,9985,10049]'),(297,423,31,5,2,'Lounge','[1643,4474,4074,9342,9371]'),(298,422,31,0,2,'Latin Jazz Fusion',NULL),(299,426,31,5,2,'Ragtime','[7811,7816,7839,7845,7926]'),(300,1204,21,0,2,'Grime',NULL),(301,244,35,0,2,'Gramophone / Vintage Recordings',NULL),(302,247,35,0,2,'Mobile Phone Ring Tones',NULL),(303,245,35,0,2,'Heart Beat',NULL),(304,246,35,1,2,'Loops','[8530]'),(305,425,31,1,2,'New Orleans Jazz','[1194]'),(306,255,35,3,2,'Rhythms / Percussion','[2205,2210,4707]'),(307,248,35,1,2,'Orchestral Effects & Tuning up','[1177]'),(308,256,35,0,2,'Rises / Swooshes / Hits',NULL),(309,427,31,29,2,'Smooth Jazz','[1149,1150,416,293,377,1160,1705,2035,1428,2233,2141,2860,3036,3035,1676,3342,3598,3745,4386,4555,5019,4709,5362,8858,7682,7731,9666,10041,10042]'),(310,257,35,0,2,'Swannee Whistle',NULL),(311,1200,21,42,2,'Synthwave','[4978,4977,4418,4419,4420,4421,4422,4423,4975,5259,6441,4411,7671,7674,7675,7672,7673,7733,7737,7739,8606,8607,7835,7958,7960,7962,8670,8671,8672,8673,8674,7950,7947,2126,9986,9991,9992,10055,10059,10073,10104,10856]'),(312,1214,21,11,2,'Tropical House','[5594,5598,5602,6122,6465,6462,6458,6466,8250,8264,8267]'),(313,349,36,1,2,'Cuba','[2138]'),(314,265,35,0,2,'Wind / Cold',NULL),(315,1046,35,4,2,'Guitar','[1205,621,3977,3984]'),(316,343,36,0,2,'Bluegrass',NULL),(317,345,36,0,2,'Cajun',NULL),(318,344,36,2,2,'Brazil','[2420,2421]'),(319,346,36,3,2,'Celtic','[5652,5123,6068]'),(320,350,36,12,2,'Eastern Europe','[1146,1340,585,1693,5666,5685,6565,6566,6567,4728,4703,8072]'),(321,351,36,0,2,'England',NULL),(322,366,36,0,2,'Mississippi Delta',NULL),(323,311,33,11,2,'Latin Moods','[614,615,616,618,620,4194,4545,4509,4520,4221,6736]'),(324,312,33,1,2,'Latin Percussion / Drums','[10038]'),(325,169,8,60,2,'Children 5-10','[4551,5106,5794,5795,5797,5800,5801,5803,5805,5806,5808,5809,5811,5814,5815,5816,5817,5819,5820,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10125,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155]'),(326,176,8,5,2,'Kids Playing Instruments','[2600,5817,7912,5499,7360]'),(327,310,33,0,2,'Latin Jazz Fusion',NULL),(328,313,33,3,2,'Latin Pop','[3329,3301,3337]'),(329,352,36,5,2,'France','[520,5899,6560,6564,4709]'),(330,354,36,3,2,'Greece','[2130,5674,8663]'),(331,353,36,0,2,'Germany / Austria',NULL),(332,356,36,0,2,'Hillbilly',NULL),(333,299,33,0,2,'Colombia',NULL),(334,300,33,0,2,'Conga',NULL),(335,355,36,2,2,'Hawaii','[2190,2686]'),(336,358,36,4,2,'India','[2252,2724,7432,5410]'),(337,357,36,0,2,'Holland',NULL),(338,359,36,10,2,'Ireland','[1299,1308,4391,6561,6562,6563,4737,6710,7871,7351]'),(339,361,36,21,2,'Italy','[2253,2219,2225,2231,2239,2238,2125,2133,2135,2149,2162,2156,3568,4536,4470,6562,6568,4740,4728,5363,7864]'),(340,360,36,0,2,'Israel',NULL),(341,362,36,19,2,'Japan','[333,1881,4837,1155,5486,5487,5489,5491,5492,5493,5494,5495,5496,4716,4715,7773,8534,7872,7906]'),(342,173,8,1,2,'Electronic','[5212]'),(343,170,8,1,2,'Children 11-15','[5799]'),(344,139,2,154,2,'Ambient / Atmospheric','[158,1550,1714,1187,1352,642,646,658,689,657,647,664,671,672,684,692,702,716,785,786,787,821,828,834,840,917,914,918,933,934,938,943,972,926,910,982,791,981,906,749,1,1209,1214,283,274,1110,2248,2375,2385,3310,3312,638,3544,3583,3552,2438,2470,2481,3990,4642,4496,3115,4852,4945,4680,5681,5771,5734,2467,4692,4697,4701,5279,5282,5283,5285,5286,5287,5269,5264,4729,5276,4693,5274,4699,4698,4690,4688,6313,6314,5308,5360,5478,5390,8069,7805,7664,7668,7670,5424,5436,5441,5452,5458,5459,5460,5467,5469,5477,8074,8239,8536,8549,7328,8654,8655,8657,7724,7687,7704,7709,7711,7715,8612,8613,8616,8618,8623,8625,8628,5499,8955,8961,7082,9361,9365,9366,9511,9559,10028,10029,10032,10080,10160,10163,10177,10181,10190,10207,10214,10234,10292,10319,10340]'),(345,363,36,0,2,'Jewish',NULL),(346,309,33,2,2,'Latin General','[2255,2257]'),(347,369,36,0,2,'New Zealand',NULL),(348,382,36,0,2,'Venezuela',NULL),(349,370,36,8,2,'Oriental / South East Asia','[2720,3864,2018,5490,5492,8534,9358,9379]'),(350,371,36,0,2,'Peru',NULL),(351,372,36,0,2,'Portugal / Portuguese',NULL),(352,374,36,0,2,'Scandinavia',NULL),(353,373,36,0,2,'Russia / Former USSR',NULL),(354,47,1,4,1,'Rhythm And Blues / R&B (Classic)','[4678,4489,4141,9535]'),(355,1102,1,222,1,'Corporate','[471,639,1288,1295,2657,3545,3610,4497,2479,5617,5622,5629,5636,5687,5757,5908,6457,6460,6464,6462,6461,6458,6467,6470,6471,6473,6477,6478,6487,6488,6489,6490,6491,6494,6497,6507,6814,6616,4726,5259,6449,5631,5642,6892,6909,6978,7007,7036,7047,7191,7097,5382,5379,5371,5385,7421,7444,7607,7788,7799,8079,8167,8188,8196,8204,8205,8214,8230,8231,8284,8288,8296,8312,8361,8384,8387,8386,8396,8402,8421,8427,8430,8435,8438,8445,8465,8480,8492,8497,8506,8536,8537,8538,8540,8541,8543,8544,8545,8546,8547,8549,8550,8553,8554,8557,8560,8561,8566,8567,8568,8570,8573,8574,8576,8577,8578,8579,8580,8583,8588,8590,8591,8594,7333,7334,7689,7712,8530,7835,7861,7887,7901,5497,5503,7354,8976,8980,8982,8984,8989,8999,6060,6062,6063,5931,4300,3941,4033,4076,4104,9138,9175,9356,9363,9370,9287,9289,9290,9291,9292,9293,9295,9296,9300,9313,9314,9317,9318,9386,9396,9400,9412,9427,9464,9466,9467,9468,9469,9492,9507,9525,9526,9528,9669,9680,9686,9687,9732,9759,9878,9879,9882,9989,9990,9997,10002,10005,9518,10400,10428,10430,10444,10467,10483,10508,10512,10513,10514,10618,10619,10644,10681,10689,10696,10702,10703,10717,10727,10798,10812,10820,10838]'),(356,377,36,2,2,'Southern African Sounds','[4672,7822]'),(357,445,37,0,2,'Finland',NULL),(358,18,1,0,1,'Dub',NULL),(359,206,14,6,2,'Bossa Nova','[4394,4501,3223,5699,6718,6735]'),(360,1182,13,1,2,'Blues','[3735]'),(361,213,14,2,2,'Flamenco','[2262,3978]'),(362,383,36,0,2,'Wales',NULL),(363,1181,13,16,2,'Ballad','[3734,3736,3737,3512,3982,4637,4458,5610,5675,5671,5105,6737,7200,7197,7769,7778]'),(364,970,1,0,1,'Fabio Collection',NULL),(365,384,36,6,2,'West Indies / Caribbean','[2136,5622,5137,5856,7574,7897]'),(366,436,37,0,2,'Brazil',NULL),(367,437,37,0,2,'Canada',NULL),(368,438,37,0,2,'China',NULL),(369,1180,13,15,2,'Pop','[3732,3739,3528,3529,3970,3983,3992,4515,7148,7134,5028,5042,5037,8370,4033]'),(370,1201,12,3,2,'Comedic Tension','[4965,4942,4931]'),(371,439,37,0,2,'Costa Rica',NULL),(372,440,37,0,2,'Croatia',NULL),(373,441,37,0,2,'Czech Republic',NULL),(374,443,37,0,2,'Ecuador',NULL),(375,442,37,0,2,'Denmark',NULL),(376,444,37,0,2,'Europe',NULL),(377,446,37,0,2,'France',NULL),(378,447,37,0,2,'Germany',NULL),(379,460,37,0,2,'Scotland',NULL),(380,461,37,0,2,'Serbia',NULL),(381,462,37,0,2,'Spain',NULL),(382,463,37,0,2,'Sweden',NULL),(383,464,37,0,2,'Switzerland',NULL),(384,466,37,0,2,'Ukraine',NULL),(385,390,39,8,2,'1950s','[3076,7786,7809,7804,7803,7800,7798,7797]'),(386,465,37,0,2,'U.S.A',NULL),(387,467,37,0,2,'Wales',NULL),(388,398,39,0,2,'Ancient',NULL),(389,391,39,2,2,'1950s (Popular)','[7785,7801]'),(390,388,39,5,2,'1920s','[3859,3863,7816,7839,7845]'),(391,389,39,0,2,'1930s / 1940s',NULL),(392,393,39,8,2,'1960s (Popular)','[1152,1647,1631,1338,2679,2739,3618,3030]'),(393,392,39,9,2,'1960s','[308,331,1283,1622,4489,3174,4749,6092,7849]'),(394,394,39,6,2,'1970s','[327,332,2652,3615,4471,4486]'),(395,395,39,1,2,'1970s (Popular)','[6193]'),(396,254,35,0,2,'Reverse / Backwards effects',NULL),(397,396,39,45,2,'1980s (Popular)','[500,502,355,1375,600,1648,1105,1309,2215,2142,2204,2318,2327,2721,2634,4579,4584,4644,4530,4476,4480,3682,3104,4387,6441,4433,4432,4429,4428,4427,4434,4431,4436,7237,7335,7671,7674,7675,7672,7673,7961,7962,7965,8672,7947]'),(398,250,35,1,2,'Percussion Effects','[4706]'),(399,251,35,0,2,'Personal Stereo',NULL),(400,249,35,0,2,'Party Next Door',NULL),(401,399,39,1,2,'Baroque Idiom','[5363]'),(402,397,39,0,2,'20th Century Classical',NULL),(403,253,35,0,2,'Pizzicato Strings',NULL),(404,252,35,0,2,'Piano Scales',NULL),(405,400,39,0,2,'Classical Idiom',NULL),(406,401,39,16,2,'Decade - 1990s','[1339,2163,3235,3601,3560,3446,4465,4485,4498,4508,6659,6648,6453,5326,7963,7731]'),(407,233,14,3,2,'Tango','[1129,3327,9496]'),(408,339,36,29,2,'Arabic / Middle Eastern','[1834,406,729,1251,1270,1668,2021,2251,2220,2228,2713,2203,3563,3287,5060,4763,4966,4967,4968,334,2477,2483,5659,5394,7432,8375,8856,7725,8645]'),(409,402,39,0,2,'Decade - 2000s',NULL),(410,403,39,0,2,'Decade - 2010s',NULL),(411,404,39,6,2,'Medieval / Renaissance','[1299,1308,1306,4719,4721,4737]'),(412,405,39,0,2,'pre 1920\'s (Popular)',NULL),(413,406,39,0,2,'Retro / Pop / Rock',NULL),(414,407,39,0,2,'Victorian / Edwardian / Romantic Idiom',NULL),(415,261,35,0,2,'Trains',NULL),(416,1062,39,0,2,'Golden Age',NULL),(417,263,35,0,2,'Water',NULL),(418,1108,39,5,2,'Hollywood Golden Age','[1191,1195,1192,1193,1196]'),(419,340,36,1,2,'Argentina','[1835]'),(420,259,35,0,2,'Telephones / Electronic / Digital',NULL),(421,260,35,5,2,'Textures / Light Drones','[1215,1226,1274,613,4717]'),(422,996,40,40,2,'Electro Pop','[507,1339,1202,1598,1602,2601,2611,2643,2564,2576,2633,2587,3537,3545,4543,5072,2034,6499,5631,6978,7259,7421,7467,8083,8090,8250,8279,8257,8387,8413,8417,8437,8480,8485,8497,8508,7965,10046,10052,10057]'),(423,262,35,0,2,'Vocal effects',NULL),(424,1055,40,67,2,'rock','[1151,451,849,848,856,859,893,582,1617,1669,1701,2663,2669,2672,2678,2722,2721,2558,2805,3053,2862,2863,2864,2094,3642,3515,3524,573,4456,4485,5072,6132,6483,6835,6814,6757,6673,6659,6616,6605,6570,3803,7607,7788,7810,8181,8196,8425,8438,8492,8499,8513,8520,8550,7333,8092,7887,7959,7961,8871,9018,9020,9023,9026,5937,9876,9882]'),(425,264,35,0,2,'Whales',NULL),(426,1128,35,1,2,'Bells','[1207]'),(427,468,49,61,2,'Classic Rock','[289,300,301,302,326,327,1646,1620,2327,2659,2698,2705,2709,2865,2867,3541,3619,3554,2101,3477,3501,4526,4204,3704,2913,5710,5548,5150,5170,5888,6101,2417,2441,6430,6432,6426,6434,5818,7641,7652,8110,8633,8869,8870,9463,9476,9515,9690,10347,10500,10551,10587,10669,10746,10766,10774,10787,10794,10846,10889,10895]'),(428,1065,40,3,2,'Indie','[2693,2695,2861]'),(429,347,36,2,2,'China','[5494,7906]'),(430,348,36,0,2,'Colombia',NULL),(431,1187,40,17,2,'Teen Pop','[4552,6506,8097,9029,9726,9734,9741,9742,9744,9746,9750,9752,9754,9756,9757,9762,10046]'),(432,1212,40,6,2,'Dance','[5594,5598,5602,9693,9697,9704]'),(433,1213,40,7,2,'Tropical House','[6465,6462,6458,6466,6473,6505,8393]'),(434,1130,35,0,2,'Claps',NULL),(435,341,36,0,2,'Australia / Australasia',NULL),(436,1145,41,1,2,'Post','[1607]'),(437,338,36,20,2,'Africa','[2188,2189,2205,2210,2192,2374,3542,3613,3548,4675,4668,4677,1639,2488,5843,7822,7851,8630,9360,9374]'),(438,469,49,27,2,'Country Rock','[552,2671,2682,2760,2764,3074,3071,3054,3042,3600,3560,3662,3473,3483,3488,4479,3095,5585,5844,6594,7148,3040,7742,8128,9652,9660,9701]'),(439,470,49,10,2,'Heavy Metal / Nu Metal','[305,317,1199,1200,6949,6958,7224,7498,8235,9493]'),(440,473,49,109,2,'Pop Rock','[407,408,409,410,411,1630,1633,639,651,785,2163,2674,2677,2620,2547,2535,2829,3071,3251,3250,3235,2861,3605,3593,3592,3580,3578,3557,2099,3446,551,4527,4951,4952,4953,4954,4955,4956,4957,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4992,4993,4994,4995,4996,4459,4497,3670,5544,5548,5549,5550,5557,5559,5560,5566,5109,5585,5591,6132,6480,6780,6998,6427,6428,6429,6431,7191,3803,7270,7607,7788,7810,8411,8425,7333,8092,8096,7887,8637,8866,8871,9024,9033,9068,8933,8128,4300,4311,3773,3866,3941,9528,9686,9692,9699,9707,9740]'),(441,471,49,84,2,'Indie / Britpop','[857,866,549,541,542,543,544,548,567,568,569,570,572,577,578,583,586,587,588,1610,1612,1614,1621,1626,1692,2683,2694,2688,2706,3042,3250,3246,3242,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,3268,3270,3272,3618,2103,574,4618,4953,4955,4956,4991,4996,5571,5572,5573,5583,7270,7757,7748,7397,8866,8867,8868,8869,8873,9035,9068,5057,4358,4165,4279,9515,9524,9525,9682,9730,9737,9738,9754,9759,9760]'),(442,472,49,0,2,'Jazz Rock',NULL),(443,474,49,3,2,'Rock','[2147,3751,6101]'),(444,476,49,2,2,'Rockabilly','[2356,6486]'),(445,1060,49,24,2,'progressive','[1188,479,657,564,260,3239,2379,3567,4978,4416,4422,4423,4424,4425,4426,303,4976,4329,9576,9805,9824,9825,9826,9827]'),(446,1061,49,56,2,'alternative','[305,1188,450,462,487,560,1618,2708,2099,4952,4953,4954,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4995,4996,4514,5094,4242,3670,5571,5572,4297,7746,7748,7397,8866,8867,8868,8869,8870,8873,9023,9025,9032,9036,9041,4165,4167,9407,9471,9501,8528]'),(447,1079,49,52,2,'hARD rOCK','[318,1652,255,2165,2716,2772,3324,3559,4627,4951,4994,4508,303,2422,2437,7027,6938,5020,7224,7246,7302,7476,7487,7586,7652,8345,8580,8110,7735,8056,9030,9034,8993,9008,4317,3954,4010,4084,4115,9193,9194,9668,9675,9815,9828,10362,8528,10418,10668,10669,10737,10760]'),(448,1118,49,11,2,'Grunge','[1344,7735,9714,9716,9719,9724,9726,9728,9804,9805,9807]'),(449,1068,49,55,2,'Electronic','[565,575,577,579,580,581,588,1594,1595,1604,1612,1621,1648,1666,262,260,2264,3239,3567,3562,3557,574,576,4532,4453,4471,4516,4424,4425,4426,5722,5746,7293,7444,8081,7752,7732,7733,7737,7739,7741,8047,8048,8049,8056,8673,8627,8833,8855,8874,8875,9571,10472,10539,10559]'),(450,1136,49,34,2,'Ballad','[589,2307,2675,2701,2654,2808,3070,3066,3062,3060,3044,3265,3985,4670,5557,5559,5562,5564,5565,5569,5922,3245,5047,7743,7745,7747,7749,7336,8100,8103,8104,8841,8853,4322]'),(451,1126,49,5,2,'Post','[647,665,2594,638,7695]'),(452,1170,49,11,2,'Acoustic','[3037,3039,3073,5587,7744,7751,7395,8862,8098,8100,8102]'),(453,1222,49,9,2,'Americana','[5844,5888,6780,6430,6431,6432,6433,6426,6434]'),(454,1260,49,9,2,'Psychedelic','[4023,4074,9862,9979,9978,9980,9981,9982,9983]'),(455,1188,49,3,2,'Instrumental','[4627,9731,9797]'),(456,972,971,0,2,'Melodic Addicted',NULL),(457,1227,54,1,2,'Ambient Trance','[5251]'),(458,974,971,0,2,'Underground Specials',NULL),(459,976,971,0,2,'Underground Specials',NULL),(460,975,971,0,2,'Underground Specials',NULL),(461,977,971,0,2,'Pippone Swing',NULL),(462,973,971,0,2,'Underground Specials',NULL),(463,979,971,0,2,'Pippone Electronic',NULL),(464,980,971,0,2,'Pippone Super Hot',NULL),(465,978,971,0,2,'Pippone Exterme',NULL),(466,982,971,0,2,'Pippone Rithmic',NULL),(467,1007,1004,9,2,'Chase/Tension','[158,11,9286,9299,9416,9522,9691,10227,288]'),(468,1024,1023,0,2,'Tango Argentino',NULL),(469,981,971,0,2,'Pippone Dark Element',NULL),(470,1032,1027,73,2,'Background Music','[1175,1183,55,1712,1724,1719,1823,1837,1832,1830,1839,1838,1824,403,383,384,385,386,387,388,390,389,1179,1189,1148,1198,1156,1637,56,1353,722,840,610,2068,1115,2213,2712,3316,3321,3314,3027,3029,3610,3606,4183,3968,3974,3975,3282,4442,4444,4445,4446,4643,4549,4209,4831,5012,5681,5734,1100,6495,5267,4727,5361,5370,8062,5426,5475,9344,9376,9379,9380]'),(471,1033,1027,0,2,'Musical',NULL),(472,1034,1027,86,2,'Trailer','[510,517,522,1132,1726,1828,401,396,1144,1191,1638,1813,721,854,855,874,770,1217,1218,2704,2593,2605,2610,2612,2565,2584,2259,4510,5683,6825,7017,5667,6528,6958,2641,7791,7792,7793,7794,5437,8167,8184,8185,8186,8213,8224,8225,8235,8244,8252,8319,8390,8391,8403,8450,8459,8478,8539,8555,8562,8565,8581,8593,8595,7334,8113,8114,8117,8648,8649,8650,8651,7696,7708,7719,7858,7909,8629,7940,8950,8958,8977,8986,9003,9303,288]'),(473,1071,1027,449,2,'Underscore','[290,292,295,296,299,304,309,319,320,322,324,501,503,509,511,513,328,338,347,329,337,1712,1718,1716,1727,1728,1735,1721,1825,1826,1829,1843,377,406,392,393,395,397,399,34,1389,1345,469,643,726,728,759,977,963,956,958,965,970,846,849,853,861,863,871,758,740,732,727,1301,1300,1267,1284,1844,1845,1847,1849,276,1109,1112,2038,2031,2024,2023,2019,1127,1124,1123,1122,1121,1119,2646,2647,2662,2664,2717,2715,2714,2711,2732,3320,3322,3325,3326,3327,3308,3534,2482,2474,2414,3986,3281,3283,3284,3286,4197,4198,4633,4638,4505,2931,4904,5007,4959,4961,4966,4967,4968,4972,4949,4948,4938,4939,4940,4942,4943,4944,4946,4947,4936,4934,4933,4932,4931,4930,4929,4928,4679,4680,4681,4682,3609,334,2419,2424,2429,2444,2435,2456,2457,2465,2468,2489,2491,2460,2431,2487,2445,2446,2451,2454,5016,2455,2452,2425,2477,2464,2436,2490,2492,2462,2466,2472,2449,5676,5668,2486,2459,2447,2439,2434,2423,6489,4732,5278,4701,4702,4708,4724,4733,4718,4707,4706,4717,4727,5277,4684,5645,6692,6885,6901,5951,5955,5960,5962,5965,5966,5968,5971,5974,5977,5981,5983,5987,5988,5989,5990,5994,5998,6001,6002,6006,6009,6013,6016,6017,6021,6024,6028,6033,6036,6041,6140,6143,6146,6150,6157,6160,6164,6166,6171,6175,6179,6183,6188,6191,6195,6198,6202,6208,6215,6216,6220,6224,6225,6228,6231,6234,6240,6244,6248,6252,6257,6261,6265,6274,6278,6285,6290,6300,6304,6307,6417,6410,6406,6402,6401,6397,6320,6324,6327,6330,6334,6338,6343,6348,6350,6353,6357,6361,6364,6367,6375,6378,6381,6385,6394,5384,5383,5380,5375,5368,8064,8063,7783,7784,7806,5399,5423,5424,5429,5432,5442,5443,5444,8179,8187,8210,8214,8224,8226,8227,8228,8238,8297,8308,8309,8310,8317,8319,8327,8344,8347,8354,8360,8368,8369,8373,8379,8381,8383,8389,8386,8395,8397,8398,8410,8419,8422,8424,8451,8452,8458,8466,8472,8473,8484,8504,8510,8860,8861,7325,7326,7317,7319,7320,7324,7327,7330,7332,8865,7724,7728,8112,8113,8648,8650,7681,7685,7690,7692,7693,7697,7702,7703,7706,7707,7708,7710,7714,7718,7719,7720,8099,8050,8051,8057,8058,8059,8060,8061,7821,7824,7854,7855,7856,7858,7862,7865,7868,7876,7885,7903,7904,7917,7921,7932,8629,8631,8632,8644,8645,8613,8615,8617,8619,8620,8621,8844,8846,8847,8848,7955,7953,7952,7948,7509,7518,7526,7527,5497,5501,7341,7344,7364]'),(474,983,971,0,2,'Pippone Maledetto',NULL),(475,1106,1027,5,2,'Bed','[1143,1653,1678,2209,5371]'),(476,1241,1027,5,2,'Bumper','[8563,8564,8586,8587,8591]'),(477,1111,1023,1,2,'Italiano','[1642]'),(478,1092,1091,1,2,'Jazz','[332]'),(479,1031,1027,317,2,'Soundtrack','[1145,1146,1168,227,249,254,243,291,298,314,321,514,520,522,339,330,333,1710,1165,1174,1192,1193,1196,1631,1799,1806,739,733,1307,1299,1308,2058,1667,1107,1850,1128,1114,1117,2236,1120,2395,2396,2404,2405,2406,2407,2408,2409,2666,2676,2685,2703,2719,2713,2707,2728,2721,2829,3317,3318,3323,3539,3600,3588,3584,3574,3566,3558,3555,3553,3634,3638,4182,3855,3865,3275,3289,3288,3287,3276,3277,3278,4448,4443,4447,4449,4450,4452,4451,4539,4530,4523,4632,4460,4461,4467,4468,4499,4500,4502,4506,4507,4521,5084,5060,4230,3200,4795,4808,4821,4909,5008,5009,5010,5011,5013,5014,5015,4960,4962,4969,4973,4950,303,2018,2461,2430,2448,5659,5488,6463,6464,6468,6485,6490,6491,6492,6847,6825,6631,6518,7057,6920,6929,7017,7068,5272,4700,4725,4741,5283,5286,5288,5269,4731,5281,4713,4719,4720,4730,5273,5275,5284,4723,4696,4694,4704,5274,5263,4740,4728,4722,4712,4703,4699,4690,4686,4691,5640,5677,6508,6528,6536,6544,6552,6685,6692,6701,6710,6859,6870,6879,6949,6938,6988,6958,6155,6193,6281,6295,6310,6413,6349,5328,5479,5363,5364,5365,5391,5387,5376,5374,5372,8073,8070,8068,8066,8065,7409,7399,7554,7619,7566,7794,7796,5395,5396,5397,5400,5401,5422,5427,5484,8167,8182,8185,8186,8189,8190,8192,8206,8208,8209,8222,8232,8242,8245,8247,8252,8292,8301,8321,8328,8341,8376,8404,8405,8406,8407,8408,8418,8433,8450,8455,8460,8463,8503,8512,7752,8857,7329,7330,7331,7339,7338,7722,7723,7725,7726,7727,7729,8114,8116,8117,8927,8649,8651,7814,7821,7877,7909,7964,8612,8614,7937,7938,7939,7940,7942,7941,7943,7944,7954,7949,7946,7945,7512,7522,8872,7351,7353,7354,7355,7358,7362,2538,10066]'),(480,1044,1027,1,2,'Games','[8977]'),(481,1165,1091,4,2,'Progressive','[2725,4010,4070,4094]'),(482,364,36,4,2,'Latin / South America','[603,600,4478,2418]'),(483,1103,1027,18,2,'Scene Change','[380,405,1187,781,1698,4556,1173,4503,4909,4964,4935,306,4735,5663,8209,7908,9003,9341]'),(484,1251,1027,5,2,'Action','[8950,8958,8986,9003,9008]'),(485,1240,1102,32,2,'Logos','[8536,8537,8538,8540,8541,8543,8544,8546,8547,8549,8550,8553,8554,8557,8560,8561,8566,8567,8568,8570,8573,8574,8576,8577,8578,8579,8580,8583,8588,8590,8591,8594]'),(486,1095,1094,2,2,'Ethereal Wave','[1833,9055]'),(487,1185,1146,0,2,'Folk',NULL),(488,1186,1184,0,2,'Alternative',NULL),(489,1246,1146,2,2,'Rock','[9304,9736]'),(490,1221,1220,25,2,'Pop','[4742,6474,6484,6496,6501,6507,6892,6909,7007,7036,7047,8435,8445,8465,8499,8506,7744,7751,7753,8862,7689,7717,8094,8097,8102]'),(491,1217,1184,11,2,'Album Alternative','[5544,5549,5553,5555,5557,5559,5562,5564,5581,5579,8868]'),(492,1233,1232,3,2,'Eastern Europe','[5663,10262,10313]'),(493,59,58,156,1,'Ambient / Textural Feels','[994,1074,55,993,1075,1714,1828,1164,1209,356,287,2248,2683,2375,2381,2385,2555,2837,3316,3031,2379,3544,3589,3552,2106,3654,3862,2438,2453,2463,3969,3990,4529,4475,4496,3717,4834,4852,4916,4945,2489,2460,4975,4976,5866,6487,4701,4702,4708,5266,5287,5269,4734,4738,4693,4704,4712,4690,5960,6183,6208,5308,8069,7281,7664,7665,7666,7668,7670,7667,5424,5425,5426,5426,5427,5431,5433,5435,5436,5437,5441,5449,5452,5453,5460,5463,5464,5468,5469,5472,5473,5477,8076,8088,8273,8274,8321,8360,8376,8443,8536,8549,8553,8656,8657,7680,7684,7695,7702,7707,7711,7715,7718,7673,7392,7393,8099,8645,9053,9058,9059,9060,9061,9062,9065,9067,8957,8961,7078,7085,7087,7090,7091,7092,7095,5937,4064,4083,4124,9171,9361,9365,9366,9434,9511,9533,9559,9865,9866,9922,9926,9959,10030,10104,10162,10287,9872]'),(494,60,58,259,1,'Anger / Aggression','[1145,1101,295,304,309,318,510,511,1711,1726,396,405,721,728,770,740,729,11,1304,1595,1607,1626,255,262,2264,2664,2666,2673,2676,2684,2692,2696,2703,2704,2717,2614,2772,3239,3314,3534,3541,3546,3619,3567,3559,3302,3304,3347,3348,3349,2111,2113,2114,2115,2414,3477,3977,3984,3986,3997,4203,4627,3295,3296,4540,4532,4638,4994,4453,4457,4463,4471,4486,4495,4505,4508,4520,4230,3704,3200,2913,4773,4781,4795,4821,4858,4873,4909,5007,4961,4938,4944,4934,4681,4416,4417,4421,4426,2561,303,2465,2468,2473,2466,5683,5668,5486,5487,5488,5490,5746,5710,5170,5571,6101,2422,2437,2488,2478,6847,6825,6631,4733,4707,4706,4713,5943,5944,5945,5946,5947,5948,5950,6064,6065,6066,5667,5955,5965,5966,5968,5971,5974,5994,5998,6001,6021,6146,6150,6157,6166,6171,6179,6188,6215,6228,6257,6261,6265,6268,6281,6285,6290,6413,6410,6402,6330,6334,6381,6385,6390,6394,2641,4433,4432,7293,7792,5405,5406,5413,5461,5475,8179,8185,8206,8208,8235,8276,8319,8343,8345,8389,8390,8391,8403,8405,8415,8422,8452,8459,8472,8478,8504,8539,8562,8563,8564,8567,8580,8587,8591,7752,7324,8113,8117,8648,8650,7708,7710,8110,7735,7741,8047,8048,8049,8056,7824,7865,8629,8631,7937,7940,7942,7952,7951,7946,8987,10053,10159,10175,10243,10252,10294,10310,10331,10376,8528,5942,288,10539,10559,10614,10668,10669,10729,10737,10746,10760,10844]'),(495,365,36,3,2,'Mexico','[594,597,4481]'),(496,61,58,47,1,'Anthemic','[643,800,821,839,965,874,2396,2400,2401,2402,2403,2694,2385,2722,2721,2611,4456,4460,6076,6463,6464,6461,6468,6477,6493,4730,6428,6528,5328,5379,8068,7409,7566,5395,5420,5471,8085,8090,8167,8181,8245,8328,8341,8386,8458,8114,7877]'),(497,63,58,89,1,'Beautiful','[1146,1149,311,314,504,522,340,1835,374,375,401,1165,1192,1193,1198,895,2058,1660,1689,1107,1850,1112,1428,1120,2406,2777,2818,3052,3032,3540,3564,3555,3335,3410,3529,3992,2526,4643,4535,4524,1173,4467,4468,4390,4501,4518,4242,5014,4679,5489,5491,5492,5494,5496,6501,4737,4728,6710,6885,6892,5363,7785,7786,7809,7804,7803,8239,8398,8473,7749,7885,7956,8871,8872,7351,7353,9359,9405,9478,9507,9532,9548,9686,9764,10182,10214,10221,10311,10447]'),(498,62,58,56,1,'Background / Wallpaper / Lift Music','[994,123,55,993,310,521,1735,1154,1166,456,679,672,673,678,684,690,828,934,1206,1207,1208,1214,1221,1239,2208,2241,2124,2377,2381,3310,3987,4834,4914,5771,6803,7890,8844,9052,4104,10013,10017,10023,10026,10027,10039,10044,10129,10159,10178,10180,10199,10207,10231,10286,10290,10808]'),(499,65,58,583,1,'Bright / Optimistic','[1146,1157,1022,502,1728,408,410,379,1147,1159,1161,1630,1633,1641,1647,1645,1644,450,451,462,466,473,474,487,478,470,657,643,702,708,807,829,966,958,853,848,881,888,889,893,895,896,897,898,900,902,1202,1299,1308,544,568,569,583,1226,1270,1281,1288,1618,606,611,1695,1683,1665,1706,1105,1106,1108,2036,2171,2187,2182,1886,2033,2188,2240,2215,2222,2227,2256,2130,2136,2142,2158,2159,2204,2152,2242,2286,2298,2318,2327,2406,2649,2652,2657,2660,2663,2665,2670,2671,2672,2674,2686,2687,2693,2695,2564,2547,2558,2597,2600,2777,2799,2851,2821,2832,2752,2739,3037,3039,3071,3068,3056,3242,3235,2861,2863,2864,3270,2374,3328,3535,3545,3620,3608,3592,3582,3560,3301,3334,3339,3646,3662,3365,3364,3366,3367,3369,3371,3372,3375,3377,3378,3379,3381,3382,3383,3385,3387,3388,3394,3395,3396,3397,3398,3399,3403,3404,3416,3417,3419,3423,3425,3434,3435,3436,3438,3439,3442,3443,3363,4194,3739,3446,3458,3473,3483,3488,3492,3509,3512,3515,3519,3528,3533,3970,3982,3983,3992,4574,4612,4448,4443,4447,4450,4552,4551,4549,4543,4542,4541,4536,4534,4527,4526,4634,4639,4676,4673,4668,4954,4955,4956,4957,4983,4986,4988,4990,4992,4995,4996,4464,4467,4468,4476,4479,4485,4489,4497,4512,4515,4517,5072,4242,4221,3095,2949,4837,4914,5014,2640,2479,5594,5598,5617,5622,5626,5636,5666,5687,5493,5494,5495,5543,5544,5691,5757,5546,5549,5550,5553,5566,5569,5109,5212,5181,5573,5585,3746,5017,5844,5908,6112,2471,6457,6467,6469,6470,6473,6474,6478,6484,6488,6490,6494,6500,6501,6503,6507,6835,6814,6780,6768,6757,6659,6616,6570,4723,5263,4740,5259,6427,6430,6431,6432,6433,6426,6434,5808,5811,5812,5814,5815,5818,6449,5631,5642,6909,7007,7036,7047,7214,3030,6723,6727,6729,7200,7199,7191,7190,7183,7172,7148,7097,5042,3803,5389,5382,3040,5579,7270,7762,7467,7554,7607,7806,7799,5422,5427,5446,5451,8079,8083,8086,8088,8090,8176,8177,8192,8196,8200,8202,8204,8214,8231,8234,8284,8305,8311,8257,8351,8361,8370,8373,8387,8411,8413,8418,8419,8421,8423,8427,8430,8435,8465,8480,8491,8497,8499,8508,8513,8537,8538,8541,8543,8544,8547,8549,8550,8555,8557,8560,8561,8568,8574,8576,8577,8578,8579,8583,8590,8594,7742,7744,7750,7751,7753,7395,8862,7315,7316,7318,7323,7331,7332,7339,7689,7712,7713,7717,7391,8092,8093,8094,8096,8097,8100,8102,8104,8530,7835,7861,7887,7901,7926,7933,8633,7959,7962,7967,8671,8672,8674,8836,8855,7939,7950,7947,8875,5503,7354,9024,9025,9029,9031,9033,9035,9068,9070,8953,8980,8982,8984,8999,8661,8663,8121,5057,6058,4311,3812,3901,9666,9669,9682,9687,9690,9692,9699,9704,9712,9726,9730,9731,9734,9737,9738,9741,9744,9746,9754,9756,9757,9763,9818,9821,9822,9876,9879,9882,9966,9967,9968,9988,9989,9990,9999,10000,10028,10046,10051,10052,10057,10141,10142,10143,10156,10174,10206,10212,10230,10234,10246,10251,10289,10311,10312,10320,10324,10371,10374,10379,10400,10428,10430,10467,10483,10508,10512,10514,10575,10585,10586,10607,10618,10619,10635,10636,10644,10662,10681,10689,10696,10702,10703,10712,10717,10724,10787,10798,10812,10820,10895]'),(500,64,58,68,1,'Beds / Underscore','[1420,290,328,688,687,833,1211,1212,1215,1221,1239,1242,1250,1272,1274,1294,1297,1298,1844,1847,2081,1648,2024,1883,2224,2650,2655,2677,2712,2413,2463,3283,4221,4840,4916,4937,5771,6487,5259,6350,6357,6367,4297,5375,10013,10018,10026,10031,10032,10039,10169,10180,10194,10197,10199,10207,10211,10231,10233,10236,10277,10286,10380,10381,10429,10454,10681,10702]'),(501,368,36,5,2,'Native American','[2200,2656,2684,8352,8626]'),(502,367,36,0,2,'Mzansi Collection',NULL),(503,66,58,51,1,'Celebration','[355,1340,1308,593,602,600,2188,2189,2240,2225,2239,2258,2125,2133,2192,3618,3615,3463,3483,4548,4544,4391,4481,4520,3187,2420,2421,5602,5629,6466,6472,6560,6563,590,5020,8240,8267,8268,8279,8485,8520,7818,7864,9400,9510,9579,9671,10173,10262,10350,2261]'),(504,70,58,186,1,'Dance Club','[1074,167,1103,1104,499,500,502,506,515,519,355,1711,1827,1163,1164,1339,1342,1375,1600,1606,1608,1666,1686,1707,1675,1309,2037,2702,2710,2391,2604,2619,2630,2542,2543,2549,2559,2581,2536,2541,2568,2601,2564,2582,2558,2579,2745,3155,3313,516,3615,3590,3293,3346,4187,4579,4548,4397,4480,4493,4841,4417,4418,4421,4422,2640,2689,2473,5879,6459,6465,6461,6466,6473,6475,6496,6497,6499,6505,5251,6435,5350,5337,5326,5319,4429,4431,7421,7789,7795,7808,5403,5410,5412,5414,5415,5418,5419,5420,5421,508,5452,5454,5459,5476,8173,8221,8250,8264,8267,8287,8291,8293,8305,8323,8324,8358,8363,8442,8481,8859,8652,7691,7365,7366,7369,7371,7373,7376,7377,7380,7383,7384,7385,7386,7387,7388,7390,7871,7914,8973,9378,9432,9441,9543,9703,9708,9710,9713,9860,9928,9934,9935,9936,9938,9940,9941,9942,9943,9945,9946,9947,9948,9949,9950,9952,9953,9956,9957,9958,9960,9996,10000,10009,10011,10015,10016,10018,10027,10053,10055,10056,10058,10282,10676,10726]'),(505,67,58,30,1,'Cheese / Kitsch','[294,1152,890,1740,2274,2286,4644,4465,4474,4221,3682,3104,2367,4387,6453,4435,4433,4432,4430,4429,4428,4427,4434,4431,4436,7237,5454,7335,10306,5456]'),(506,71,58,444,1,'Dark','[158,1075,1712,383,384,385,388,390,56,472,759,904,770,727,1305,1849,2043,2047,2051,1658,1682,1671,1651,255,280,263,262,260,2038,2023,2029,1111,2264,2647,2655,2662,2664,2668,2673,2703,2704,2707,2728,2621,2635,2638,2644,2556,2567,2530,2557,2602,2606,2607,2626,2552,2560,2562,2563,2528,2588,2592,2594,2599,2605,2614,2629,3239,3135,3145,3314,3029,3614,3567,3299,3303,3306,3347,3348,2113,3638,4189,3855,2443,2474,2428,2414,3973,3974,3975,3986,4197,4198,4202,4414,3295,4532,4638,4415,4494,4495,4503,4505,5060,4209,3115,3086,2931,2886,4755,4756,4763,4773,4781,4790,4795,4806,4809,4821,4870,5007,5013,4978,4961,4966,4967,4968,4972,4949,4948,4944,4946,4937,4936,4934,4928,4416,4420,4422,4423,4424,4425,4426,2608,334,2419,2424,2429,2444,2435,2456,2457,2468,2445,5016,2452,2477,2492,2466,5684,5668,5486,5487,5488,5490,4975,3751,4438,2478,2469,2459,2447,2439,2434,7057,7017,4732,5268,5267,4739,5943,5949,6064,5644,5645,5649,5667,5677,6544,6870,6938,6958,5951,5955,5962,5965,5971,5977,5981,5983,5987,5988,5989,5998,6001,6002,6006,6009,6013,6016,6017,6021,6024,6033,6036,6140,6143,6146,6150,6157,6160,6164,6171,6175,6179,6188,6191,6193,6198,6202,6208,6215,6216,6224,6225,6228,6231,6234,6240,6244,6257,6261,6265,6274,6278,6288,6307,6417,6413,6410,6406,6402,6401,6320,6327,6334,6343,6357,6375,6378,6381,5049,4411,4435,4433,5366,5383,5380,8064,7597,7619,7791,7792,7793,7794,7796,7797,5402,5405,5406,5407,5413,5429,5430,5432,5434,5440,5442,5443,5444,5445,5461,5462,5465,5476,5484,8179,8182,8189,8206,8210,8224,8225,8226,8227,8235,8238,8273,8297,8308,8309,8344,8347,8389,8390,8391,8397,8403,8407,8410,8422,8451,8452,8466,8484,8510,8558,8562,8564,8565,8566,8567,8587,7320,7324,7330,7724,7681,7684,7703,7705,7710,7716,7720,7377,7378,7732,7739,7741,8048,8049,8051,8061,8535,7814,7865,7868,7942,7953,7949,9020,9034,8993,9156,9324,9346,9483,9519,9522,9646,9648,9811,9813,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9849,9852,9873,9875,10015,10035,10054,10058,10066,10073,10157,10167,10179,10183,10188,10189,10203,10209,10210,10217,10227,10229,10240,10245,10248,10253,10255,10257,10259,10264,10267,10268,10270,10271,10272,10276,10281,10293,10299,10300,10302,10304,10308,10316,10321,10322,10331,10335,10345,10348,10349,10359,10360,10378,10392,5438,5941,5942,9872,10878]'),(507,69,58,30,1,'Cumbersome / Plodding','[671,926,1274,1297,1578,2029,3265,3743,3462,5008,4425,2425,5610,5264,4717,4738,5276,4693,4699,4698,4690,4688,6338,7293,8858,7675,8058,7960,8621,10379]'),(508,68,58,79,1,'Cold / Barren','[1182,296,1721,380,56,759,750,3991,4415,2931,2456,1100,2485,4717,4738,4727,4695,6300,6406,6324,6327,7597,7619,5432,5440,5443,5462,8189,8273,8274,8309,8310,8347,8395,8397,8424,7320,7680,7715,8059,7854,7917,7921,8615,7954,7730,9051,9058,8967,8969,2126,8125,4358,4329,4322,3773,3811,3820,3822,3853,3866,4083,4165,4171,79,9161,9191,9371,9395,9859,10172,10177,10226,10277,10280,10291,10373,10384,10392]'),(509,72,58,0,1,'Dawn',NULL),(510,73,58,27,1,'Drama (General)','[1550,1799,24,1302,1845,2072,1678,2251,2669,3280,3282,3286,4940,2455,2492,2462,5644,5442,9050,9052,9053,9067,10096,10215,10275,10390,10396]'),(511,74,58,152,1,'Dramatic','[292,314,320,324,513,514,339,330,1710,1841,1826,386,387,388,391,397,1187,1148,1191,1638,1167,34,1337,722,781,733,727,1301,1210,2043,1691,281,2176,2175,2174,1127,1125,1119,2253,2209,2207,2398,2399,2403,2407,2666,2595,2626,2552,2553,2529,2627,2484,3470,3288,3287,3282,3283,3284,3286,4451,4632,4633,4499,4808,5008,4959,4960,4971,4972,4973,4950,4948,4943,4929,2435,2491,2430,2431,2448,2451,2490,5681,7068,5265,5272,4700,4724,4725,5283,5285,4731,4705,4720,5273,4696,4694,5274,4722,5674,6685,6879,6949,5989,6002,6006,6041,6155,5364,5387,5384,8070,8063,5484,8368,8369,8404,8510,8581,8593,8595,7743,7752,7329,7338,7722,7728,7688,7696,7697,7702,7814,7858,7909,7921,7940,7941,7512,9299,9303,9312,9403,9549,9574,9962,9963,9964,9965,10204,10391,10396,10667]'),(512,75,58,145,1,'Dream / Heavenly / Flight','[504,509,517,522,403,389,1154,1179,1352,1335,595,642,646,666,665,757,806,812,816,828,934,967,982,906,1107,283,1110,2187,1115,2404,2385,2602,3318,3321,3322,3310,3539,3558,3650,3862,2412,2413,3969,4442,4389,4642,4533,4635,4390,4500,4506,4852,5009,5492,5236,5123,6068,2486,4711,4736,5282,5286,5288,4730,4729,5633,6314,5360,5478,5390,5374,8073,8071,7665,5458,5460,5474,8074,8076,8078,8239,8328,8376,8406,8473,8497,8536,8553,8555,7745,7326,7328,8865,8654,8655,7699,7709,7711,7715,7393,8052,8053,8054,8057,7885,8673,8612,8613,8616,8618,8619,8623,8624,8625,8628,8832,8834,8842,8843,9070,9099,6063,4124,9165,9322,9346,9353,9354,9369,9310,9692,10025,10052,10104,10160,10181,10212,10217,10223,10234,10249,10274,10290,10343,10575]'),(513,77,58,3,1,'Drone','[1190,10029,10162]'),(514,76,58,490,1,'Driving / Exciting / Exhilarating','[1168,289,300,301,302,318,512,342,381,408,409,410,411,1151,1633,1646,1813,1339,1342,1344,1375,450,451,456,462,473,474,487,651,849,854,857,864,866,871,891,893,542,560,565,575,577,583,587,1286,1594,1596,1602,1604,1610,1612,1614,1617,1618,1620,1621,1626,1669,1692,1701,1703,1683,1688,1706,2036,1884,2017,2165,2163,2222,2227,2258,2132,2133,2204,2148,2327,2356,2396,2404,2405,2649,2651,2656,2660,2671,2672,2674,2677,2678,2679,2698,2705,2716,2709,2706,2387,2727,2545,2620,2547,2535,2846,2841,2857,2745,2739,3053,3042,3251,2861,2862,2863,2865,2867,2868,2869,2870,2871,3270,3272,3324,2259,3328,3537,3541,3542,3545,3618,3605,3599,3593,3592,3586,3580,3578,3574,3573,3571,3569,3565,3557,3556,3554,3345,3332,3339,2099,2101,2103,3630,3642,3658,3662,3666,3368,3385,3386,3402,3405,3407,3408,3411,3412,3420,3426,3427,3430,4184,4187,3732,3446,3463,3473,3483,3488,3515,3524,3983,573,4608,4618,4627,4552,4543,4539,4538,4527,4526,4639,4397,4951,4952,4953,4954,4955,4956,4957,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4453,4456,4464,4476,4481,4485,4493,4497,4508,4513,4514,4516,5094,5072,4204,3704,3693,3670,3174,3095,3076,2913,2904,4419,1700,2420,2421,2440,5594,5598,5602,5757,5560,5109,5137,5150,5170,5196,5571,5585,3751,5844,5888,6132,6092,2417,2441,6460,6465,6462,6458,6472,6475,6480,6481,6483,6486,6493,6496,6500,6505,6506,6757,6673,6659,6616,6605,6570,6561,6566,6998,7027,6428,6429,6430,6431,6432,6433,6426,6434,5794,5800,5807,5808,5818,5631,6909,6978,7047,7191,7148,7134,7120,7097,5578,590,5028,3803,5365,5391,5387,5379,5020,3040,8068,7224,7246,7259,7270,7302,7766,7421,7444,7498,7467,7476,7487,7586,7641,7652,7607,7630,7788,7795,7810,7798,5421,8081,8166,8173,8181,8196,8205,8211,8221,8234,8240,8250,8258,8264,8268,8269,8270,8277,8279,8287,8288,8312,8320,8257,8323,8324,8334,8338,8340,8343,8345,8346,8351,8358,8361,8363,8387,8393,8396,8411,8413,8417,8418,8425,8430,8437,8438,8442,8445,8460,8465,8481,8485,8492,8499,8506,8513,8520,8550,7751,7753,8859,8862,7316,7323,7333,7334,7335,7339,7336,7689,7694,7698,7713,7717,7671,7672,7369,7385,8092,8093,8094,8096,8097,8101,7733,7735,7737,8047,8530,8606,8607,7818,7835,7871,7883,7887,7893,7914,8633,8635,8637,8646,7958,7959,7961,7962,7965,8674,8831,8869,8870,8875,7358,9041,9010,8933,9407,9680,9682,10001,10052,10169,10182,10196,10225,10230,10288,10347,8528,10444,10472,10514,10652,10658,10689,10703,10712,10729,10766,10774,10787,10794,10838,10846,10852,10870,10895]'),(515,78,58,98,1,'Exotic','[1558,243,1022,308,1834,406,966,960,896,1233,1251,1253,591,603,594,611,614,615,616,2073,1668,2188,2189,2190,2255,2136,2195,2157,2192,2409,2686,2720,2546,2592,3072,2374,3329,3535,3542,3613,3576,3572,3298,3337,4183,3860,3864,4545,4677,4672,4392,4509,3223,4837,4905,2416,2418,5666,5489,2442,4716,4715,5843,5663,6718,6735,6736,6397,7190,7162,5394,5378,8072,8066,7432,7574,5410,5424,5455,8588,8856,7725,7714,7372,7385,7822,7851,7872,7880,7897,7906,7912,8630,8626,9552,10038,10301,10513]'),(516,79,58,57,1,'Fantasy','[108,1830,1166,475,655,671,673,812,977,918,967,956,982,906,1212,1214,1215,1699,1656,1657,1667,1685,1689,1694,1708,1891,2184,2020,3160,4466,6518,4711,4701,5282,5285,5286,4720,5273,5276,5275,4721,4704,4726,8069,5474,5477,8184,8213,8321,8657,7687,7675,8054,8847,8851,7527,10080]'),(517,80,58,81,1,'Frantic / Busy','[1101,1102,1103,1104,332,1137,1153,466,477,864,869,1606,604,617,618,619,621,1699,1688,359,363,2017,2167,2162,2148,2220,2228,2229,3034,3613,3593,3585,3557,3302,3658,4193,3857,3508,3524,3977,4457,4486,2904,4882,4893,4965,4938,361,2420,2421,6563,6566,5945,5947,5950,6066,6988,5966,6028,6288,6394,7120,5319,4412,5391,7498,5409,5416,7686,7700,8605,7871,7883,7893,8634,8635,7958,10197,10309,5456,5438]'),(518,81,58,156,1,'Funny / Comedy','[1175,249,319,322,503,328,1197,1353,1389,468,470,890,1300,1740,1702,1672,2019,2217,2150,2151,2152,2154,2155,2157,2167,2866,3536,3538,3602,3597,3568,3735,3740,3743,3857,3863,3497,4612,4644,4546,4398,4399,4989,4465,4483,4491,4498,4511,4521,3693,3682,3104,2367,4840,4963,4964,4965,4942,4931,5573,6495,6648,6518,5793,5795,5796,5800,5801,5802,5804,5806,5807,5809,5810,5811,5812,5813,5814,5816,5817,5819,7164,7120,5037,7237,7773,7630,5403,7334,7335,8101,8529,7816,7839,7847,7864,7883,8630,8634,9018,9029,8662,8664,8123,5057,5302,5341,5107,5108,9323,9343,9362,9368,9391,9401,9402,9409,9467,9495,9496,9497,9498,9509,9512,9524,9534,9553,9565,9671,9672,9676,9677,9678,9679,9685,9796,9799,9800,9806,10111,10112,10113,10114,10125,10147,10176,10263,10332,10346,10352,10357,10365,10368,10634,10860,10868]'),(519,97,58,147,1,'Peaceful / Pastoral','[1181,340,1830,1833,1628,690,806,817,934,855,1306,283,274,1112,2032,1821,2185,2178,1881,2199,2401,2724,2723,3037,3031,3544,3374,2411,2481,3284,4389,4642,4558,4535,4531,4635,4455,4458,4500,4506,5009,2475,2464,2436,5606,5675,5491,5589,4750,4742,6068,2471,5278,4697,4702,4736,5282,5287,5288,4731,4719,4729,4704,4737,4715,4686,5105,5843,6710,6719,6313,5360,5362,5478,8062,7769,7566,7664,7668,5399,5424,5425,5433,8352,8376,8473,8536,8655,7699,7711,7718,8057,8534,7862,8645,8613,8617,8832,8834,8843,7355,9027,9028,7080,7089,7091,6753,6739,6747,4077,4082,4124,9123,9126,9157,9165,9171,9179,9380,9393,9395,9428,9429,9430,9431,9435,9477,9478,9485,9504,9566,9858,9863,9969,9984,9998,10042,10187,10192,10260,10269,10327,10395,10399,571,10575,10607]'),(520,82,58,239,1,'Ghostly / Eerie / Spooky','[1176,1182,1183,296,299,304,309,320,523,338,339,329,337,1721,1823,1825,1829,1843,1838,1824,380,383,384,385,386,387,390,391,395,1178,1185,1190,1184,56,1799,970,904,727,1305,1849,2047,2051,1651,2038,2029,2398,2646,2647,2655,2704,2606,2563,2729,2482,2474,3967,3974,3975,3996,3997,4209,4755,4806,5008,5013,4948,4938,4936,4932,4928,4424,4426,2419,2424,2429,2450,2435,2456,2457,2468,2461,2452,2477,2466,5684,5683,1100,2459,2423,6518,4732,5269,5268,5267,4739,4734,4718,4705,4727,4712,4684,5949,5645,5951,5960,5983,5987,5988,5990,6002,6006,6013,6016,6033,6036,6143,6160,6164,6175,6183,6191,6195,6198,6216,6224,6225,6231,6234,6244,6278,6295,6300,6304,6307,6417,6320,6324,6343,6353,6361,5370,5383,8067,8064,7619,7796,5407,5430,5432,5434,5462,5466,8210,8308,8395,8410,8424,8451,8459,8466,8539,7325,7326,7319,7320,7330,7724,8650,7680,7681,7683,7685,7692,7701,7703,7704,7706,7707,7716,7720,7741,8049,8050,8059,8060,7908,7932,8631,8632,8615,8848,7953,7952,7949,7526,7730,9050,9062,9066,9067,9003,3821,9348,9349,9350,9351,9352,9406,9481,9482,9556,9567,10157,10167,10172,10179,10183,10209,10210,10218,10253,10254,10264,10268,10270,10278,10299,10302,10304,10316,10322,10331,10345,10360,10368,10378,10392,10746,10878]'),(521,83,58,416,1,'Happy / Sprightly / Jolly','[1149,249,342,373,378,381,382,379,1152,1165,1640,1641,1647,1645,1644,1375,467,861,865,871,888,889,895,897,900,1299,1665,1656,1672,2171,2177,2182,2183,2240,2221,2225,2231,2125,2133,2166,2150,2156,2286,2653,2656,2670,2695,2597,2600,2583,2764,2799,2846,3052,3260,3313,3535,3537,3574,3564,3560,3553,3291,3298,3300,3301,3346,3365,3364,3366,3367,3368,3369,3376,3377,3378,3380,3382,3385,3386,3391,3393,3394,3396,3397,3402,3407,3408,3411,3412,3415,3416,3418,3421,3428,3429,3430,3439,3441,3363,4194,3740,3863,3463,3492,3497,3509,3513,3519,3528,3970,3992,4584,4594,4444,4446,4552,4551,4546,4544,4543,4542,4536,4528,4523,4634,4391,4392,4393,4400,4957,4982,1639,4481,4485,4489,4510,4513,4514,4517,4521,5072,3693,3211,3187,3174,3104,3076,4963,2034,2418,2440,5617,5622,5626,5629,5636,5687,5493,5543,5109,5212,5137,5150,5181,3746,5856,5888,5908,2417,6457,6460,6465,6462,6458,6466,6467,6469,6470,6474,6484,6486,6494,6499,6506,6835,6814,6780,6648,6560,6561,6562,6563,6566,4723,5263,4726,6427,5793,5794,5804,5805,5810,6978,7007,7036,7214,3030,7134,5028,5042,5037,5382,7259,7762,7766,7773,7554,7574,7607,7799,7798,5417,8200,8204,8205,8211,8231,8240,8258,8264,8267,8269,8270,8277,8279,8284,8288,8293,8312,8334,8361,8393,8396,8425,8427,8435,8438,8445,8460,8492,8506,8508,8513,8520,8550,8561,8577,8579,8583,8588,8590,7334,7694,7698,8093,8094,8096,8097,8101,8608,8864,7811,7816,7822,7839,7845,7847,7849,7861,7901,7912,7926,8637,8647,7959,7961,7967,7955,5499,7341,7347,7351,9018,9024,9029,9032,9035,9041,8662,8664,6739,6745,6746,6748,3812,3941,4041,9130,9175,9356,9362,9368,9305,9307,9309,9315,9316,9318,9319,9321,9388,9399,9400,9409,9414,9425,9451,9456,9460,9467,9468,9469,9475,9476,9487,9490,9491,9495,9496,9512,9515,9524,9525,9526,9535,9538,9543,9575,9666,9738,10012,10051,10113,10114,10115,10116,10118,10120,10121,10122,10125,10126,10127,10128,10129,10130,10131,10139,10140,10141,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10173,10176,10198,10333,10375,10394,2261,10428,10430,10459,10466,10467,10483,10513,10613,10618,10635,10636,10644,10652,10658,10662,10717,10718,10727,10798,10812,10820,10830,10838,10862,10870]'),(522,84,58,112,1,'Heroic / Courageous','[1145,1168,291,501,514,1726,1824,392,393,399,1144,1638,2058,2400,2402,2403,3317,3584,3855,3275,4547,4539,4460,4499,4502,5084,3200,5652,5488,6847,6631,6920,6929,7068,4707,4706,5281,4713,5284,5640,6508,6528,6552,6701,7409,7399,5395,5396,5397,5399,5400,5429,8184,8224,8226,8229,8244,8292,8328,8341,8404,8408,8433,8450,8455,8458,8476,8593,8114,8116,8651,7693,7719,7858,7909,8629,7938,7939,7944,7358,8950,8958,8986,8137,5931,10066,10201,10204,10237,10250,10255,10261,10303,10330,10339,10361,10379,10383,10387,10389,10414,10495,10496,10497,10498,10548,10577,10584,10585,10603,10630,10861]'),(523,376,36,6,2,'South Africa','[4675,4673,4674,4668,4677,4672]'),(524,85,58,61,1,'Horror','[299,1650,5684,2423,4733,4727,4684,5945,6065,5955,5968,5990,5994,6009,6028,6036,6166,6195,6234,6240,6244,6285,6295,6300,6401,6330,6353,5380,7796,8319,8424,8451,8539,8558,7325,7319,8650,7685,7692,7703,7932,8632,8615,7949,7526,4114,9355,9357,9416,9417,9418,9556,9557,9564,9567,9608,9986,10167,10179,10242,10878]'),(525,86,58,64,1,'Hot / Desert / Tropical','[325,354,353,352,351,349,348,345,344,343,341,1834,1171,591,2255,2136,2138,2157,3613,3577,3563,4546,4544,4524,4637,4672,4484,306,2416,2483,5659,5856,2442,6594,5819,5663,7109,5394,8066,7780,7432,7797,8352,8375,8588,7725,7851,8626,8118,10013,10080,10165,10168,10186,10190,10198,10229,10279,10280,10354,10366,10372,10879,10889]'),(526,88,58,496,1,'Inspiring / Stirring','[254,275,298,324,504,509,517,518,521,522,1132,1710,1714,1718,1716,1724,1735,1835,374,375,382,404,401,403,402,389,1154,1179,1189,1148,1144,1191,1195,1193,1637,1167,1188,1806,1813,1352,1335,476,595,646,650,658,660,666,657,643,636,639,647,651,654,664,665,701,722,723,726,739,785,786,799,800,807,811,816,821,839,918,937,938,943,944,948,954,963,969,967,959,956,965,970,853,855,870,874,884,891,975,903,794,781,740,732,565,567,585,1211,1216,1219,1220,1232,1237,1242,1228,1267,1287,1293,1295,1298,1598,1621,1624,603,2058,1398,1661,1690,1683,1663,1657,1667,1678,1691,1708,1107,274,276,1109,1134,2024,1886,1119,2215,2236,1120,2153,2144,2146,2199,2200,2395,2396,2399,2402,2404,2405,2406,2408,2658,2694,2722,2721,2611,2632,2643,2593,2613,2573,2829,2856,3250,3242,3317,3318,3320,3321,3322,3323,3325,3327,2259,3315,2223,3539,3600,3595,3583,3574,3566,3562,3561,3558,3555,3332,3335,3338,2094,2099,2103,3370,3381,3399,3406,3410,3424,3429,3433,3437,4182,3727,3732,3739,3458,3983,576,550,3276,2526,4589,4442,4444,4452,4642,4547,4533,4523,4676,4674,4677,4670,4952,4987,4993,4459,4461,4467,4468,4470,4475,4512,4515,4519,4522,4904,4905,5011,4959,4960,4962,4969,4930,4977,4679,306,2018,1155,2475,2479,2449,5606,5659,5489,5491,5492,5495,5544,5691,5734,5549,5550,5557,5559,5564,5565,5566,5569,5123,5572,5583,4742,6112,1336,2486,6463,6464,6461,6471,6477,6478,6485,6488,6490,6491,6493,6503,6504,6507,4700,5281,4720,4730,5273,5275,4721,4696,4728,5798,5820,6445,5843,5633,5674,6552,6685,6692,5328,5479,5363,5365,5391,5387,5379,5374,5368,5385,8073,8072,8071,8069,8068,7409,7444,7399,7554,7566,7790,7807,7806,7800,5395,5396,5397,5399,5414,5422,5446,5447,5458,5467,8074,8079,8083,8085,8167,8176,8177,8180,8192,8209,8213,8214,8218,8222,8229,8242,8245,8301,2143,8352,8354,8381,8383,8384,8386,8406,8418,8419,8423,8437,8443,8455,8458,8462,8463,8474,8476,8477,8480,8491,8538,8541,8549,8555,8595,7397,7326,7317,7318,7323,7331,7339,7336,8865,7729,8114,8116,8649,7709,7674,7372,7815,7876,7877,7890,7897,7906,7956,7960,7965,8668,8669,8670,8671,8673,8614,8618,8620,8625,8840,8841,8842,8844,8850,8851,7943,7948,7947,7945,7509,8866,8870,8871,8873,5497,5501,5503,7354,9026,9036,8955,8976,8989,9006,8125,6055,6059,6060,6061,6063,9132,9138,9154,9161,9164,9167,9175,9313,9686,9696,9709,9734,9748,9808,9818,9959,10055,10056,10156,10234,10246,10288,10289,10400,10425,10429,10430,10497,10498,10508,10514,10548,10585,10586,10618,10619,10630,10681,10702,10703,10727,10798,10838]'),(527,87,58,24,1,'Hypnotic','[679,680,688,689,672,684,685,687,690,707,757,787,812,817,982,750,749,1,3125,3140,2886,9472,9871,10030]'),(528,90,58,197,1,'Laid Back','[1420,1194,259,1558,418,293,316,1831,377,1160,1635,1634,1643,1632,1636,1341,672,673,687,822,833,930,952,901,1222,1276,1279,1280,1294,2057,2093,2078,1662,1663,1704,1705,1670,1654,281,2035,2211,2160,2191,2193,2206,2241,2233,2124,2141,2161,2195,2234,2347,2680,2700,2701,2654,2375,2726,2590,2537,2575,2603,2596,2609,2577,2582,2533,2534,2615,2616,2631,2636,2639,2566,2572,2570,2837,3307,3035,2254,2379,1676,3331,3342,3621,3617,3598,3587,3576,3570,3550,3646,4189,3735,3356,4200,4386,4555,4550,4524,4636,4637,4675,4670,4394,1681,4462,4482,4488,3717,3223,1155,2476,5675,5671,5771,5548,5573,5019,5866,6084,2467,2458,6789,4709,5819,5839,6970,6718,7199,5578,5314,5050,4352,5362,5388,5381,5369,5367,5378,5392,7784,5428,5436,5448,8076,8086,8429,8431,7336,7682,7709,7721,7673,7392,8105,7815,7881,7963,8612,8616,8622,8627,8836,8837,8838,8839,8841,8845,8850,8851,8852,8853,7349,9097,8975,7080,7090,6062,4064,4168,9684,9861,10033,10057,10181,10206,10213,10236,10256,10279,10366,10372,428,10808,10879]'),(529,91,58,287,1,'Light Tension','[158,1550,331,1839,1188,477,479,757,768,834,917,947,981,978,751,1204,1206,1844,621,2043,2051,1658,263,2021,1124,1122,2247,2131,2207,2668,2684,2718,2713,2711,2383,2635,2644,2578,2557,2591,2626,2605,2624,2574,2732,3316,3312,3027,3036,3033,638,3546,3577,3548,3299,3306,3634,3865,2484,2428,3505,3966,3968,3971,574,3282,4202,4451,4549,4478,5060,3115,3086,2886,4790,4808,4855,4866,4959,4964,4966,4939,4943,4946,4936,4682,1673,3609,2608,334,1155,2444,2460,2445,2492,5734,2439,6495,7057,5267,4705,5277,6435,5649,5674,7216,5960,5981,5988,5989,6013,6143,6175,6231,6248,6252,6278,6310,6327,6350,6357,6361,6367,5361,5364,5370,5377,5372,8064,8063,7281,7757,7597,7783,7790,7807,7797,5407,5431,5440,5444,5445,5465,5470,8227,8238,8248,8249,8297,8310,8317,8344,8360,8375,8400,8410,8484,8518,7746,7748,7332,8656,7728,8112,7681,7683,7686,7687,7704,7706,7710,7714,7716,7379,7381,7390,7733,7739,8050,8060,8609,8611,7868,8630,8644,8668,8669,8617,8833,8844,8846,7518,7730,7344,7362,9020,9037,9051,9052,9057,9063,8961,8993,9003,8137,8118,7082,7092,6057,6063,5786,5790,5791,5343,3811,3820,3853,4103,4167,9322,9340,9342,9343,9344,9345,9347,9348,9349,9350,9351,9358,9360,9366,9367,9375,9379,9381,9307,9397,9404,9406,9424,9442,9448,9480,9509,9516,9522,9542,9553,9736,9797,9800,9801,9803,9855,9873,9874,9881,9924,9926,9965,9993,10032,10035,10043,10096,10168,10178,10196,10211,10215,10218,10227,10229,10257,10271,10276,10278,10293,10309,10344,10348,10349,10357,10369,10378]'),(530,89,58,102,1,'Jaunty / Whimsical','[1194,418,322,503,335,1159,1197,1152,1174,1641,1644,467,900,1740,559,1268,1271,1672,2183,2231,2239,2150,2832,3536,3538,3553,3735,3740,3859,3861,3863,4541,4391,4393,4398,4399,4400,4491,4521,3682,3076,4963,4964,5626,6648,6560,6562,6564,6565,6568,4703,5798,5809,5816,7164,7109,5028,5037,7773,8425,7694,8608,7811,7816,7839,7845,7847,7849,7864,8647,10017,10115,10116,10118,10119,10120,10121,10122,10125,10126,10128,10130,10131,10132,10134,10135,10136,10137,10139,10141,10142,10144,10145,10146,10148,10150,10151,10152,10153,10154,10155,10375]'),(531,92,58,41,1,'Luxury / Glamour','[413,521,355,1159,1161,1631,1338,1341,1699,1664,1704,1654,2201,2194,2232,2241,2195,2634,3615,4545,4537,4529,4482,6122,6459,6502,6970,5388,7682,7340,7349,9765,10010,10016,10039,10429,10437,10454,10512,10613,10726]'),(532,93,58,199,1,'Magic / Mystical','[1558,298,509,517,520,335,340,330,333,1718,1716,1826,1833,1834,406,1167,1352,469,471,475,478,595,655,721,977,917,918,943,966,972,956,910,855,861,863,865,981,975,751,729,1739,572,1207,1208,1215,1217,1233,1239,1251,1284,1697,1663,1668,1656,1657,1667,1685,1689,1694,1693,1850,2021,2171,2185,2184,2252,2134,2546,2612,2857,2203,3606,3589,3577,3563,3551,3548,3299,2109,4183,3858,3860,3864,3505,3976,3276,4643,4533,4528,4454,4478,4484,4496,4518,5060,4763,5011,4969,334,2018,2465,2425,2475,2477,2483,5659,5685,5495,5496,5123,4716,5677,961,6304,6310,5394,5378,8073,8072,8066,7432,7667,5455,8232,8375,8395,8856,7701,7704,7706,7714,7372,8050,8051,8610,8864,7815,7880,7906,8645,8673,8612,8614,8616,8618,8623,8626,8628,8833,8840,8842,8845,8846,8847,8848,8854,7355,9026,9099,9098,9051,9057,2126,4022,4023,79,9455,10042,10080,10158,10165,10168,10172,10177,10187,10188,10192,10197,10209,10214,10217,10223,10228,10230,10233,10242,10254,10266,10274,10290,10295,10296,10338,10342,10363,10368,10377,10399,10443]'),(533,95,58,145,1,'Nostalgic','[254,315,316,520,325,353,352,351,349,348,345,344,343,341,347,1719,1837,1832,376,377,1179,1187,1196,1642,1188,1806,642,660,636,647,661,664,692,694,702,716,793,834,933,944,549,548,552,562,563,568,579,1242,1249,1622,597,608,617,619,1398,1660,1428,2253,2206,2257,1118,2135,2149,2658,2667,2708,3256,3327,2214,3538,3865,576,4531,4941,2476,2487,5606,5613,5676,5559,5565,5567,5899,6491,6789,6565,6567,4683,4685,6692,6723,6727,6729,6733,6737,7203,7201,7200,7172,7197,5922,5047,5376,7778,7809,8212,8266,8300,8301,8369,8398,2212,7746,7338,7695,7675,7856,7903,7904,7921,7522,7362,9023,8957,8663,8133,8128,8123,7082,3627,4302,9970,10022,10029,10307,10325,10326,10341,10343,10356,10358,10372,10382,10397,10398]'),(534,94,58,155,1,'Neutral','[1828,930,953,952,856,891,560,1205,1221,1232,1235,1237,1250,1275,1283,1285,1288,1290,1291,1296,613,1659,1684,1707,261,1135,1136,1883,2224,2205,2210,2247,2131,2650,2688,2711,2541,2550,2531,2532,2574,2859,2858,3150,3164,3610,2872,3344,2410,2415,2426,4201,4202,4855,5722,6248,4434,4431,7665,5402,5423,5450,5457,5470,8518,8568,8573,8594,7382,8611,7344,4300,4302,4311,4322,3811,4104,4165,4171,4279,9191,9356,9370,9377,9381,9300,9313,9385,9386,9396,9412,9415,9420,9423,9427,9442,9450,9459,9461,9462,9464,9465,9466,9471,9485,9502,9505,9516,9517,9520,9544,9555,9580,9582,9573,9619,9627,9667,9708,9732,9832,9835,9857,9885,9889,9893,9898,9914,9987,9997,10002,10005,10023,10027,10040,10049,10169,10177,10178,10180,10207,10211,10213,10225,10231,10236,10249,10273,10276,10296,10340,10374,10380,10384,10437]'),(535,98,58,476,1,'Power / Energy','[167,1101,1102,1103,1104,302,305,317,318,499,500,502,506,507,510,511,512,515,519,1711,1727,407,409,411,397,1137,1163,1143,1147,1151,1153,1630,1633,1199,1200,1339,1342,1344,477,866,869,1304,1652,1666,1692,1703,1675,359,363,1309,2037,1884,2165,2147,2209,2207,2204,2652,2656,2659,2672,2673,2692,2696,2716,2710,2706,2619,2630,2542,2549,2536,2551,2547,2539,2745,3251,3239,2868,3272,3319,3324,3034,516,3545,3619,3599,3597,3590,3571,3567,3559,3557,2111,2113,2114,2115,3630,4193,3477,4579,4584,4603,4618,4627,4443,4447,3296,4554,4548,4540,4537,4532,4638,4951,4953,4954,4955,4979,4980,4981,4982,4984,4985,4986,4987,4988,4989,4990,4994,4995,4463,4464,4471,4480,4502,4508,4513,4516,4520,5094,4230,4204,3670,2913,2904,4773,4781,4841,4858,4873,4882,4909,4681,4417,4418,4419,4421,4422,4423,2689,361,2034,5594,5629,5757,5746,5710,5196,5879,6132,6076,2417,2422,2437,2488,6460,6475,6483,6825,6673,6659,6605,6570,6998,7027,5251,6429,6430,5818,5943,5944,5946,5947,5948,5950,6064,6066,6978,6949,6938,6988,5968,5974,6166,6220,6330,6390,2641,5350,5337,5326,5319,4411,4412,4435,4432,4430,4429,4428,4427,5020,7224,7246,7293,7302,7766,7498,7476,7487,7586,7641,7652,7788,7789,7793,7795,7810,7808,5397,5400,5401,5403,5406,5408,5411,5413,5414,5415,5416,5417,5418,5419,5421,508,5471,8081,8165,8166,8173,8181,8182,8185,8186,8187,8190,8208,8211,8221,8225,8250,8268,8270,8276,8277,8282,8287,8291,8319,8320,8323,8324,8334,8338,8340,8343,8345,8346,8354,8363,8391,8396,8415,8417,8433,8437,8444,8450,8459,8460,8472,8474,8481,8504,8545,8546,8554,8557,8563,8567,8574,8580,8586,8591,8859,8860,7316,8113,8117,8648,8649,8651,7691,7698,7700,7365,7366,7369,7371,7381,7383,7384,8110,7735,8047,8048,8056,8607,7818,7893,7914,8633,8634,8635,7961,7937,7951,7946,8870,9020,9023,9024,9025,9026,9030,9034,9036,8662,8950,8953,8965,8977,8987,8993,8997,9010,8933,8661,4317,4362,4329,3901,3954,4010,4060,4070,4084,4094,9130,9132,9138,9154,9175,9193,9194,9340,9367,9304,9317,9407,9414,9441,9457,9458,9463,9471,9515,9520,9527,9529,9531,9535,9537,9571,9575,9576,9577,9578,9660,9668,9675,9693,9697,9699,9701,9703,9707,9714,9716,9719,9724,9728,9731,9737,9744,9754,9759,9804,9805,9807,9810,9824,9825,9826,9827,9828,9829,9830,9831,9870,9878,9967,9968,9979,9978,10050,10056,10159,10175,10225,10347,10362,8528,9872,10418,10500,10524,10539,10551,10587,10614,10668,10669,10729,10737,10746,10760,10766,10773,10774,10787,10794,10846,10852,10889,10895]'),(536,99,58,163,1,'Quirky / Strange','[319,322,503,506,328,1170,1174,1199,1200,1353,1389,466,467,469,470,1300,1271,607,359,360,362,1309,2019,2020,2151,2832,2825,2858,3160,3169,3536,3290,3298,3861,3971,4201,4644,4554,4534,4675,4398,4465,4483,4498,4511,4518,4809,4942,4935,4931,4387,2440,6101,6489,6492,6495,4718,4691,6441,6449,7216,6268,6401,4412,5366,5375,5371,5385,4436,7783,7806,5408,5409,5411,5423,5449,5454,5466,8187,8202,8248,8249,8286,8293,8399,8444,8537,8545,8578,8856,7317,7683,7686,7691,7700,8055,8529,8605,8607,8608,8609,8644,8646,8619,8627,8855,7360,9037,8963,8967,5937,5786,5787,5790,5341,5343,4023,4064,4074,4114,9323,9342,9360,9371,9426,9499,9500,9540,9554,9670,9814,9951,10049,10111,10112,10124,10132,10133,10136,10137,10149,10157,10175,10183,10210,10218,10226,10227,10228,10254,10262,10263,10266,10295,10306,10313,10321,10332,10353,5456,10634,10860,10868]'),(537,101,58,286,1,'Romantic','[1150,1157,1158,416,254,259,308,311,520,1835,403,402,1192,1193,1196,1642,1631,549,562,563,570,580,581,586,589,1254,1281,1284,1615,611,620,1709,1664,1850,1851,1134,1136,1428,2022,2187,2181,1129,1129,2208,2197,2206,2213,2219,2238,2236,2257,1118,2149,2235,2153,2169,2262,2661,2856,2860,2752,3068,3068,3066,3066,3064,3062,3060,3056,3054,3044,2861,2864,2866,2871,3268,3323,3327,3028,3307,3035,3031,2254,3331,3620,3620,3611,3601,3600,3595,3588,3575,3568,3338,2103,3400,3431,3444,4190,3727,3736,3737,3737,3452,3501,3522,3978,3982,3985,566,3289,3277,3278,3281,2526,2527,4196,4589,4641,4442,4445,4446,4452,4388,4389,4413,4536,4670,4956,4981,4993,4470,4470,4390,4484,4501,4509,3223,4840,4904,5012,5015,4971,4930,4977,4679,4680,4680,2454,2432,2432,2472,2449,5609,5610,5612,5613,5614,5611,5611,5685,5671,5496,5544,5699,5546,5549,5553,5555,5560,5562,5564,5565,5583,5591,4750,5866,5899,6084,1336,6479,6479,6481,6485,6768,6561,6562,6564,6565,6567,4685,4689,5270,4740,4709,4703,6445,5658,5658,6879,6885,6892,6453,7214,6733,6735,6736,6737,7203,7201,7199,7183,7172,7162,7197,5922,5047,5479,5363,5376,5374,5579,5587,7785,7786,7809,7804,7803,7803,7801,7800,8180,8188,8212,8218,8222,8228,8230,8251,8283,8296,8299,8300,8304,8318,2143,8370,8385,8385,8477,8503,7742,7744,7745,7747,7749,8857,8857,7395,7397,7317,7726,7727,7729,7729,7682,7712,8095,8095,8098,8098,8100,8102,8104,8104,8105,7908,7956,7963,7965,8670,8830,8835,8837,8841,8852,8853,7945,8871,8872,8874,7731,5501,9392,9548,9561,9569,9582,9762,9765,9766,10046,10274,428]'),(538,100,58,47,1,'Regal / Formal / Majestic','[1191,1195,1668,2025,1120,3584,3566,4446,4447,4547,4539,4460,4461,4499,5652,5640,6508,6528,6536,6552,6701,5479,5365,8209,8229,8292,8350,8476,7939,9445,9480,9503,10041,10190,10204,10235,10237,10239,10240,10267,10269,10303,10314,10328,10373,10383,10389]'),(539,103,58,15,1,'Schmaltz','[1679,1851,2176,2175,2216,2565,3028,3985,3289,3280,2487,4687,8385,7723,7855]'),(540,102,58,189,1,'Sad','[323,1832,1187,1156,706,715,793,840,931,1,563,1682,287,283,270,1131,2031,1126,1125,1122,1121,2669,2675,2681,2638,3246,3326,3311,4186,3470,3979,3980,566,3288,3287,2527,4449,4449,4414,4752,4808,5015,4968,4939,4940,4941,4943,4945,4947,4933,4929,4425,2491,2430,2431,2448,2451,2455,2490,5614,5676,5557,4683,4710,4732,5265,5271,5272,5278,4724,4725,4741,5266,5279,5283,4719,4696,4722,4699,4695,4686,5644,5645,6859,6901,5962,6016,6041,6155,6198,6202,6220,6295,6299,6338,6348,3245,5049,5361,5370,5384,8070,8067,8065,8063,8195,8247,8309,8310,8327,8379,8397,2212,8512,7743,7746,7748,8858,7327,7723,7727,8927,7688,7690,7697,8099,8103,8103,8058,7821,7854,7855,7964,8849,7941,7954,7509,7512,7522,8867,8868,8869,8874,9123,9421,9560,9646,9650,9654,9864,9865,9866,9868,9869,9962,9963,9964,10004,10036,10037,10040,10054,10089,10096,10124,10201,10203,10235,10240,10245,10265,10275,10291,10292,10307,10308,10315,10317,10322,10323,10356,10364,10373,10383,10390,10391,10396,10397,10398,571,10495]'),(541,107,58,127,1,'Simple / Sparse / Minimal','[418,960,1222,1272,2078,2073,1704,1693,2186,1121,2248,2198,2199,2592,3130,3155,3160,3164,3169,3588,3587,3297,3373,3384,3389,3390,3392,3393,3401,3414,3417,3439,4186,2411,2410,3522,3966,3969,3281,4448,4554,4831,4855,5010,5012,5013,4947,4933,4931,4928,4682,2018,2444,2446,2454,2455,5612,5493,5541,5548,5236,2485,2442,6464,6471,6489,5265,5270,5278,4708,4741,4717,4716,4715,5105,5106,7216,6313,6348,6350,7109,7197,5381,5377,5373,5372,5367,8062,5430,8078,8163,8230,8283,8318,8462,8511,8540,8543,8544,8560,8561,8573,8574,8579,8590,7750,7315,7327,7332,7690,7707,7718,7379,7382,8052,8534,8864,7872,7917,8852,7347,7360,7079,9732,10291,10296,10382]'),(542,106,58,82,1,'Sexy / Erotic / Sleaze','[1831,1160,1635,1634,1632,1636,1341,2057,2035,2026,2226,2237,2141,2164,2338,2543,2590,2569,2589,2534,2598,2615,2631,2636,2639,2566,2572,2585,2570,3309,1676,3329,3342,3621,3611,3551,4386,4545,4538,4636,4474,4482,3717,2949,2640,5548,5019,6122,2458,6502,6803,6594,5277,5839,6736,7162,5578,7754,7666,7669,5428,8429,8431,7721,7388,7880,7881,8622,8830,8835,8839,7731,4022,9763,9792,10010,10018,10038,10042,10043,10418,10500]'),(543,105,58,41,1,'Sea / Water','[123,275,1628,960,1290,1292,2078,1891,2190,2192,2298,3576,3570,3337,3402,2438,4534,1639,4475,4514,2489,2452,2418,5622,5636,4438,5856,6458,6486,6504,4692,5814,6252,5389,7574,7664,7667,7393,8105,8839,10200]'),(544,108,58,77,1,'Slow Motion','[1181,326,327,1830,1628,655,679,680,688,689,678,685,701,787,926,2347,3265,2470,4445,4945,2464,2436,5675,5691,5236,2458,6471,6803,6583,4692,4710,4697,4708,5286,5264,5276,4693,4694,5274,4698,4690,6859,6183,6338,6367,5478,5390,5381,5392,7281,7805,7668,5448,5469,8078,7328,8655,8656,8657,7699,7702,8059,7862,8617,8620,8621,8622,8623,8624,8832,8838,8843,7527,8955,8975,7079,10249]'),(545,381,36,20,2,'USA / America','[1307,1698,2700,2387,2799,2214,3592,3582,3727,4951,4952,4957,4983,4984,4485,4242,5671,4749,2471,8137]'),(546,109,58,18,1,'Stealth','[4703,6017,6024,6281,6402,6364,6375,6385,5049,5405,7953,7518,10170,10248,10349,10369,10370,10385]'),(547,104,58,147,1,'Sci-Fi / Space','[55,1075,523,329,337,1178,1185,671,768,943,564,1209,1212,1214,605,1648,1891,2648,2562,3135,3140,2412,2415,2453,2463,2470,3968,3971,3973,3990,4198,4199,3295,4466,4522,4790,4852,2457,2489,4975,4438,2478,6492,6497,5271,4697,4701,4702,5269,5268,4733,4718,6193,6195,6274,6288,6290,6313,6406,6349,6364,6378,5337,5308,5390,5408,5411,5417,5422,5431,5437,5441,5444,5447,5449,5453,5464,5466,5467,5468,5469,5470,5471,5472,8213,8214,8242,8274,8276,8282,8286,8297,8360,8400,8443,8444,8537,8538,8540,8543,8544,8545,8546,8547,8568,8578,8586,8865,8112,7687,7713,7672,7382,8053,8054,8055,8060,8529,8530,8611,7890,7928,7933,8646,7958,7960,8668,8669,8672,8619,8620,8621,8834,8846,7951,7950,9345,10059,10104,10160,10174,10182,10188,10199,10226,10340,10384]'),(548,111,58,395,1,'Thoughtful / Reflective','[1150,307,310,311,313,315,316,323,327,347,1719,1837,1198,1156,34,1354,476,646,658,636,661,664,684,692,693,694,701,702,706,707,708,715,716,726,787,793,806,816,821,828,833,834,840,914,927,933,937,938,944,948,954,963,959,846,859,863,792,905,794,749,1,1739,549,541,543,548,552,559,567,578,579,584,588,1273,609,612,615,2068,1398,1649,286,1112,1134,1136,1822,2016,2022,2181,1123,1121,2160,2197,2235,2153,2198,2399,2658,2669,2683,2654,2681,2726,2580,2595,2553,2529,2627,2571,2623,2544,2565,2760,2786,2808,3037,3074,3073,3070,3064,3256,3246,3320,3326,3311,3540,3600,3552,3335,3409,3413,3422,3425,3433,3434,3727,3731,3734,3736,3739,3856,3979,3985,550,3277,3278,3283,2527,4195,4196,4589,4640,4641,4445,4388,4413,4535,4531,4637,4674,4678,4395,1173,4455,4458,4478,4479,4507,4519,4831,4969,4930,4680,2476,2487,2446,2436,2462,2472,2449,5609,5610,5612,5614,5685,5681,5671,5541,5553,5555,5557,5559,5562,5564,5566,5567,5569,5581,5583,5589,4742,5899,6084,1336,6463,6485,6487,6491,6504,6789,4687,4683,4685,4689,4710,5270,5271,4725,5279,5287,5288,4731,4719,4729,4688,5105,5803,5811,6692,6859,6885,6901,6453,6719,6737,6299,6314,7201,7200,5922,3245,5047,4297,5376,5373,5372,5368,5367,5392,5579,5587,8065,7757,7769,7778,7780,7805,5433,5458,5460,8163,8188,8212,8228,8251,8266,8283,8296,8299,8300,8301,8304,8311,8369,8373,8379,8381,8383,8384,8398,8402,8406,8419,8421,8463,8477,8511,8512,8570,7745,7747,8861,7327,7726,8927,7690,8099,8057,8534,8610,7821,7856,7862,7876,7903,7917,8613,8624,8628,8848,8849,8853,7954,7948,7509,7522,7527,8866,8867,8868,8869,8873,8874,5501,7355,7362,7364,9099,9098,9097,9006,8131,7090,5344,3624,3627,4280,4302,3821,9322,9302,9312,9313,9393,9396,9397,9398,9408,9433,9470,9472,9507,9560,9644,9648,9652,9656,9662,9673,9736,9742,9746,9748,9750,9752,312,10034,10041,10158,10184,10223,10233,10241,10244,10245,10265,10273,10292,10297,10303,10305,10308,10315,10317,10319,10320,10323,10325,10326,10334,10335,10344,10351,10358,10380,10386]'),(549,110,58,353,1,'Tension','[108,1176,1177,1183,227,291,314,323,513,338,1712,1727,1829,1840,1838,383,395,405,1143,759,904,769,758,11,1301,1302,1238,1595,1849,1653,1708,255,260,1111,2209,2228,2229,2397,2409,2662,2664,2685,2719,2717,2715,2714,2707,2728,2725,2618,2621,2556,2567,2540,2586,2606,2607,2625,2628,2528,2587,2599,2629,2584,2729,3135,3145,2203,3029,3308,3534,3585,3303,3347,3348,3349,2112,2114,2115,3855,2474,2414,3973,3974,3975,3986,3275,4197,4198,4556,4632,4633,4486,4494,4495,4505,5084,4230,4209,2931,4806,4821,4870,4873,4909,5007,4961,4967,4968,4973,4949,4944,4934,4416,2561,2429,2450,5016,5486,5487,5490,2459,2447,2434,2423,6631,7017,4739,4734,4707,4712,4691,4684,5944,5946,5948,5949,6065,5667,5677,6536,6544,6870,6958,5951,5962,5965,5966,5971,5974,5977,5983,5987,5990,5994,5998,6001,6009,6017,6021,6024,6028,6033,6140,6146,6150,6157,6160,6164,6171,6179,6188,6191,6193,6215,6216,6220,6224,6225,6228,6240,6257,6261,6265,6274,6281,6285,6290,6304,6307,6417,6413,6410,6397,6320,6324,6334,6343,6353,6364,6375,6378,6381,6385,6390,6394,5383,5380,7791,7792,7793,7794,5401,5409,5429,5434,5442,5443,5461,5475,5484,8179,8206,8210,8224,8225,8226,8235,8308,8347,8389,8390,8403,8404,8405,8407,8422,8452,8466,8472,8504,8510,8558,8562,8563,8564,8565,8566,8581,8586,8587,8591,8593,7752,8860,7325,7319,7324,7329,7330,7722,7724,8113,7685,7692,7693,7696,7701,7705,7708,7719,7720,7732,8051,8056,8061,8535,7814,7824,7865,7932,8629,8631,8632,8854,7940,7942,7952,7526,2538,9050,8136,7084,7085,7087,5787,5789,3815,4115,4167,9341,9352,9374,9286,9440,9473,9474,9481,9483,9519,9550,9552,9558,9562,9570,9691,9798,9813,9867,9868,9870,9986,9991,9992,9995,10073,10170,10189,10215,10243,10248,10252,10258,10259,10261,10294,10299,10310,10316,10318,10328,10348,10359,10376,10385,10387,5438,5941,5942,10539,10559,10577,10844]'),(550,112,58,126,1,'Urban','[1074,472,494,1304,2084,2081,1670,280,2247,2347,2668,2702,2718,2727,2560,2859,3033,3294,3344,3654,4598,4603,4675,1681,4462,4493,4503,3115,4752,4756,4809,4858,4870,4893,4916,4978,4941,4946,4937,4418,4419,4420,4423,4424,1673,2460,2445,4976,4749,6101,2485,2469,2467,2447,2439,2434,7057,5277,6435,5649,5314,4411,4427,5377,7783,7790,7808,7802,7669,5402,5412,5415,5435,5436,5445,5448,5450,5452,5459,5465,5468,5473,5476,8227,8248,8249,8317,8344,8474,8484,8518,8565,8652,8654,8112,7705,7366,7371,7373,7376,7377,7378,7380,7381,7383,7384,7386,7387,7388,7390,7732,7733,7737,7739,8535,8605,8606,8609,9988,10031,10034,10044,10054,5941,5404,10667]'),(551,986,58,174,1,'night feel','[108,167,1158,416,413,293,315,1160,1338,475,2093,2084,2081,1697,1662,1664,1705,1670,1654,280,2035,2026,2233,2141,2161,2246,2249,2145,2702,2393,2575,2588,2609,2582,2534,2818,3070,3130,3155,3164,3307,3035,2254,1676,3598,3587,3293,3294,3654,3745,4200,4386,4555,4636,4394,1681,4454,4462,4474,4834,4866,1673,2425,2483,4976,5019,4749,6122,6583,5251,5839,6970,6310,5314,5308,4297,5388,5369,7784,7807,7802,7666,7669,7670,5423,5426,5428,5435,5451,5457,5473,8317,8429,8431,8858,8652,8654,7721,7671,7674,7672,7673,7365,7373,7376,7378,7380,7386,7387,7392,7391,7737,8061,8606,8610,7868,7881,7928,7963,8625,8627,8830,8831,8833,8835,8837,8838,8845,8850,7731,5505,7340,7349,9063,9064,8969,9324,9308,9415,9442,9710,9767,9769,9771,9776,9779,9782,9786,9789,9792,9832,9833,9834,9836,9838,9839,9841,9843,9885,9889,9893,9898,9918,9928,9934,9935,9936,9940,9941,9942,9943,10009,10011,10023]'),(552,114,58,597,1,'Warm / Uplifting','[1420,1146,1149,1150,1157,1158,1175,1194,275,300,301,294,308,313,499,500,507,512,518,342,335,1132,1714,1718,1716,1724,1728,1735,1719,1827,373,374,378,381,382,404,407,408,410,379,401,402,405,1164,1147,1161,1197,1189,1148,1630,1637,1640,1647,1643,1631,1636,1806,456,471,494,650,658,660,657,639,651,654,708,716,723,739,785,799,800,807,811,829,839,963,959,910,846,849,853,848,854,857,859,864,870,871,881,884,889,893,898,899,791,902,732,1202,1299,1308,575,582,585,587,1219,1220,1268,1596,1598,1622,591,607,612,614,620,1649,1701,1696,1703,1709,1665,1688,1706,1105,1106,2037,1884,2250,2201,2190,2194,2147,2227,2232,2243,2221,2255,2258,2123,2127,2130,2135,2137,2138,2140,2142,2158,2159,2166,2148,2246,2245,2400,2650,2657,2663,2665,2670,2682,2695,2377,2389,2554,2622,2632,2576,2577,2633,2764,2777,2782,2792,2799,2805,2812,2752,3039,3073,3058,3053,3044,3042,3235,2214,2374,3313,3032,516,3329,3617,3608,3605,3602,3586,3582,3556,3550,3345,3337,3339,2094,3409,3431,4184,4185,4194,3732,3743,3744,3859,3529,3533,3970,3982,573,550,551,4584,4612,4444,4550,4530,4529,4527,4523,4634,4639,4676,4673,4674,4668,4677,4672,4392,4393,4394,4397,4400,1639,4456,4459,4461,4466,4476,4479,4480,4488,4489,4491,4496,4497,4498,4501,4507,4509,4510,4511,4512,4515,4517,4519,4522,4242,3211,3174,3095,2949,2367,4837,4893,4904,4905,4914,5014,4977,3340,306,2432,2479,2472,5598,5602,5617,5666,5687,5550,5555,5560,5562,5137,5150,5181,5585,3746,5017,5844,5888,5908,6112,6092,6076,2471,6457,6462,6467,6468,6470,6472,6473,6474,6477,6478,6479,6480,6481,6483,6484,6488,6490,6494,6496,6499,6501,6503,6505,6506,6507,6835,6814,6780,6768,6757,6673,6616,6605,4689,4711,4721,4723,4740,4737,4726,5259,6427,6428,6429,6431,6432,6433,6426,6434,5794,5795,5796,5797,5798,5799,5801,5802,5804,5805,5808,5812,5813,5815,5816,5817,5820,6445,6449,5631,6710,6892,6909,7007,7036,7047,3030,6718,6719,6723,6727,6729,6735,7191,7190,7183,7148,7097,590,5042,4377,3803,5389,5382,5373,5371,3040,7237,7259,7270,7754,7762,7421,7444,7467,7641,7630,7785,7786,7788,7810,7804,7801,7800,7799,7798,5410,5419,5420,5427,508,5446,5447,5450,5451,5453,5455,5457,5467,5472,5474,5477,8074,8079,8083,8085,8086,8088,8090,8176,8177,8192,8196,8200,8204,8205,8218,8222,8230,8231,8234,8239,8258,8266,8269,8286,8288,8296,8305,8311,8312,8320,8257,8346,8351,8354,8358,8370,8384,8387,8386,8393,8402,8411,8413,8417,8421,8423,8427,8430,8435,8438,8445,8462,8465,8480,8491,8492,8497,8499,8503,8506,8508,8541,8547,8553,8576,8583,7742,7744,7750,7751,7753,7397,8862,7315,7331,7333,7725,7689,7712,7717,7671,7674,7391,8092,8095,8100,8102,8052,8053,8055,7811,7822,7835,7849,7851,7861,7877,7887,7897,7901,7912,7926,7928,8637,8647,7962,7967,8670,8671,8672,8674,8831,8836,8840,8855,7943,7955,7950,7947,7945,8873,8875,5497,5499,5503,5505,7340,7341,7347,7351,7353,7354,7360,9027,9028,6055,9764,9819,10012,10046,10051,10140,10156,10174,10194,10282,10305,10312,10350,10362,10400,10425,10466,10500,10508,10512,10635,10696,10726,10727,10812]'),(553,380,36,12,2,'Turkey','[2251,2134,2220,2228,2229,2230,2203,4763,4966,4967,2425,2483]'),(554,113,58,3,1,'Violence','[10737,10760,10844]'),(555,1030,58,205,1,'Adventurous/Action','[1145,1168,227,243,1102,291,295,305,321,513,514,515,519,331,332,1712,1726,1727,1824,407,409,392,393,396,399,1137,1151,1153,1144,1646,1799,1813,728,2407,2408,2409,2659,2662,2666,2676,2679,2685,2718,2716,2715,2712,2708,2707,2383,2728,2725,2578,2551,2610,2614,2870,2259,2223,3599,3593,3590,3578,2111,2112,3630,3658,3477,3524,3275,4199,4579,4603,4618,4443,4556,4951,4952,4953,4979,4980,4983,4984,4985,4992,4996,4453,4457,4463,4471,4516,5094,4204,3670,4841,4882,303,5652,5683,5746,5710,5170,5196,5571,5879,6132,2441,2437,6468,6500,6825,6920,6929,7017,6998,7027,5284,4728,6536,6544,6701,6949,6938,6988,5977,7224,7246,7302,7476,7487,7586,7652,7789,7791,5412,5416,5418,8081,8165,8166,8167,8186,8187,8190,8208,8242,8244,8282,8291,8338,8340,8408,8415,8442,8450,8455,8478,8485,8554,8557,8580,7333,7708,8110,7938,7943,7944,7358,8950,8958,8965,8986,9003,9008,9299,9303,9424,9447,9448,9494,9501,9510,9558,9568,9664,9670,10028,10050,10053,10055,10073,10186,10339,10342,10354,10361,10393,288,10443,10472,10496,10524,10559,10630,10852,10856]'),(556,1021,58,13,1,'Ostinato','[1550,5981,6248,6252,6361,7757,7784,7318,7933,7518,5505,7344,79]'),(557,1057,58,177,1,'Melancholic','[310,325,354,353,351,349,1841,1832,377,388,1156,1337,647,692,693,706,715,840,931,552,578,610,2068,2072,1682,1651,286,281,270,1131,2031,1127,1126,1125,1124,1123,1122,2251,2193,2216,2307,2675,2683,2760,3060,3246,3311,3028,3614,3562,4186,3979,3980,566,3286,4451,4413,4414,4678,4395,4991,4752,4950,4940,4947,4933,4929,2430,2431,2448,2451,2490,2462,5611,5681,5676,4687,5272,4724,4736,4741,5266,5279,5283,5285,4722,4699,4695,4688,4686,6685,6901,6041,6140,6155,6202,6208,6299,6348,3245,5361,8070,8067,8065,8189,8195,8232,8238,8247,8327,8368,2212,7743,7748,8861,7688,7695,7697,8098,8103,8058,7854,7855,7904,7964,8849,7941,7512,9068,8133,8131,8128,4077,9740,9760,9970,9971,9972,9973,9974,9975,9977,9981,10022,10036,10037,10041,10089,10119,10163,10235,10241,10283,10287,10292,10297,10298,10305,10315,10323,10324,10325,10326,10327,10337,10341,10343,10351,10355,10356,10358,10364,10381,10390,10397,10398,10495]'),(558,1058,58,106,1,'SOFT/TENDER','[1181,259,307,346,1724,376,1354,799,927,933,846,859,899,1208,1110,1822,1886,1114,1115,2197,2233,2726,2612,2642,2786,2818,2837,3374,3432,3440,3442,3445,3856,3862,3492,3522,3529,3280,3281,4640,4641,4388,4558,4635,4458,4500,4506,4831,5009,5010,5011,5012,5015,4950,2446,2454,2464,5609,5546,5589,4750,6068,6469,6583,4692,5275,4709,5803,5633,6314,5362,8071,7769,7805,5425,8188,8228,8251,8318,8402,8511,8570,7749,7395,7328,7876,7885,7948,8872,5497,7353,7364,9444,9446,9484,9492,9656,9658,9662,9681,10163,10371,10374,10382,10388,10459]'),(559,1053,58,140,1,'Epic','[292,295,299,501,510,333,392,393,396,399,1143,1638,721,770,740,1653,2024,2025,1111,2593,2610,3314,3584,3296,4633,5084,3200,4795,4960,4973,5668,6920,6929,7068,4706,5281,4713,5284,6508,6958,2641,7399,7794,5396,5400,5401,5475,8184,8182,8185,8186,8190,8244,8292,8341,8405,8407,8408,8433,8478,8860,7329,7722,8116,8117,8648,8649,8651,7693,7696,7719,7824,7858,7909,8614,8847,8854,7937,7938,7944,7946,9390,9394,9455,9484,9493,9494,9503,9550,9551,9562,9563,9572,9574,9577,9579,9864,9869,10059,10066,10184,10201,10203,10250,10252,10255,10258,10260,10261,10267,10272,10278,10281,10294,10300,10314,10317,10318,10328,10330,10339,10361,10387,10389,10391,10393,9518,10414,10443,10496,10497,10498,10524,10548,10577,10584,10586,10603,10856,10861]'),(560,1056,58,151,1,'Vivid/Playful','[1175,227,249,413,1827,373,1165,1170,2177,2182,2183,1117,2221,2225,2231,2239,2249,2230,2242,2825,2739,3042,3553,3291,3391,4594,4448,4450,4551,4541,4528,4399,1173,4510,3211,3187,4942,2034,5494,5212,5017,6092,6489,6564,6568,5263,5793,5796,5797,5800,5801,5802,5805,5806,5807,5809,5813,5817,5820,7164,7134,7801,8284,8577,7845,7872,7955,5499,7341,10050,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10139,10140,10142,10143,10144,10145,10146,10147,10148,10150,10151,10152,10153,10154,10155,10173,10176,10198,10243,10244,10251,10262,10288,10301,10313,10329,10333,10337,10346,10350,10352,10355,10377,10394,10428,10444,10466,10467,10483,10513,10613,10614,10634,10636,10644,10652,10658,10662,10676,10689,10712,10717,10718,10724,10794,10820,10830,10868,10870]'),(561,1261,58,90,1,'Quiet / Calm / Tranquil','[4033,4076,4168,9123,9126,9128,9132,9157,9165,9167,9171,9179,9339,9285,9302,9320,9397,9405,9413,9428,9464,9511,9528,9532,9533,9667,9680,9684,9686,9733,9816,9819,9861,9862,9902,9906,9910,9927,9944,9987,10010,10016,10017,10025,10026,10031,10033,10037,10038,10040,10043,10057,10127,10135,10136,10137,10160,10163,10181,10187,10194,10200,10206,10212,10213,10221,10239,10241,10256,10269,10283,10286,10287,10297,10298,10333,10340,10351,10366,10371,10388,10395,10399,10425,10447,10454,10459,10607,10808,10879]'),(562,1248,58,33,1,'Terror / Fear / Panic','[9054,9055,9056,9059,9063,9064,9065,9066,8977,8137,3815,4115,9389,10170,10189,10242,10253,10258,10259,10264,10268,10270,10293,10300,10302,10304,10310,10318,10345,10359,10360,10376,10385]'),(563,477,59,70,2,'Ambient / Atmospheric','[55,993,287,2248,2683,2375,2381,2385,2555,2837,3316,3031,3544,3589,3552,2106,2463,4496,4852,4945,4975,4701,4708,5266,5287,4738,4693,4704,4712,4690,7281,7665,7668,7670,7667,5424,5425,5426,5431,5437,5441,5452,5468,5472,5477,8076,8088,8273,8274,8360,8376,8536,8549,8553,8656,7684,7695,7702,7711,7715,7718,7673,7393,8645,8961,9361,9366,9434,10030,10162]'),(564,1059,58,153,1,'suspenseful/uncertain','[290,292,296,304,309,320,523,326,327,338,329,337,330,1823,1825,1826,1829,1843,1840,1839,1838,384,385,386,387,390,391,395,397,1178,1185,1190,1174,1184,472,479,768,958,970,769,758,751,729,11,1307,561,1204,1235,1283,1844,613,1658,1684,1705,1671,262,260,1124,2676,2685,2691,2717,2715,2713,2637,2563,2617,2548,2555,2594,2732,2729,3029,638,3290,3305,3634,3638,2443,2484,2482,3505,3966,3968,4415,4494,3086,4755,4756,4763,4966,4967,4972,4949,4682,2461,5016,1100,4698,4691,8136,7089,4103,4141,9156,9166,9174,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9341,9364,9376,9539,9544,9557,9565,9570,9573,9584,9591,9600,9608,9629,9685,9688,9689,9713,9809,9814,9815,9875,9923,9977,9980,9982,9983,9985,10036,10309,10334,10381]'),(565,478,59,3,2,'Beds / Underscore','[2453,6487,5269]'),(566,1114,58,62,1,'Mood change','[1200,1345,728,781,1218,1698,2714,2559,2610,3981,4632,4459,4962,303,5663,8209,7908,8644,9068,9064,8953,8133,7085,6569,5937,5789,5790,3624,4141,9342,9343,9346,9357,9363,9367,9307,9419,9443,9479,9484,9552,9554,9677,9682,9687,9688,9689,9693,9801,9857,9863,9869,9870,9873,9874,9996,9999,10028,10244,10265,10335,10393]'),(567,1104,58,16,1,'Mixed','[380,958,1307,1301,1302,1847,2727,2559,638,3572,3305,3981,4503,4962,4935,4735]'),(568,1075,58,126,1,'Moving/Emotional','[307,324,339,346,347,333,1710,1841,1837,375,376,406,1192,1196,1354,1337,1335,476,654,661,693,722,726,739,914,931,954,733,732,2072,1679,1691,274,2031,2022,1128,1127,1123,1114,1116,3318,3289,3277,3278,4452,4530,4678,4455,4507,5010,4971,4939,5613,4700,5274,5803,6879,5328,5364,5368,8163,8180,8195,8232,8245,8247,8299,8304,2143,8321,8327,8368,8373,8379,8381,8383,8463,8503,8512,8570,8595,7747,8857,8861,7338,7723,7726,7727,7728,8927,7821,7856,7903,7904,7964,8866,8867,8868,7364,8976,8989,5789,9164,9166,9174,9373,9287,9289,9290,9291,9292,9293,9295,9296,9300,9304,9314,9762,9879,10003,10004,10089,10307,10311,10447,10861]'),(569,482,59,0,2,'Dance / Modern',NULL),(570,479,59,0,2,'Bright / Optimistic',NULL),(571,480,59,16,2,'Chill Out','[994,1164,356,2379,3654,3862,4529,3717,4834,5866,5308,7666,5426,5436,7392,9533]'),(572,481,59,3,2,'Cold / Barren','[7707,9053,9062]'),(573,483,59,5,2,'Dark','[1075,4916,2460,4976,4734]'),(574,484,59,1,2,'Dawn','[8069]'),(575,432,31,2,2,'Walking Bass','[10375,10830]'),(576,485,59,3,2,'Dream / Heavenly / Flight','[5460,5469,8099]'),(577,486,59,0,2,'Drone',NULL),(578,1001,62,0,2,'caa',NULL),(579,433,37,0,2,'Australia',NULL),(580,435,37,0,2,'Belgium',NULL),(581,387,36,3,2,'World Percussion','[5486,5487,5490]'),(582,385,36,0,2,'World / Ethnic Vocal',NULL),(583,434,37,0,2,'Austria',NULL),(584,386,36,2,2,'World Music / Crossover','[960,3864]'),(585,487,59,0,2,'Electronic',NULL),(586,488,59,0,2,'Exotic',NULL),(587,490,59,0,2,'Frantic / Busy',NULL),(588,489,59,0,2,'Fantasy',NULL),(589,491,59,1,2,'Horror','[7078]'),(590,493,59,0,2,'Laid Back',NULL),(591,492,59,0,2,'Hot / Desert / Tropical',NULL),(592,495,59,1,2,'Neutral','[1828]'),(593,497,59,0,2,'Power / Energy',NULL),(594,496,59,3,2,'Peaceful / Pastoral','[2438,3969,7095]'),(595,494,59,0,2,'Majestic / Panoramic',NULL),(596,499,59,3,2,'Sad','[4702,6208,8321]'),(597,500,59,9,2,'Sci-Fi / Space','[1074,1209,5449,5464,5473,8443,8657,7092,4083]'),(598,498,59,6,2,'Quirky / Strange','[9058,9059,9060,9061,9065,9067]'),(599,501,59,2,2,'Sea / Water','[5960,7664]'),(600,503,59,3,2,'Slow Motion','[3990,2489,6183]'),(601,502,59,2,2,'Simple / Sparse / Minimal','[7680,8957]'),(602,504,59,0,2,'Violence',NULL),(603,505,59,6,2,'Warm / Uplifting','[1714,4475,5427,5433,5453,5463]'),(604,375,36,1,2,'Scotland','[5652]'),(605,378,36,7,2,'Spain','[2262,2661,4187,4190,3978,5609,5614]'),(606,987,115,8,1,'jazz trio','[1149,377,2141,2246,2249,4386,2458,8647]'),(607,1015,73,15,2,'Sad/Reflective','[1550,24,1302,1845,2072,1678,2251,2669,3280,3282,3286,4940,2455,2492,2462]'),(608,511,101,67,2,'Romantic General','[1150,1157,416,254,1254,1664,2022,2187,1129,2213,2236,2153,3068,3066,2871,3323,3595,2103,2526,4452,4388,4389,4536,4956,4981,4993,4470,3223,4971,4977,5496,5699,5560,5562,5564,5583,5899,6479,6481,6561,6564,6565,6445,7214,7201,7199,5363,5579,5587,7785,7786,7803,7801,7800,8385,7744,7749,8095,8100,8104,7956,7965,8670,7945,8871,8872,10046]'),(609,510,101,11,2,'Orchestral','[1192,1193,1196,3289,3277,4740,5479,5374,8857,7317,7729]'),(610,990,102,49,2,'Solitary','[840,931,287,283,270,1131,1122,1121,2681,3326,4186,3979,3980,566,2527,4449,4414,4752,4945,4947,2431,4683,5265,5271,5278,5279,4722,4686,6859,6901,5962,6202,6220,6299,3245,5361,8065,8247,8310,8327,8379,8858,7688,8103,8058,7855,7522,8867,8874]'),(611,512,101,5,2,'Schmaltz','[3028,3278,4840,4904,4680]'),(612,117,115,265,1,'Featured Instruments','[960,1271,2253,2188,2189,2240,2213,2135,2198,2199,2200,2156,2724,2720,2546,2592,3169,2203,3538,3544,3606,3576,3563,3552,3306,3858,3860,3861,3864,3864,2411,2428,3505,3976,4635,5060,3076,4756,4763,4837,4837,4966,4967,4936,2018,1155,2419,2435,2416,2416,2418,2425,2475,2477,2477,2483,2464,5622,5652,5659,5666,5489,5491,5492,5493,5494,5495,5496,5123,5856,4721,4737,4716,4715,4712,5800,5819,5843,5674,6216,5663,6234,6268,6304,6320,7172,7148,7134,5037,3803,5394,5367,5378,5579,8072,8068,7432,7432,7574,5410,5475,8352,8352,8375,8395,8549,8588,7725,7706,8051,8534,7822,7822,7851,7851,7864,7872,7906,7912,8626,8842,9026,9052,9055,9061,9067,8123,8121,5057,6059,3624,4322,3773,3773,3812,3815,3820,3866,4076,9353,9358,9379,9310,9312,9619,9644,9644,9650,9650,9673,9692,9696,9696,9696,9732,9733,9748,9800,9810,9814,9815,9819,9855,9855,9855,9857,9857,9858,9858,9861,9863,9863,9878,9959,9975,9987,9989,10017,10028,10028,10036,10040,10041,10043,10044,10080,10089,10089,10096,10156,10158,10158,10162,10165,10169,10174,10176,10186,10187,10188,10190,10192,10194,10196,10198,10200,10209,10210,10211,10212,10213,10214,10214,10239,10241,10241,10256,10265,10271,10273,10274,10274,10275,10279,10280,10283,10287,10291,10292,10295,10296,10297,10298,10300,10301,10305,10306,10307,10311,10319,10323,10326,10327,10327,10333,10337,10343,10346,10347,10350,10351,10352,10364,10365,10371,10372,10373,10382,10386,10388,10388,10390,10397,10398,5941,10418,10459,10483,10483,10500,10551,10575,10587,10607,10614,10668,10669,10729,10737,10746,10760,10766,10773,10774,10787,10794,10798,10846,10852,10852,10879,10889,10895]'),(613,118,115,656,1,'Orchestral','[1550,1145,1145,1146,1146,1168,1175,1176,1177,227,249,254,243,290,291,292,296,298,299,314,319,320,321,322,501,504,503,509,510,511,513,514,517,522,523,328,335,338,339,1132,340,330,330,333,1710,1712,1712,1712,1718,1718,1718,1716,1724,1726,1721,1721,1721,1830,1825,1826,1829,1840,1839,1838,1835,1824,404,401,403,402,406,406,380,388,392,392,393,395,395,396,397,399,389,405,1143,1143,1143,1189,1148,1148,1148,1171,1152,1165,1170,1174,1144,1144,1144,1191,1191,1195,1192,1192,1193,1196,1198,1156,1635,1634,1637,1638,1647,1632,1631,1636,1167,1199,1799,1799,1799,1806,1813,1353,1337,1345,721,728,739,854,855,861,889,891,781,770,758,740,733,732,727,1299,1308,1301,1218,1844,1847,1847,1849,2058,1698,1683,1664,1668,1653,1653,1656,1667,1672,1685,1689,1694,1708,1107,1850,2032,2031,2024,2021,2023,2171,2184,2174,2019,2020,2025,1117,1120,1111,2209,2395,2396,2397,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2407,2408,2409,2409,2666,2676,2676,2676,2685,2719,2717,2717,2715,2715,2714,2713,2711,2707,2707,2728,2723,2723,2593,2610,2612,2612,2623,2584,3317,3318,3320,3321,3325,3327,2259,3308,2223,3584,3574,3566,3566,3565,3558,3555,3553,3638,3642,4182,3855,3275,3275,3289,3287,3276,3277,3278,3282,3283,3284,3286,4643,4556,4556,4547,4533,4533,4632,4632,4633,4633,1173,1173,4460,4461,4467,4467,4468,4499,4499,4506,4506,4506,4512,4521,5084,4230,4230,3200,4795,4808,4821,4821,4909,5008,5008,5009,5010,5010,5011,5011,5014,4959,4960,4960,4961,4962,4962,4962,4963,4963,4964,4964,4965,4972,4973,4973,4938,4939,4942,4933,4931,4679,4679,2018,2435,2435,5668,5488,2486,6463,6463,6468,6468,6495,6847,6631,6631,6518,6920,6929,7017,7068,4700,5282,5283,5286,5269,4739,4705,5281,4713,4720,4720,4730,5273,5276,5275,5284,4721,4723,4696,4704,5274,5263,4740,4728,4726,4726,4722,4695,4691,4684,5640,5644,6508,6528,6536,6544,6552,6552,6685,6685,6701,6701,6710,6710,6870,6949,6958,5977,2641,5328,5328,5479,5365,5387,5384,5374,5368,5368,7409,7409,7399,7554,7566,7566,7792,7792,7793,7794,5395,5396,5397,5399,5400,5429,5484,8167,8167,8184,8182,8185,8185,8185,8186,8189,8190,8190,8192,8206,8208,8209,8209,8210,8210,8213,8224,8224,8225,8226,8226,8229,8238,8242,8244,8245,8292,8341,8350,8368,8404,8404,8405,8405,8405,8406,8406,8407,8408,8408,8418,8418,8422,8424,8433,8450,8455,8458,8474,8476,8477,8478,8555,8581,8593,8595,7752,7752,8857,8860,8861,7317,7319,7324,7329,7329,7330,7331,7339,7338,7722,7723,7725,7726,7727,7728,7729,8114,8116,8116,8117,8648,8927,8649,8649,8651,7693,7696,7706,7708,7708,7709,7718,7719,7720,7814,7824,7824,7858,7858,7865,7865,7877,7909,8629,8629,8631,8632,8634,8634,7937,7938,7939,7939,7939,7940,7942,7941,7943,7943,7944,7946,7946,7945,8872,7351,7358,8950,8958,8976,8977,8986,9003,7091,6059,6061,5931,5786,5789,5302,5341,5343,5108,9128,9132,9154,9156,9174,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9336,9337,9364,9367,9368,9370,9373,9376,9380,9285,9286,9290,9291,9292,9293,9295,9296,9299,9302,9303,9305,9307,9309,9313,9314,9315,9316,9319,9389,9390,9392,9394,9397,9403,9404,9405,9406,9418,9423,9424,9429,9430,9440,9445,9446,9447,9448,9455,9460,9477,9480,9481,9482,9483,9484,9493,9494,9497,9498,9500,9503,9510,9549,9548,9550,9551,9552,9553,9554,9556,9557,9558,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9572,9574,9577,9579,9664,9669,9671,9672,9676,9677,9678,9679,9687,9691,9692,9796,9799,9806,9811,9864,9876,9879,9882,9972,9988,9998,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10125,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10170,10173,10184,10203,10204,10237,10242,10244,10250,10252,10255,10257,10258,10260,10261,10264,10265,10267,10269,10270,10272,10276,10294,10339,10342,10344,10387,10389,9518,288,10443,10496,10524,10548]'),(614,119,115,1334,1,'Other Ensembles','[1157,1158,1194,416,1022,413,418,289,293,300,301,302,305,308,316,317,318,512,326,327,355,331,332,1827,1834,373,374,378,381,382,407,408,409,410,411,379,406,1151,1159,1160,1161,1197,1152,1630,1633,1640,1641,1642,1647,1646,1645,1644,1643,1636,1188,1199,1200,1338,1339,1344,1375,1340,1335,450,451,456,462,471,473,474,487,479,660,657,639,651,654,664,665,722,723,757,768,785,786,787,800,807,811,822,828,829,833,839,914,849,853,848,856,857,859,865,866,870,871,884,890,893,895,897,898,899,900,901,903,794,729,1307,1308,1739,1300,1740,549,541,542,543,544,548,552,559,560,563,567,568,569,570,572,575,577,578,579,580,581,582,583,584,585,586,587,588,1217,1251,1228,1267,1270,1272,1594,1595,1596,1598,1602,1604,1607,1608,1610,1612,1614,1615,1617,1618,1620,1621,1622,1626,591,593,602,603,1845,594,606,607,611,612,614,615,616,620,2068,1398,1649,1652,1666,1669,1692,1701,1658,1661,1690,1703,1709,1695,1665,1663,1664,1705,1682,1688,1671,1668,1679,1650,1678,1691,1706,1693,1108,255,281,262,260,1109,1131,1112,2036,2035,2026,1428,2016,1884,2017,2022,2022,2021,2187,2185,2178,1129,1128,1127,1126,1125,1124,1123,1122,1121,1119,1114,1114,2165,2201,2224,2190,2194,2147,2163,2191,2247,2252,2213,2215,2216,2222,2226,2227,2232,2237,2241,2243,2219,2236,2233,2233,2217,2255,2257,2258,2256,1116,1116,2123,2127,2132,2207,2136,2134,2137,2138,2140,2158,2159,2166,2204,2150,2151,2154,2155,2157,2167,2148,2245,2235,2234,2153,2220,2228,2229,2230,2264,2274,2286,2298,2307,2318,2327,2338,2356,2652,2653,2656,2658,2659,2660,2663,2667,2669,2671,2672,2674,2675,2677,2678,2679,2680,2682,2683,2684,2686,2692,2693,2694,2695,2688,2696,2698,2701,2703,2705,2716,2709,2708,2706,2654,2681,2725,2722,2721,2590,2618,2634,2632,2594,2620,2547,2558,2535,2597,2600,2642,2583,2760,2764,2772,2777,2782,2805,2808,2851,2812,2846,2832,2841,2825,2829,2752,2745,2739,2732,3037,3074,3071,3064,3064,3062,3060,3058,3058,3054,3053,3044,3251,3250,3246,3242,3235,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,3268,3270,3272,3316,3322,3323,3324,3326,3311,3312,3314,3309,3307,3036,3035,3034,3033,2254,1676,3328,3329,3331,3342,3537,3541,3619,3618,3615,3614,3611,3610,3608,3605,3600,3598,3597,3593,3592,3586,3583,3580,3578,3572,3569,3568,3567,3565,3562,3560,3559,3557,3556,3554,3306,3345,3332,3334,3337,3338,3339,2094,2099,2101,2103,2109,3630,3634,3642,3646,3658,3662,3666,3368,3385,3386,3411,3412,3420,3425,3426,3427,3428,3430,3433,3437,3363,4182,4189,3732,3732,3739,3740,3859,3862,3863,2412,2443,2484,2482,3356,3446,3462,3473,3477,3483,3488,3501,3515,3524,3970,3979,3981,3985,3986,3987,3992,573,574,576,551,3288,2527,4574,4584,4608,4612,4618,4627,4448,4442,4443,4444,4445,4446,4447,4449,4450,4452,4451,4642,3296,4552,4539,4538,4537,4532,4527,4526,4523,4678,4670,4391,4393,4399,4951,4952,4953,4954,4955,4956,4957,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,1681,4453,4456,4459,4464,4471,4483,4489,4493,4497,4502,4508,4510,4516,4517,4518,5094,5072,4242,4209,4204,3704,3693,3682,3670,3211,3187,3174,3104,3104,3095,3086,3076,2949,2913,2904,2886,2367,5009,5013,5015,4969,4971,4948,4940,4943,4944,4935,4929,4977,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,1673,1700,3340,2424,2429,2450,2468,2491,2476,2448,5016,2455,2492,2462,5617,5652,5652,5544,5757,5746,5710,5548,5549,5550,5555,5555,5557,5559,5560,5562,5564,5565,5566,5569,5109,5150,5170,5196,5571,5572,5573,5581,5581,5583,5585,5591,3751,4749,5844,5888,6132,6112,6101,6092,2417,2422,2441,2437,6464,6470,6475,6477,6479,6480,6481,6483,6486,6493,6494,6835,6825,6825,6814,6780,6757,6673,6659,6616,6605,6594,6570,7057,6998,7027,4701,4702,4724,4725,5266,5279,5287,5288,5267,4731,4719,5264,4729,4727,4694,5277,4712,4709,4699,4698,4690,4688,4686,6427,6428,6429,6430,6431,6432,6433,6426,6434,5793,5794,5795,5796,5797,5800,5801,5802,5805,5806,5808,5813,5815,5817,5818,5819,5820,6445,5631,6879,7047,6949,6938,6988,3030,6240,7199,7191,7148,7097,5578,5922,3245,5050,5047,4377,4297,3803,5360,5361,5362,5364,5391,5380,5379,5376,5375,5372,5378,5020,3040,8073,8069,8068,8065,8064,8062,8063,7224,7246,7259,7293,7270,7302,7762,7498,7467,7476,7487,7586,7574,7641,7652,7607,7630,7788,7791,7810,7809,7807,7806,7805,7804,7804,7803,7801,7800,7799,7798,5397,5399,5401,5425,5474,8079,8081,8083,8086,8176,8179,8181,8186,8196,8200,8231,8232,8234,8235,8258,8312,8257,8334,8345,8354,8361,8370,8373,8375,8376,8386,8391,8411,8429,8431,8433,8438,8452,8460,8460,8463,8484,8492,8499,8503,8506,8508,8513,8520,8550,8554,8577,8580,7742,7743,7744,7745,7746,7747,7748,7750,7751,7752,7753,8857,8858,7395,7397,7320,7333,7336,7724,8651,7682,7688,7717,7379,8092,8110,7732,7733,7735,7737,7739,7741,8047,8048,8049,8056,8061,7811,7821,7849,7861,7887,7933,8633,8635,8637,8645,8647,7956,7959,7961,8614,8618,8627,8831,8833,8848,7937,7955,7952,7949,7945,7512,8866,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,7731,5503,9018,9020,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9037,9041,9068,9070,8662,8664,8664,9051,9062,8989,8993,8997,8999,9008,8933,8661,8661,8663,8137,8133,8128,5057,7080,7082,7084,7087,7089,7095,6739,6745,6746,6747,6748,6055,6057,6057,6058,6060,6063,5937,5791,4300,4311,4317,4362,4358,4329,4322,3773,3812,3822,3866,3901,3941,3954,4010,4023,4041,4041,4060,4070,4074,4084,4094,4104,4115,4141,4165,4167,4168,4171,4279,9167,9175,9191,9193,9194,9325,9335,9343,9355,9355,9356,9359,9362,9371,9287,9289,9304,9310,9318,9391,9396,9399,9400,9407,9409,9412,9413,9414,9425,9426,9432,9434,9435,9443,9444,9450,9456,9457,9458,9461,9463,9464,9469,9475,9476,9487,9490,9491,9495,9495,9496,9501,9501,9509,9512,9515,9516,9524,9525,9526,9527,9528,9529,9535,9537,9537,9538,9538,9542,9543,9571,9575,9576,9582,9646,9648,9652,9654,9656,9658,9660,9662,9666,9667,9668,9675,9682,9686,9688,9689,9690,9693,9697,9699,9701,9707,9709,9714,9716,9719,9724,9726,9728,9730,9731,9734,9736,9737,9738,9740,9741,9742,9744,9750,9752,9754,9756,9757,9759,9759,9760,9762,9763,9764,9765,9766,9797,9804,9805,9807,9815,9816,9818,9819,9821,9822,9824,9825,9826,9827,9828,9829,9830,9831,9859,9860,9876,9882,9885,9889,9893,9898,9934,9944,9951,9966,9967,9968,9969,9970,9971,9973,9979,9978,9980,9981,9982,9983,9984,9985,10000,10010,10012,10030,10032,10038,10041,10042,10043,10049,10181,10201,10218,10221,10230,10240,10243,10246,10251,10254,10263,10266,10271,10275,10278,10281,10286,10288,10289,10293,10295,10296,10300,10303,10306,10312,10314,10314,10315,10316,10316,10317,10318,10320,10321,10322,10328,10330,10331,10332,10334,10337,10338,10347,10354,10355,10361,10362,10363,10366,10368,10370,10373,10375,10376,10379,10383,10390,10391,10393,10394,10395,10396,10399,8528,428,10414,10418,10443,10466,10472,10495,10497,10498,10500,10508,10539,10551,10577,10584,10584,10585,10585,10586,10587,10587,10603,10630,10667,10668,10669,10689,10746,10760,10766,10774,10787,10794,10808,10844,10846,10856,10861,10868,10889,10895]'),(615,120,115,521,1,'Percussion / Drums','[1420,295,309,342,1187,1389,475,642,646,650,658,643,647,651,977,917,914,918,937,966,967,960,956,956,910,846,11,1306,1300,1207,1208,1233,1239,1253,608,609,617,618,619,2078,2073,1109,1822,2021,1881,1883,1886,1123,2211,2250,2253,2188,2189,2240,2205,2210,2221,2225,2231,2239,2238,2125,2130,2133,2135,2149,2162,2192,2408,2649,2651,2657,2657,2661,2662,2664,2664,2670,2687,2700,2703,2704,2712,2720,2546,2599,2600,2600,2539,2565,2579,2786,2786,2792,2799,2818,2857,2752,2729,3039,3073,3072,3070,3068,3066,3042,3265,3260,3323,2374,3314,3027,3309,3032,3032,2379,3534,3535,3539,3540,3542,3545,3546,3620,3613,3602,3601,3599,3595,3577,3576,3573,3572,3564,3561,3551,3550,3548,3290,3297,3298,3299,3301,3304,3345,3346,2109,2109,3373,3380,3387,3391,3395,3402,3405,3414,3416,3431,3432,3435,4183,4194,3857,3858,3860,3864,3865,2426,3452,3458,3462,3497,3505,3976,3991,4197,4198,3296,4546,4545,4544,4542,4540,4539,4535,4534,4529,4528,4528,4524,4638,4634,4672,4392,1639,1639,4454,4456,4457,4479,4483,4486,4510,4518,4520,5084,5060,3200,2949,4870,4870,4873,4905,5007,5007,4978,4966,4934,4681,4682,4387,303,334,2465,2418,2420,2421,2464,2490,2466,2472,2440,5626,5629,5666,5486,5487,5490,5492,5567,5137,4976,3746,5856,2488,2442,2439,6460,6471,6474,6484,6487,6490,6491,6648,6583,4707,4706,4706,5284,5277,4737,5843,5633,5677,6692,7007,7216,5966,5968,5971,5998,6001,6021,6024,6028,6157,6160,6166,6171,6179,6188,6215,6220,6718,6729,6735,6736,6240,6265,6268,6274,6295,6300,6307,6310,6413,6410,6402,6397,6320,6327,6330,6334,6343,6381,7200,7190,7162,7120,7109,7097,590,5389,5579,5587,8068,8066,8063,7757,7769,7780,7432,7791,7796,5401,5409,5455,5461,5474,5475,8187,8187,8244,8288,8300,8301,8310,8317,8386,8395,8425,8435,8473,8504,7751,7316,7316,7332,7334,7725,7709,7710,7714,7372,7385,8097,8103,8051,8864,8864,7822,7847,7851,7864,7872,7883,7921,7933,8630,8645,8646,7962,8614,8615,8616,8830,8841,8844,8847,8854,7358,2538,9065,8997,7078,6055,5107,4358,3853,4114,4141,9154,9323,9340,9343,9344,9348,9349,9350,9351,9352,9356,9360,9361,9363,9374,9300,9302,9317,9321,9386,9388,9415,9416,9417,9423,9424,9426,9428,9432,9448,9466,9519,9528,9680,9681,9685,9687,9798,9863,9991,9993,9995,10049,10058,10059,10066,10080,10157,10165,10168,10170,10174,10176,10176,10186,10187,10190,10196,10198,10200,10207,10209,10210,10213,10223,10227,10228,10228,10228,10229,10230,10233,10243,10262,10286,10292,10301,10305,10317,10318,10324,10329,10330,10350,10357,10358,10365,10372,10376,10377,10394,5404,10425,10425,10428,10428,10430,10443,10444,10447,10466,10467,10483,10495,10496,10498,10513,10513,10514,10524,10548,10559,10575,10577,10584,10585,10586,10603,10607,10614,10618,10618,10619,10619,10630,10634,10635,10636,10644,10652,10676,10681,10696,10702,10703,10712,10718,10724,10726,10727,10729,10737,10773,10798,10812,10830,10838,10844,10860,10861,10862,10870,10870]'),(616,121,115,1565,1,'Solo Instruments','[416,259,413,418,418,307,310,310,310,311,313,315,315,323,323,323,324,324,520,520,520,325,325,354,354,353,353,353,352,352,352,351,351,351,349,349,349,348,348,345,345,344,344,343,343,343,342,342,341,341,346,346,347,1132,1714,1724,1823,1841,1837,1832,1826,1829,1835,1835,375,376,377,402,384,386,1179,1179,1171,1156,1637,34,56,1806,1813,1354,1354,1354,1389,1389,1337,1341,1342,1340,1340,468,476,476,642,646,650,658,666,666,679,680,688,689,647,651,654,661,661,672,673,678,684,685,687,692,692,693,693,694,702,706,707,708,715,716,722,726,726,739,793,793,799,799,817,822,834,918,927,930,931,933,937,938,944,948,948,954,954,963,963,959,953,952,958,958,965,970,982,846,846,853,859,863,863,871,871,896,896,896,791,792,906,905,902,1306,1300,1302,562,562,589,1204,1205,1206,1212,1214,1217,1219,1220,1221,1222,1226,1232,1233,1233,1239,1249,1250,1253,1253,1254,1267,1273,1274,1275,1276,1279,1280,1281,1283,1284,1284,1286,1288,1291,1294,1295,1297,1298,1298,1624,610,1845,600,608,609,617,619,621,1578,2051,2068,2093,2072,2084,2084,2081,2078,1398,1661,1696,1704,1671,1679,1651,1651,1657,1691,1851,287,287,286,270,1109,1110,1131,1112,1112,1134,1135,1136,1428,1822,2016,1821,2186,2185,2185,2181,2177,2182,2183,2176,2175,1881,2025,1886,2029,2033,1127,1127,1126,1126,1125,1125,1124,1123,1122,1122,1121,1119,1119,1114,1115,2211,2250,2250,2253,2160,2160,2240,2208,2248,2248,2251,2251,2193,2193,2197,2206,2216,2221,2221,2225,2225,2231,2231,2239,2239,2238,2238,2236,2236,1118,1118,1118,2124,2125,2125,2130,2130,2133,2133,2135,2207,2161,2161,2150,2151,2152,2152,2154,2155,2155,2167,2149,2149,2162,2162,2235,2235,2153,2144,2145,2146,2198,2199,2200,2230,2192,2156,2156,2169,2262,2649,2649,2650,2651,2651,2653,2653,2661,2665,2665,2667,2667,2668,2668,2684,2684,2685,2687,2687,2691,2693,2693,2700,2700,2681,2375,2387,2389,2389,2726,2722,2721,2720,2559,2554,2580,2595,2637,2553,2571,2571,2623,2642,2544,2565,2565,2570,2786,2792,2792,2799,2799,2818,2821,2821,2821,2837,2837,2856,2860,2860,2858,2857,2732,2732,3037,3039,3073,3073,3072,3071,3070,3070,3068,3066,3066,3060,3056,3052,3052,3042,3265,3260,3260,3256,3256,3246,3239,3316,3316,3318,3323,3326,3327,2214,2214,2214,2374,2203,3310,3311,3312,3313,3313,3027,3028,3035,3032,3031,2254,2254,2379,638,3534,3535,3535,3536,3538,3538,3539,3540,3542,3544,3545,3546,3546,3620,3617,3617,3614,3613,3613,3602,3602,3601,3601,3600,3600,3599,3598,3598,3595,3595,3589,3589,3588,3587,3587,3583,3582,3582,3582,3577,3575,3575,3575,3574,3573,3573,3572,3570,3570,3568,3568,3564,3564,3561,3560,3552,3552,3551,3550,3550,3290,3291,3298,3301,3346,3349,3332,3335,3337,2106,3634,3638,3650,3666,3365,3364,3364,3366,3367,3369,3371,3372,3374,3375,3376,3377,3377,3378,3370,3379,3380,3381,3382,3383,3384,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3407,3408,3409,3410,3413,3415,3416,3417,3418,3419,3421,3422,3423,3424,3427,3429,3429,3431,3432,3434,3435,3436,3438,3439,3440,3441,3442,3443,3444,3445,4183,4185,4186,4187,4189,4190,4194,4194,3727,3727,3731,3731,3734,3734,3735,3735,3736,3737,3739,3740,3743,3743,3744,3744,3857,3857,3860,3861,3861,3862,3862,3865,3865,2410,2426,2428,2414,3452,3452,3458,3458,3463,3463,3463,3462,3470,3470,3470,3483,3492,3492,3497,3497,3505,3508,3508,3509,3512,3513,3513,3519,3519,3522,3528,3529,3529,3533,3966,3968,3970,3971,3976,3977,3978,3980,3982,3983,3984,3985,3986,3990,3991,3991,3992,566,3289,3288,3288,3277,3278,3280,3281,3283,3286,3745,4198,2526,2527,4195,4196,4589,4589,4594,4594,4640,4640,4641,4641,4442,4443,4445,4447,4449,4450,4452,4388,4389,4413,4414,4386,4642,4644,4558,4558,4556,4555,4555,4551,4550,4550,4549,4547,4546,4545,4545,4544,4544,4543,4542,4541,4540,4540,4539,4538,4536,4535,4531,4530,4529,4528,4524,4523,4523,4634,4636,4636,4637,4639,4676,4675,4675,4673,4673,4672,4391,4391,4392,4392,4393,4394,4394,4395,4395,4398,4398,4399,4400,1639,4454,4455,4455,4455,4458,4458,4458,4459,4462,4470,4470,4470,4474,4478,4479,4479,4480,4390,4415,4481,4481,4481,4484,4485,4485,4486,4486,4488,4491,4491,4491,4500,4500,4500,4501,4505,4507,4509,4510,4511,4513,4514,4515,4517,4518,4519,4519,4242,4230,4221,4221,4221,3693,3693,3223,3223,3211,3211,3187,3187,3174,3104,3095,3095,3076,2931,2931,2886,2367,4752,4755,4756,4808,4831,4834,4840,4840,4866,4904,4914,4916,5009,5010,5011,5012,5013,5013,5014,5014,5015,4966,4967,4968,4969,4971,4950,4949,4948,4939,4939,4940,4943,4944,4945,4947,4935,4933,4932,4930,4929,4928,4680,3609,3609,4387,303,303,306,306,306,334,334,2468,2491,2461,2430,2430,2431,2476,2487,2445,2446,2448,2451,2451,2454,5016,2455,2432,2432,2436,2479,2479,2490,2490,2492,2462,2472,2472,2449,2440,2440,5606,5609,5610,5612,5613,5614,5617,5617,5622,5622,5611,5626,5636,5636,5636,5666,5687,5687,5685,5684,5683,5681,5676,5675,5671,5671,5541,5541,5543,5543,5543,5722,5771,5757,5746,5734,5734,5699,5699,5546,5546,5548,5549,5553,5560,5567,5212,5123,5123,5137,5137,5181,5181,5181,5589,3746,5017,4750,4749,4742,5844,5856,5866,5866,5888,5899,5899,5899,5908,6132,6112,6092,6084,6068,1336,1336,2471,2467,2442,2442,2439,2439,2423,2423,6457,6460,6464,6464,6462,6462,6461,6461,6466,6467,6467,6467,6469,6471,6472,6472,6474,6474,6478,6478,6479,6479,6484,6485,6487,6488,6488,6489,6490,6490,6491,6496,6501,6504,6507,6803,6789,6768,6768,6768,6648,6648,6583,6560,6560,6561,6561,6562,6562,6563,6563,6564,6564,6565,6565,6566,6566,6567,6567,6568,6568,7057,7057,6998,4687,4683,4685,4689,4692,4692,4710,4711,4711,4732,5265,5270,5271,5272,5272,5272,5278,4697,4700,4701,4708,4708,4708,4725,4725,4741,4741,5279,5283,5285,5285,5286,5269,4731,4719,5264,4730,4729,4727,5273,5275,4696,5277,5263,5263,4740,4737,4709,4709,4703,4703,4703,4699,4688,4686,4686,5105,5106,5798,5798,5799,5799,5801,5803,5803,5804,5804,5805,5807,5809,5809,5810,5810,5811,5812,5812,5814,5814,5815,5816,5816,6441,6445,5949,5633,5644,5645,5649,5658,5658,5677,6536,6685,6692,6692,6879,6879,6885,6892,6892,6892,6901,6901,6901,6909,6909,6978,6978,7007,7007,7036,7036,7036,7047,6949,6988,6958,6453,6453,7214,7214,7216,5951,5962,5965,5983,5989,5990,6006,6016,6036,6041,6140,6155,6188,6198,6202,6202,6208,6216,6220,5663,5663,6718,6719,6719,6723,6723,6727,6727,6729,6729,6733,6733,6735,6736,6737,6737,6737,961,6244,6248,6248,6252,6261,6295,6299,6300,6304,6314,6417,6413,6406,6397,6397,6324,6338,6348,6350,6357,7203,7203,7201,7200,7199,7190,7183,7183,7183,7172,7172,7164,7164,7164,7162,7162,7148,7134,7134,7120,7120,7109,7109,7197,7197,5578,5050,5028,5028,5028,5047,5042,5042,5037,5037,5049,4377,4352,3803,5361,5362,5363,5363,5370,5391,5389,5388,5388,5382,5382,5380,5377,5376,5376,5375,5373,5373,5372,5372,5367,5385,5392,4436,3040,5587,8073,8071,8071,8070,8070,8069,8067,8066,8066,8065,8065,8064,8062,8063,7224,7281,7754,7754,7757,7757,7766,7769,7773,7773,7773,7778,7778,7780,7421,7444,7574,7597,7619,7566,7630,7630,7785,7785,7786,7786,7786,7791,7795,7809,7807,7803,7803,7801,7801,7800,7800,7798,7798,7797,7797,5407,5412,5420,5423,5423,5424,5425,5426,5428,5428,5433,5434,5435,5436,5443,5446,5449,5451,5455,5458,5473,5474,8083,8090,8090,8163,8167,8176,8180,8188,8188,8189,8189,8192,8195,8204,8204,8212,8214,8218,8218,8222,8228,8229,8230,8232,8240,8245,8247,8250,8251,8266,8270,8279,8283,8284,8284,8288,8296,8299,8300,8300,8301,8301,8304,8309,8310,8310,8311,8311,8317,8317,8318,2143,8257,8321,8323,8324,8327,8327,8328,8351,8360,8361,8361,8368,8369,8375,8376,8376,8379,8381,8383,8384,8385,8386,8393,8397,8397,8398,8398,8402,8402,2212,2212,2212,8413,8413,8418,8419,8421,8421,8422,8423,8423,8425,8425,8427,8427,8427,8435,8437,8442,8445,8445,8445,8451,8455,8462,8463,8465,8465,8466,8466,8473,8473,8476,8477,8480,8491,8491,8492,8497,8503,8504,8506,8506,8510,8511,8512,8512,8541,8560,8570,8574,8576,8577,7747,7749,7749,7750,7750,7751,7753,8856,8858,8859,8860,8861,7395,8862,7326,7326,7315,7316,7318,7320,7327,7328,7331,7332,7333,7334,7338,7723,7724,7726,7727,7729,8927,7681,7682,7682,7683,7684,7688,7688,7689,7689,7690,7694,7695,7697,7699,7700,7701,7704,7707,7712,7712,7712,7717,7717,7718,7372,7379,8093,8094,8095,8095,8096,8097,8098,8099,8100,8100,8101,8101,8102,8103,8104,8105,8050,8050,8052,8057,8058,8061,8535,7811,7815,7816,7821,7839,7845,7847,7847,7849,7849,7854,7855,7856,7858,7862,7864,7868,7876,7877,7881,7883,7897,7901,7901,7903,7904,7906,7908,7912,7914,7917,7921,7926,7928,7932,8630,8635,8644,8647,7956,7958,7963,7964,7967,7967,8671,8673,8674,8612,8613,8613,8618,8619,8620,8620,8622,8623,8624,8624,8625,8626,8628,8830,8835,8836,8836,8837,8837,8838,8839,8840,8841,8843,8844,8845,8846,8848,8849,8849,8850,8851,8852,8853,8855,7938,7941,7955,7955,7954,7953,7952,7949,7948,7947,7945,7509,7512,7518,7518,7522,7527,7527,8868,8870,8871,7731,7730,7730,5497,5499,5499,5501,5503,7340,7341,7344,7344,7344,7347,7349,7351,7351,7353,7353,7354,7355,7355,7358,7360,7362,7364,2538,9029,9099,9098,9097,9097,9053,9062,9064,9064,9065,8957,8975,8980,8980,8982,8982,8984,9006,9006,8133,8131,8125,8125,8125,8123,8121,8121,8118,8118,7079,7082,7085,7089,7091,6753,6753,6753,6569,6569,6055,6060,5791,5344,3624,3627,5107,5107,4280,4302,3821,3941,4022,4033,4064,4074,4077,4082,4103,4104,4141,4165,4279,9161,9164,9166,9174,9322,9323,9323,9342,9354,9354,9305,9386,9388,9393,9395,9397,9401,9402,9402,9408,9420,9428,9431,9433,9451,9467,9468,9470,9472,9478,9479,9481,9485,9490,9492,9493,9499,9504,9504,9507,9509,9516,9522,9524,9532,9533,9533,9534,9534,9535,9560,9566,9569,9570,9608,312,312,9861,9934,9944,9960,9989,10049,10215,10215,10217,10223,10223,10227,10230,10231,10233,10234,10235,10236,10239,10239,10243,10245,10245,10254,10256,10262,10262,10263,10264,10271,10277,10295,10298,10301,10305,10308,10313,10313,10313,10314,10315,10319,10320,10322,10324,10324,10325,10325,10329,10329,10332,10333,10333,10334,10335,10337,10338,10338,10341,10341,10341,10346,10351,10352,10353,10354,10356,10357,10357,10358,10362,10365,10368,10370,10377,10377,10381,10383,10386,10388,10395,10397,10397,10398,10399,2261,10400,10400,10400,10414,10414,10428,10430,10444,10444,10447,10447,10454,10459,10466,10467,10467,10472,10495,10497,10498,10508,10512,10513,10514,10514,10524,10539,10548,10551,10559,10607,10613,10618,10619,10634,10635,10636,10636,10644,10652,10658,10658,10658,10662,10662,10667,10676,10681,10681,10696,10702,10702,10703,10703,10712,10712,10717,10717,10717,10718,10718,10724,10726,10726,10727,10727,10737,10798,10808,10812,10812,10820,10820,10830,10838,10838,10844,10860,10860,10861,10862,10862,10868,10879]'),(617,122,115,687,1,'Vocal','[1022,1710,1833,1833,383,1159,1161,1635,1167,1375,467,467,494,855,981,1306,1301,549,541,542,543,544,548,552,561,562,563,564,565,567,568,572,575,577,578,579,580,581,582,583,587,588,589,1596,1598,1600,1602,1604,1608,1610,1612,1615,1617,1618,1620,1621,1624,1626,591,593,603,594,604,605,606,609,611,612,615,616,620,2057,1692,1697,1690,1707,1695,1662,1663,1688,1675,1106,1309,274,2032,2026,1821,2211,2188,2201,2210,2232,2195,2192,2262,2307,2398,2401,2404,2405,2646,2650,2685,2710,2728,2725,2724,2723,2619,2630,2542,2543,2554,2567,2541,2553,2576,2572,2599,2860,2857,2752,2745,2739,2729,3037,3074,3068,3062,3058,3056,3054,3042,2861,2862,2863,2864,2865,2866,2867,2868,2870,2871,3268,3270,3272,3317,3318,3319,3320,3321,3322,3325,3327,2374,2203,3314,3309,3328,3329,3331,3342,3542,3621,3615,3611,3570,3551,3548,2872,3299,3302,3303,3304,3305,3344,3332,3334,3335,3335,3337,3338,3339,2094,2099,2101,2103,3654,3365,3364,3366,3367,3368,3369,3371,3372,3373,3374,3375,3376,3377,3378,3370,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3363,4187,4190,3727,3731,3732,3734,3735,3736,3737,3739,3740,3743,3744,3858,573,574,576,566,550,551,3287,3282,4203,4195,4196,4579,4589,4594,4612,3296,4552,4551,4548,4543,4524,4632,4676,4676,4675,4673,4674,4668,4668,4677,4677,4678,4672,4670,4951,4952,4953,4954,4955,4956,4957,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4456,4475,4476,4478,4482,4489,4498,3200,4755,4773,4795,4809,4858,4870,4916,4978,4960,4948,4936,4977,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,3340,5626,5629,5659,5687,5685,5541,5544,5546,5549,5550,5553,5555,5557,5560,5562,5567,5569,5573,5581,5583,5589,5591,4975,4976,5017,4750,6122,6112,6460,6466,6469,6472,6475,6477,6481,6493,6496,6502,6506,6920,6929,7068,4732,4736,5282,5288,4730,4729,5275,5284,4721,4694,4722,6428,5105,5106,5106,5793,5794,5796,5797,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5807,5808,5809,5810,5811,5812,5813,5814,5815,5816,5817,5817,5818,5819,5820,5820,6435,5843,5839,5645,5677,6508,6536,6544,6701,6028,7201,7200,7197,590,2641,5319,5050,5369,5392,3040,5579,5587,8072,7799,5400,5402,5407,5410,5411,5419,5421,5448,5475,8184,8184,8182,8186,8190,8200,8202,8232,8234,8245,8247,8248,8249,8250,8279,8284,8288,8321,8324,8328,8334,8370,8395,8407,8419,8431,8433,8435,8451,8455,8478,8499,8520,8578,8593,7742,7743,7744,7745,7746,7747,7748,7749,8856,8857,8859,7395,7397,8862,7326,7334,7336,8654,7722,8117,8117,8927,8651,7681,7687,7693,7701,7704,7714,7715,7719,7721,7373,7388,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8110,7733,7735,7737,7739,8047,8048,8057,7871,7909,7912,7932,8644,8645,7956,7959,7961,7965,8612,8613,8614,8615,8617,8618,8619,8621,8622,8623,8624,8625,8628,8831,8832,8833,8835,8842,8843,8845,8847,8850,8851,8852,8854,8855,7938,7940,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,7340,2538,9054,8950,8961,8977,8986,9010,7080,7082,7089,7092,5937,5786,5341,5343,9166,9375,9285,9406,9499,9500,9526,9531,9534,9552,9644,9646,9648,9650,9699,9728,9878,9926,9948,9951,9953,9956,9959,9975,9995,10034,10037,10039,10059,10089,10179,10198,10204,10206,10221,10266,10270,8528,571,5942,2261,9872,10429,10644,10652,10662,10696,10820,10830,10870]'),(618,998,115,54,1,'Vocal Pop','[1640,1339,1202,1686,9018,9020,9023,9024,9025,9026,9027,9028,9029,9030,9032,9033,9034,9035,9036,9037,9041,9068,9070,9704,9707,9709,9710,9712,9713,9724,9821,9935,9938,9942,9945,9947,9949,9952,9958,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9977,10009,10010,10025,10039]'),(619,991,115,109,1,'Electronic Beats','[108,167,1550,1151,1339,456,466,11,2043,2093,2650,2668,2387,3315,638,2689,8607,9050,9067,8953,8969,2126,79,9130,9138,9161,9409,9450,9467,9471,9479,9487,9531,9539,9540,9555,9767,9769,9771,9776,9779,9782,9786,9789,9792,9806,9818,9885,9889,9893,9898,9902,9906,9910,9914,9918,9927,9987,9989,9990,10005,10009,10011,10012,10013,10015,10016,10027,10034,10036,10044,10054,10058,10073,10156,10159,10162,10163,10167,10169,10175,10180,10182,10183,10194,10199,10201,10206,10217,10221,10225,10226,10231,10282,10288,10289,10393,10429,10437,10454,10497,10512,10613,10667,10808,10856,10868,10878,10879]'),(620,1008,115,13,1,'Drones','[56,11,9050,8136,7084,7085,7087,7090,7092,7095,9416,10177,10179]'),(621,1017,115,101,1,'Synth','[24,9050,9055,8136,7087,3822,3853,4070,4114,4115,4124,4165,9128,9138,9156,9161,9175,9324,9326,9327,9330,9331,9333,9334,9336,9337,9340,9341,9344,9345,9346,9354,9358,9361,9365,9366,9369,9285,9299,9308,9320,9385,9416,9418,9428,9450,9459,9473,9474,9483,9502,9511,9517,9519,9522,9533,9559,9563,9567,9571,9573,9584,9608,9629,9707,9746,9798,9810,9865,9867,9868,9869,9870,9873,9874,9875,9922,9923,9924,9941,9983,9986,9991,9992,9993,9995,10027,10058,10059,10073,10104,10159,10169,10180,10182,10183,10199,10246,10251,10253,10288]'),(622,1063,115,0,1,'Rock',NULL),(623,585,117,0,2,'Brass',NULL),(624,515,116,89,2,'Chill Out','[994,259,275,1558,521,1831,1166,1628,1635,1634,1643,1632,1341,679,680,673,723,975,1268,1697,1699,1662,1704,1670,1654,1886,2208,2124,2164,2144,2145,2146,2347,2385,2393,2537,2569,2575,2529,2603,2596,2609,2533,2534,2615,2631,2636,2639,2566,2572,2585,2570,4482,4496,3717,4834,4905,5236,6502,5839,5308,4352,5369,7805,7666,7669,7667,5426,5452,8086,2143,7815,7881,8625,8626,8839,8842,8846,9322,10023,10026,10027,10030,10031,10032,10033,10040,10043,10044]'),(625,514,116,2,2,'Children','[468,469]'),(626,1016,115,83,1,'Piano','[1420,1150,1187,1156,1184,24,3056,6059,6062,6063,5931,5790,9123,9126,9130,9132,9138,9154,9157,9165,9166,9167,9171,9174,9175,9179,9359,9365,9369,9289,9300,9305,9309,9313,9314,9316,9318,9321,9398,9400,9419,9421,9431,9432,9434,9444,9474,9484,9492,9500,9517,9582,9667,9669,9673,9680,9681,9684,9687,9692,9803,9808,9813,9864,9865,9866,9867,9869,9870,9873,9874,9881,9962,9963,9964,9965,9972,9974,9990,9998,10002,10003,10004]'),(627,513,116,254,2,'Ambient','[123,1181,55,1075,509,517,1714,1724,1735,1830,377,383,386,387,388,391,1163,1154,1178,1185,1179,1187,1189,1628,34,1352,595,642,646,650,655,658,660,688,657,643,636,639,647,661,664,665,671,672,678,684,685,690,692,694,706,707,715,716,757,768,785,786,787,799,800,806,811,812,816,817,821,828,829,840,977,917,918,927,930,933,934,938,943,969,972,967,960,959,956,953,926,910,965,970,982,874,791,792,981,978,906,751,749,580,581,1209,1210,1212,1214,1215,1237,1242,1290,2072,1891,287,283,274,261,1110,1822,1821,1881,1883,1124,1115,2248,2648,2655,2665,2381,2389,2724,2555,3265,3319,3312,3031,638,3650,4183,3856,2413,2415,2426,2438,2443,2453,2463,2470,2484,2474,3967,3969,3981,3990,566,4642,4945,4946,2457,2489,5681,5676,5771,4438,6504,6583,4697,4700,4701,5266,5285,5288,5268,5267,4739,4735,5264,4717,4738,5276,4693,4694,4698,4690,4688,5960,6191,6202,961,6313,5308,5478,5390,5392,7281,7597,7805,7664,7668,7670,5405,5424,5425,5426,5440,8074,8079,8239,8247,8273,8274,8321,8328,8360,8477,8480,8536,8553,7328,8865,8655,8656,8657,7724,7680,7687,7690,7701,7704,7709,7715,8617,8834,8837,8848,8853,7522,5497,5501,7355,10029,10163,10172,10178,10179,10188,10197,10207,10236,10249,10268,10287,10290,10374,10380,10384]'),(628,516,116,3,2,'Comedy','[470,602,1702]'),(629,518,116,155,2,'Dance / Pop','[499,500,502,506,518,1163,1164,1147,1342,466,494,888,1304,565,1666,1686,1707,1675,1309,2037,2702,2710,2391,2727,2604,2619,2630,2542,2543,2549,2559,2581,2545,2554,2589,2536,2541,2550,2568,2591,2622,2551,2601,2611,2643,2564,2576,2582,2598,2616,2558,2613,2574,2745,3313,516,4190,550,4548,4503,4841,4882,2640,2561,2034,5594,5598,5602,5212,6122,6459,6458,6473,6496,6497,6499,6500,6503,6505,6506,6435,5350,5337,5326,4411,4412,4432,4430,4429,5389,7421,7444,7789,7808,5419,508,8173,8202,8205,8211,8214,8221,8231,8249,8250,8264,8267,8268,8269,8270,8277,8279,8287,8291,8293,8305,8320,8323,8324,8338,8340,8346,8351,8354,8363,8387,8393,8396,8413,8417,8419,8437,8442,8481,8485,8492,8508,8652,7691,7694,7698,7818,7871,7914,8984,10022,10025,10028,10035,10046,10051,10052,10056,10057,10282]'),(630,519,116,304,2,'Dark / Tension','[158,304,314,510,511,513,329,337,1727,1823,1843,1840,1839,1838,1824,383,385,390,391,393,397,1153,1184,472,759,904,769,750,1305,1235,1238,1595,2043,2047,2051,263,2029,1111,2646,2647,2662,2704,2728,2725,2621,2635,2638,2644,2556,2567,2578,2530,2540,2557,2586,2602,2606,2607,2625,2626,2628,2637,2552,2560,2563,2528,2588,2548,2587,2605,2614,2624,2729,3135,3534,3347,2113,2114,2115,2482,2474,2428,2414,3974,3996,3997,3295,4495,5060,3115,4806,4821,4866,4916,4961,4967,4973,4943,4936,4934,2608,2419,2424,2429,2444,2450,2456,2465,2460,2461,2445,5016,2452,2475,2466,5684,5683,1100,2478,2434,2423,5269,4735,4734,4705,4727,4712,5667,6870,5962,5965,5971,5974,5983,5990,5998,6001,6002,6006,6013,6016,6017,6021,6024,6028,6033,6036,6140,6143,6146,6150,6155,6157,6160,6164,6166,6171,6175,6179,6188,6195,6198,6208,6215,6216,6224,6225,6228,6231,6234,6240,6244,6248,6252,6261,6265,6268,6274,6278,6285,6288,6300,6417,6320,6324,6327,6330,6334,6343,6348,6349,6350,6353,6357,6361,6364,6375,6378,6381,6385,4435,4433,4427,5370,5383,5380,5377,7619,7796,5432,5462,8182,8206,8227,8249,8308,8344,8347,8389,8390,8391,8397,8400,8403,8407,8410,8415,8422,8424,8451,8452,8459,8466,8472,8484,8504,8510,8539,8562,8563,8564,8566,8567,8574,8586,8587,8591,7325,8112,8113,8648,8650,7685,7692,7696,7703,7705,7710,7716,7732,8049,8050,8051,8061,8535,7865,7908,8615,7937,7940,7942,7941,7954,7953,7952,7951,7949,7526,9063,9066,9003,10035,10066,10157,10172,10248,10253,10259,10299,10302,10304,10309,10310,10335,10345,10348,10349,10359,10360,10369,10378,10385,10392,10393]'),(631,520,116,43,2,'Electronica','[993,477,947,1211,1216,1624,604,613,2057,2081,1659,1660,1684,1696,1690,1707,1105,1106,281,280,276,2153,2409,2718,2580,2531,2553,2617,2627,2532,3973,4941,5251,5988,5314,5366,7783,7784,7684,7686,8055,10050,10180]'),(632,521,116,97,2,'Metallic / Industrial','[167,1183,1101,1102,1103,1104,514,515,519,1711,1137,561,1600,1606,605,608,1648,359,362,2673,2383,2577,516,3348,4193,4199,4554,4495,4781,4790,4858,4873,4882,4909,4949,361,2468,2460,5684,1100,4733,4718,5943,5944,5945,5946,5947,5948,5949,5950,6064,6065,6066,5951,5955,5965,5968,5989,5994,6009,6016,6228,6257,6281,6285,6290,6307,6410,6378,6385,6390,6394,5319,4428,5466,8165,8166,8208,8238,8276,8282,8286,8297,8319,8343,8399,8410,8443,8444,8546,8554,8558,8840,7951,10159,10360,5941]'),(633,517,116,17,2,'Corporate','[294,506,1728,1719,1828,1137,477,864,881,1285,1287,1293,1296,2573,6497,5379,5371]'),(634,522,116,10,2,'Sci-Fi','[1182,993,1190,564,2562,5413,5414,5453,8545,8529]'),(635,993,116,80,2,'pads','[1074,993,384,389,1200,34,478,666,701,702,708,793,806,807,822,833,834,914,931,944,948,954,963,958,863,1,1232,1297,1578,2078,2073,2670,2377,3125,3130,3145,3155,3160,3164,4852,1336,6410,6361,6367,5388,8071,5436,5468,7695,7711,7385,7393,7958,8620,8830,8839,7948,7509,5505,10096,10104,10160,10167,10168,10181,10187,10189,10192,10211,10214,10229,10231,10235,10283,10292,10308,10334,10340,10364,10382]'),(636,448,37,0,2,'Great Britain',NULL),(637,1052,116,36,2,'elements','[1275,1291,1292,1108,262,260,1131,2038,2024,1883,2020,2247,2398,2407,3155,3160,3169,3317,2259,3029,2379,4460,4831,4855,5007,4964,4968,4969,2448,5659,6958,5966,6304,8462,7330,7681]'),(638,1124,116,542,2,'Synths','[476,726,944,1208,1295,597,600,618,2043,2051,2093,1684,1703,1671,1651,1657,2038,1121,2224,2208,2197,2215,2237,2243,2131,2209,2142,2161,2195,2242,2169,2338,2670,2691,2703,2681,2375,2377,2381,2383,2722,2721,2595,2599,2629,2579,2832,2856,2859,2858,3256,3251,3130,3140,3145,3150,3310,3315,3027,3028,3029,3307,3034,3033,3031,2223,3536,3544,3545,3621,3620,3599,3590,3589,3587,3585,3583,3571,3567,3562,3561,3557,2872,3290,3293,3294,3297,3300,3302,3303,3304,3344,3345,3346,3349,2106,2111,2112,3638,3642,3654,3406,4184,4185,4187,3856,2412,2481,3446,3509,3524,3971,3975,3987,4197,4198,4200,4201,4202,4203,4579,4584,4598,4603,4644,3295,4555,4554,4549,4543,4542,4532,4531,4529,4634,4635,4636,4674,4393,4394,4397,4398,4400,4454,4462,4463,4465,4466,4474,4475,4476,4480,4484,4493,4494,4495,4497,4498,4502,4511,4520,4522,5072,4209,3115,3086,2931,2904,2367,4763,4773,4781,4790,4806,4809,4852,4893,4978,4968,4949,4946,4937,4934,4977,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4387,2689,2034,1155,2457,2461,2476,2464,2436,2473,5629,5683,5691,5746,5734,4975,4976,4438,5866,5879,5908,6132,6122,6084,6076,2469,2467,2459,2447,2458,6465,6471,6484,6487,6488,6491,6492,6501,6507,6803,6789,6757,6659,6616,4711,5259,6441,6449,5633,5642,6859,6978,6970,6938,7216,5977,5981,5987,6021,6024,6183,6193,6310,6314,6413,6406,6402,6401,6327,6343,6349,590,5379,5385,4434,4431,8073,8069,8067,8064,7237,7293,7766,7769,7778,7780,7444,7467,7597,7607,7784,7785,7788,7790,7795,7796,7807,7804,7802,7799,7669,5401,5402,5403,5405,5406,5408,5409,5412,5413,5414,5415,5416,5417,5418,5420,5421,5422,5423,5427,5430,5431,5432,5433,5434,5435,5437,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5457,5458,5459,5460,5461,5463,5464,5465,5467,5468,5469,5470,5471,5472,5473,5476,5477,8074,8076,8078,8081,8083,8085,8088,8090,8176,8177,8238,8257,8373,8384,8430,8465,8491,8537,8538,8540,8541,8543,8544,8547,8565,8568,8573,8576,8578,8579,8583,8590,8594,8862,7318,7323,7324,7332,7335,8865,8654,8648,7689,7697,7699,7700,7702,7705,7706,7713,7721,7671,7674,7675,7672,7673,7365,7366,7369,7371,7372,7373,7376,7377,7378,7379,7380,7381,7382,7383,7384,7386,7387,7388,7390,7392,7391,7393,8099,7737,7739,7741,8047,8048,8052,8053,8054,8056,8057,8059,8060,8530,8605,8606,8607,8608,8609,8610,8611,7835,7862,7868,7876,7880,7881,7885,7890,7893,7897,7928,7933,8637,8644,8646,7960,7962,7963,7965,8668,8669,8670,8671,8672,8673,8674,8612,8616,8619,8621,8622,8623,8627,8628,8831,8833,8835,8836,8838,8840,8841,8843,8844,8845,8846,8847,8849,8850,8851,8852,8854,8855,7951,7950,7948,7947,7527,8867,8873,8874,8875,7731,7730,5499,5503,5505,7340,7349,7362,10036,10055,5456,5404,10429,10437,10454,10472,10512,10539,10559,10613,10630,10634,10635,10668,10676,10746,10856,10878]'),(639,994,116,189,2,'Beats','[123,1302,1204,1221,597,600,1578,2084,2207,2712,2377,2592,2858,3130,3145,3150,3155,3164,3319,3320,3322,3325,3326,2223,3590,3571,3548,3293,3294,3299,3302,3303,3305,3344,3348,2111,2112,3654,4200,4201,4400,4882,4937,2430,2431,2479,2473,4438,5879,5908,6457,6465,6462,6461,6466,6478,6449,5649,6970,5384,5385,7795,7806,7802,7797,5396,5397,5400,5402,5403,5405,5406,5407,5408,5410,5411,5412,5413,5414,5415,5416,5417,5418,5420,5421,5422,5424,5428,5429,5430,5433,5434,5435,5436,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5457,5458,5459,5463,5464,5465,5468,5469,5470,5471,5472,5473,5476,5477,8074,8076,8085,8088,8474,8497,8518,8856,8859,7323,7700,7721,7671,7674,7672,7673,7365,7366,7369,7371,7373,7376,7377,7378,7380,7381,7382,7383,7384,7385,7386,7387,7388,7390,7392,7391,8056,8530,8605,8609,8610,8611,7835,7880,7890,7893,7897,7928,8646,7958,7965,7967,8668,8669,8670,8671,8672,8673,8674,7950,7947,5505,7349,5456,5438,5404]'),(640,995,116,40,2,'Electronic Beats','[1074,1075,499,869,891,1298,2081,261,2131,2209,2691,2595,2571,2623,2629,2579,2856,3621,2872,3300,3306,3349,2106,4185,4197,4516,4965,3609,2034,1155,6501,4412,7790,8248,10037,10039,10053,10104,10234,10381]'),(641,1152,116,49,2,'Drum loops','[1684,1696,281,2375,2381,2383,2546,2614,2570,2859,3125,4184,4202,4203,4579,4598,4603,4644,3295,4548,4397,4752,4755,4756,4763,4773,4781,4790,4806,4809,4893,4914,4941,4944,4946,4928,2689,2466,5691,5722,4975,7237,7754,7766,7784,7802,7669,7901,7963]'),(642,1230,116,1,2,'Mellotron','[6859]'),(643,577,117,8,2,'Accordion / Concertina','[2213,10301,10337,10346,10350,10352,10365,10397]'),(644,580,117,3,2,'Banjo','[9855,9858,10879]'),(645,578,117,22,2,'Acoustic Guitar','[9644,9650,9733,9748,9810,10017,10028,10036,10158,10174,10194,10196,10211,10212,10213,10274,10305,10351,10386,10388,10459,10607]'),(646,579,117,1,2,'Bagpipes / Celtic Pipes','[5652]'),(647,581,117,0,2,'Barrel Organ',NULL),(648,583,117,0,2,'Bassoon',NULL),(649,456,37,0,2,'Netherlands',NULL),(650,582,117,1,2,'Bass','[10169]'),(651,584,117,4,2,'Bells / Tubular Bells','[6216,9026,3624,9819]'),(652,599,117,1,2,'Harp','[10327]'),(653,586,117,0,2,'Celeste',NULL),(654,587,117,0,2,'Cello',NULL),(655,588,117,1,2,'Clarinet','[10306]'),(656,589,117,0,2,'Didgeridoo',NULL),(657,590,117,7,2,'Drums','[3815,3820,9673,10614,10729,10773,10852]'),(658,591,117,3,2,'Dulcimer','[4737,4712,5394]'),(659,592,117,34,2,'Electric Guitar','[6059,9857,9863,9989,10028,10156,10162,10198,10200,10210,10279,10280,10292,10319,10343,10347,10364,10372,10418,10500,10551,10587,10668,10669,10737,10746,10760,10766,10774,10787,10794,10846,10889,10895]'),(660,593,117,52,2,'Ethnic','[2720,2546,2592,2203,3544,3563,3306,3858,3860,3864,2411,3505,3976,4756,4763,4837,4966,4967,4936,2018,1155,2416,2425,2477,2483,5659,5666,5489,5491,5492,5493,5494,5495,5496,5674,5663,6268,5367,5378,8072,7432,8352,8375,8395,8588,7725,7822,7872,7906,7912,8842,10190]'),(661,594,117,0,2,'Flugel Horn',NULL),(662,595,117,7,2,'Flute / Piccolo','[2240,5123,9987,10080,10089,10214,10373]'),(663,596,117,0,2,'Gamelan',NULL),(664,1134,14,11,2,'Tarantella','[2253,2240,2225,2231,2239,2238,2125,2133,2135,2156,7864]'),(665,597,117,3,2,'Hammond Organ','[3803,3773,10044]'),(666,601,117,1,2,'Horn','[9692]'),(667,605,117,4,2,'Marimba','[4076,9696,9814,10333]'),(668,604,117,0,2,'Mandolin',NULL),(669,606,117,0,2,'Oboe / Cor Anglais',NULL),(670,607,117,1,2,'Organ','[8121]'),(671,608,117,2,2,'Pan Pipes','[9855,9863]'),(672,609,117,2,2,'Percussion','[9975,10852]'),(673,610,117,30,2,'Piano','[9696,10040,10089,10096,10176,10188,10192,10209,10214,10241,10265,10273,10275,10283,10287,10291,10296,10297,10298,10300,10307,10311,10323,10326,10371,10382,10388,10390,10575,10798]'),(674,611,117,0,2,'Recorder',NULL),(675,612,117,3,2,'Saxophone','[4322,3773,3866]'),(676,613,117,3,2,'Steel Drums','[3576,5622,7574]'),(677,1156,117,7,2,'Jew\'s Harp','[2253,2135,2156,3538,5037,7864,9800]'),(678,614,117,0,2,'Strings',NULL),(679,618,117,2,2,'Ukulele','[9732,10483]'),(680,617,117,0,2,'Tuba',NULL),(681,616,117,2,2,'Trumpet / Cornet','[3812,10398]'),(682,615,117,0,2,'Trombone',NULL),(683,620,117,8,2,'Violin / Viola','[9696,9959,10186,10239,10241,10274,10295,10327]'),(684,619,117,3,2,'Vibraphone','[3076,10041,10043]'),(685,621,117,2,2,'Whistles / Tin / Penny Whistles','[10256,10483]'),(686,43,1,0,1,'Rap Underscore',NULL),(687,622,117,1,2,'Xylophone','[3861]'),(688,1002,117,0,2,'wa',NULL),(689,1129,117,11,2,'world plucked','[960,2188,2189,5843,8534,7822,7851,9358,9379,9310,9312]'),(690,1143,117,3,2,'Prepared Piano','[1271,9052,9067]'),(691,1159,117,10,2,'Spirit Flute','[2198,2199,2200,4721,5475,8352,8051,8626,10158,10187]'),(692,1177,117,3,2,'Kalimba','[3606,5856,7851]'),(693,1166,117,7,2,'Sitar','[2724,5060,7432,5410,9619,9878,10165]'),(694,1174,117,11,2,'Hang drum','[3552,3864,2428,4635,2419,2416,2464,6304,6320,8549,5941]'),(695,1199,117,2,2,'Koto','[4837,7706]'),(696,1211,117,1,2,'Cuatro Guitar','[2418]'),(697,1208,117,3,2,'Bamboo flute','[2435,2475,6234]'),(698,42,1,9,1,'Rap (Vocal)','[9767,9769,9771,9776,9779,9782,9786,9789,9792]'),(699,1216,117,0,2,'Guitalele',NULL),(700,1219,117,0,2,'Duk duk',NULL),(701,1226,117,2,2,'Guzheng','[4716,4715]'),(702,1234,117,3,2,'Toy Piano','[7172,7148,7134]'),(703,20,1,51,1,'Easy Listening','[342,373,379,822,2224,2208,2232,2241,2243,2144,2377,2385,2720,2570,3987,4574,3746,5866,5050,4377,4352,3803,8622,8625,8831,8835,8850,8957,8976,8999,9006,8131,8125,6060,6061,5931,4280,10010,10013,10016,10017,10126,10129,10207,10286,10366,10454,10467,10483,10644,10808]'),(704,27,1,1,1,'Grooves','[10049]'),(705,1236,117,1,2,'Tampura','[5579]'),(706,1229,117,0,2,'Mellotron',NULL),(707,1237,117,1,2,'Marimbula','[8068]'),(708,1249,117,3,2,'Clock','[9055,9815,10271]'),(709,96,58,30,1,'Panoramic','[389,1189,1166,34,874,2025,1115,3315,3558,3555,2412,2461,2486,8062,10029,10162,10184,10190,10192,10200,10214,10221,10237,10260,10280,10281,10289,10314,10327,10395]'),(710,1250,117,1,2,'Carillon','[9061]'),(711,1256,117,1,2,'Wha guitar','[8123]'),(712,1257,117,1,2,'Wah guitar','[5057]'),(713,645,118,11,2,'Action','[511,1143,4230,7017,5284,6949,6958,5328,5396,5400,8186]'),(714,646,118,35,2,'Adventure','[501,513,1712,1143,1148,740,2024,2407,4499,6920,6929,5281,4713,4723,5263,7399,8167,8185,8190,8450,8455,8458,8478,7317,7339,8114,8117,8649,7877,7943,7944,7358,10339,10443,10496]'),(715,647,118,29,2,'Atmospheric','[1550,517,1718,1724,388,1635,1634,1632,1636,855,1847,1664,1694,2032,2020,2612,5011,4679,5282,5283,5286,5269,5276,5275,5274,5368,8245,8477,7718]'),(716,648,118,20,2,'Bright / Optimistic','[1146,1132,1647,1683,4467,4468,4512,6463,6468,4721,4740,5365,7554,8192,7331,7939,7943,7351,10173,10244]'),(717,649,118,10,2,'Build','[4182,4960,6870,8418,8116,8648,7937,7938,7939,7945]'),(718,650,118,0,2,'Chamber',NULL),(719,651,118,2,2,'Chase','[243,8634]'),(720,652,118,47,2,'Children','[1656,1667,1685,2171,1173,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10125,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155]'),(721,653,118,12,2,'Comedy','[319,328,1353,1672,2019,4521,4963,4964,4965,4942,6495,8634]'),(722,654,118,3,2,'Corporate / Industrial','[1718,389,889]'),(723,655,118,37,2,'Drama','[1148,2031,3277,3278,3282,3283,3284,3286,4808,5010,4973,4939,4933,7068,4700,4705,4720,5273,4696,4704,4722,4695,6685,5384,5484,8368,8581,8595,7752,8857,8861,7329,7723,8927,7696,7858,7941]'),(724,656,118,10,2,'Eerie / Supernatural','[523,1721,395,1799,5008,2435,8189,8424,7319,10264]'),(725,657,118,3,2,'Filmic','[1168,1171,1174]'),(726,658,118,36,2,'Grand / Majestic / Stately','[1144,2025,2400,3584,3566,3275,4547,4460,4461,4499,4962,5640,6528,6552,6701,7409,8209,8229,8292,8350,8408,8476,8629,7939,10184,10203,10204,10250,10255,10261,10267,10269,10272,10342,10389,10548]'),(727,659,118,3,2,'Horror','[338,4938,8632]'),(728,660,118,1,2,'Links / Stings','[5644]'),(729,662,118,86,2,'Mystery / Tension / Suspense','[1145,330,1712,1721,1825,1829,1840,1838,392,1148,1199,1799,770,758,1849,1653,1708,2174,2209,2397,2409,2666,2676,2717,2715,2713,2707,2728,2584,3308,3855,4556,4632,4633,5084,4230,3200,4821,4961,4972,4973,2435,5668,6631,4739,5977,7792,7793,7794,5395,5429,8184,8185,8190,8206,8210,8341,8404,8405,8407,8422,8860,7324,7329,7330,7722,7728,7693,7708,7719,7720,7814,7824,7858,7865,8629,8631,10170,10252,10257,10270,10276,10294,10344,10387,10524]'),(730,661,118,10,2,'Menace','[2023,2641,8226,8405,7865,7909,7940,7942,7946,10242]'),(731,663,118,1,2,'News & Current Affairs','[2711]'),(732,665,118,16,2,'Orchestral / Contemporary Crossover','[4962,4964,4691,4684,5397,8185,8208,8210,8213,8224,8406,8474,7752,8649,8651,7946]'),(733,664,118,3,2,'Nostalgic','[1337,7338,7727]'),(734,666,118,1,2,'Orchestral Effects & Tuning Up','[1177]'),(735,668,118,0,2,'Period',NULL),(736,667,118,21,2,'Pastoral / Landscape / Scenic','[509,340,333,1830,403,406,1144,2184,2401,2723,4533,4506,5010,2018,2486,4730,6710,7566,7709,10237,10260]'),(737,670,118,7,2,'Romantic','[1192,1637,1631,4506,7726,7729,8872]'),(738,669,118,1,2,'Promos','[4726]'),(739,672,118,0,2,'Showbiz',NULL),(740,673,118,1,2,'Sports','[8433]'),(741,674,118,0,2,'Urban',NULL),(742,675,118,1,2,'Vintage Drama','[1191]'),(743,671,118,14,2,'Scene Changes','[380,405,1345,1299,1301,1218,1847,1698,2676,2714,4909,4962,4728,10265]'),(744,676,118,1,2,'Vintage Horror','[5008]'),(745,677,118,0,2,'Vintage Links / Stings',NULL),(746,509,101,54,2,'Nostalgic','[520,1615,1129,2219,2238,2257,1118,2149,2235,2169,2856,3307,3620,3600,3575,3568,3452,3501,3522,3985,2527,4589,4413,4470,5015,4680,2432,5612,5614,5611,6479,6485,6768,6567,5270,4703,6879,6733,6737,5047,5376,7809,7804,8300,2143,7745,7726,7727,7729,8098,8105,7908,8841,8874]'),(747,678,118,0,2,'Violence',NULL),(748,1035,118,185,2,'Film/Cinematic','[1145,1146,1175,1176,227,249,254,290,291,292,296,298,299,314,320,321,322,504,503,510,514,522,335,339,330,1710,1712,1718,1716,1726,1721,1826,1839,1824,404,401,402,406,392,393,395,396,397,399,1143,1189,1152,1165,1144,1191,1195,1192,1193,1196,1198,1156,1638,1167,1799,1806,1813,721,728,739,854,861,891,781,733,732,727,1308,1844,2058,1668,1653,1107,1850,2021,1117,1120,1111,2395,2396,2397,2398,2399,2402,2403,2404,2405,2406,2407,2408,2409,2676,2685,2719,2717,2715,2707,2723,2593,2610,2612,2623,3317,3318,3320,3321,3325,3327,2259,2223,3574,3566,3565,3558,3555,3553,3638,3275,3289,3287,3276,4643,4556,4533,4632,4633,1173,4467,4506,4795,4821,5009,5011,5014,4959,4960,4963,4931,4679,5488,6463,6468,6847,6631,6518,4720,4726,6508,6536,6544,6552,6685,6701,6710,5328,5387,5374,5368,7409,7566,7792,5399,8167,8182,8209,8224,8225,8226,8242,8244,8404,8405,8406,8408,8418,8555,7725,8116,7708,7824,288]'),(749,524,119,10,2,'Big Band','[1157,331,1338,4537,9031,8661,6057,3812,9542,9763]'),(750,523,119,1,2,'Bagpipe Band','[5652]'),(751,526,119,21,2,'Brass Ensemble','[3345,3732,4539,3187,3104,7804,7801,8664,4041,9355,9885,9889,9893,9898,10049,10314,10354,10584,10585,10808,10868]'),(752,525,119,7,2,'Brass Band','[2148,3568,9450,9537,9538,10012,10466]'),(753,527,119,1,2,'Brass Quintet','[9495]'),(754,528,119,5,2,'Dance Band','[355,1608,6746,6747,6748]'),(755,1176,102,39,2,'Sorrowful','[3311,3288,4449,4808,4929,2491,5676,4732,5272,4724,4725,4741,5266,5283,4696,5644,5645,6016,6041,6155,6198,6295,6338,6348,5049,5370,5384,8070,8067,8309,8397,7743,7748,7723,8103,7854,7941,7954,7512]'),(756,529,119,0,2,'Duets',NULL),(757,116,115,1751,1,'Electronic','[994,1074,1074,108,123,123,158,167,1420,1181,1182,1183,259,275,55,1558,993,993,993,1022,1075,1075,1101,1102,1103,1104,292,294,304,314,499,499,500,502,506,506,507,509,510,511,513,514,515,517,518,519,521,329,337,1711,1714,1724,1727,1728,1735,1719,1823,1830,1831,1828,1843,1840,1839,1838,1824,377,383,383,384,385,386,387,388,390,391,391,393,397,389,1137,1137,1163,1163,1164,1147,1154,1153,1178,1185,1190,1179,1187,1189,1166,1628,1628,1635,1634,1643,1632,1167,1188,1200,1184,34,34,1352,1341,1342,466,468,469,472,476,478,477,477,470,494,595,642,646,650,655,658,660,666,679,680,688,657,643,636,639,647,661,664,665,671,672,673,678,684,685,690,692,694,701,702,706,707,708,715,716,723,726,757,759,768,785,786,787,793,799,800,806,806,807,811,812,816,817,821,822,828,829,833,834,840,977,917,914,918,927,930,931,933,934,938,943,944,944,947,948,954,963,966,969,972,967,960,959,956,953,926,910,958,965,970,982,863,864,869,874,881,888,891,791,792,981,978,975,906,904,769,751,750,749,1,1302,1304,1305,561,564,565,580,581,1204,1208,1209,1210,1211,1212,1214,1215,1216,1221,1232,1235,1237,1238,1239,1242,1268,1275,1285,1287,1290,1291,1292,1293,1295,1296,1297,1298,1595,1600,1606,1624,602,597,597,600,600,604,605,608,613,618,356,1578,1578,2043,2043,2047,2051,2051,2057,2093,2072,2084,2081,2081,2078,2073,1648,1666,1659,1660,1684,1684,1684,1696,1696,1697,1699,1686,1690,1702,1707,1707,1698,1703,1662,1704,1670,1671,1654,1651,1657,1675,1105,1106,1108,359,360,362,363,1891,1309,287,283,281,281,280,274,276,263,262,261,261,260,1110,1131,2038,2038,2037,1822,2024,1821,1881,1883,1883,2020,1886,2029,1124,1121,1115,2224,2208,2208,2247,2248,2197,2215,2237,2243,1111,2124,2131,2131,2209,2209,2207,2142,2161,2195,2153,2164,2144,2145,2146,2242,2169,2338,2347,2398,2407,2409,2646,2647,2648,2655,2662,2665,2670,2670,2673,2691,2691,2702,2703,2704,2718,2712,2710,2681,2375,2375,2377,2377,2377,2381,2381,2381,2383,2383,2383,2385,2389,2391,2393,2728,2727,2725,2724,2722,2721,2604,2619,2630,2542,2543,2549,2559,2581,2621,2635,2638,2644,2537,2545,2554,2556,2567,2569,2575,2578,2580,2530,2589,2536,2540,2541,2546,2550,2557,2568,2586,2531,2591,2595,2595,2602,2606,2607,2622,2625,2626,2628,2637,2551,2552,2553,2560,2562,2563,2528,2529,2588,2592,2603,2617,2627,2532,2596,2601,2609,2611,2643,2548,2555,2564,2576,2577,2582,2533,2534,2598,2615,2616,2631,2633,2636,2639,2566,2571,2572,2585,2587,2558,2599,2605,2614,2614,2613,2623,2624,2629,2629,2570,2570,2573,2574,2579,2579,2832,2856,2856,2859,2859,2858,2858,2745,2729,3265,3256,3251,3125,3125,3130,3130,3130,3135,3140,3145,3145,3145,3150,3150,3155,3155,3155,3160,3160,3164,3164,3169,3317,3319,3319,3320,3322,3325,3326,2259,3310,3312,3313,3315,3027,3028,3029,3029,3307,3034,3033,3031,3031,2223,2223,2379,516,516,638,3534,3536,3544,3545,3621,3621,3620,3599,3590,3590,3589,3587,3585,3583,3571,3571,3567,3562,3561,3557,3548,2872,2872,3290,3293,3293,3294,3294,3297,3299,3300,3300,3302,3302,3303,3303,3304,3305,3306,3344,3344,3345,3346,3347,3348,3348,3349,3349,2106,2106,2111,2111,2112,2112,2113,2114,2115,3638,3642,3650,3654,3654,3406,4183,4184,4184,4185,4185,4187,4190,4193,3856,3856,2412,2413,2415,2426,2438,2443,2453,2463,2470,2484,2482,2481,2474,2474,2428,2414,3446,3509,3524,3967,3969,3971,3973,3974,3975,3981,3987,3990,3996,3997,566,550,4197,4197,4198,4199,4200,4200,4201,4201,4202,4202,4203,4203,4579,4579,4584,4598,4598,4603,4603,4642,4644,4644,3295,3295,3295,4555,4554,4554,4549,4548,4548,4543,4542,4532,4531,4529,4634,4635,4636,4674,4393,4394,4397,4397,4398,4400,4400,4454,4460,4462,4463,4465,4466,4474,4475,4476,4480,4482,4484,4493,4494,4495,4495,4495,4496,4497,4498,4502,4503,4511,4516,4520,4522,5072,5060,4209,3717,3115,3115,3086,2931,2904,2367,4752,4755,4756,4763,4763,4773,4773,4781,4781,4781,4790,4790,4790,4806,4806,4806,4809,4809,4821,4831,4834,4841,4852,4852,4855,4858,4866,4873,4882,4882,4882,4893,4893,4905,4909,4914,4916,5007,4978,4961,4964,4965,4967,4968,4968,4969,4973,4949,4949,4941,4941,4943,4944,4945,4946,4946,4946,4937,4937,4936,4934,4934,4928,4977,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,3609,4387,2608,2640,2561,2689,2689,361,2034,2034,2034,1155,1155,2419,2424,2429,2444,2450,2456,2457,2457,2465,2468,2489,2460,2460,2461,2461,2430,2431,2476,2445,2448,5016,2452,2475,2464,2436,2479,2473,2473,2466,2466,5594,5598,5602,5629,5659,5684,5684,5683,5683,5681,5676,5691,5691,5722,5771,5746,5734,5236,5212,4975,4975,4976,4438,4438,4438,1100,1100,5866,5879,5879,5908,5908,6132,6122,6122,6084,6076,1336,2485,2478,2469,2467,2459,2447,2434,2423,2458,6457,6459,6465,6465,6462,6461,6458,6466,6471,6473,6478,6484,6487,6488,6491,6492,6496,6497,6497,6499,6500,6501,6501,6502,6503,6504,6505,6506,6507,6803,6789,6757,6659,6616,6583,4711,4697,4700,4701,5266,5285,5288,5269,5268,5267,4739,4735,4735,4734,4733,4718,4705,5264,4717,4738,4727,5276,4693,4694,4712,4698,4690,4688,5251,5259,6435,6441,6449,6449,5943,5944,5945,5946,5947,5948,5949,5950,6064,6065,6066,5839,5633,5642,5649,5667,6859,6859,6870,6978,6970,6970,6938,6958,7216,5951,5955,5960,5962,5965,5965,5966,5968,5971,5974,5977,5981,5983,5987,5988,5989,5990,5994,5998,6001,6002,6006,6009,6013,6016,6016,6017,6021,6021,6024,6024,6028,6033,6036,6140,6143,6146,6150,6155,6157,6160,6164,6166,6171,6175,6179,6183,6188,6191,6193,6195,6198,6202,6208,6215,6216,6224,6225,6228,6228,6231,961,6234,6240,6244,6248,6252,6257,6261,6265,6268,6274,6278,6281,6285,6285,6288,6290,6300,6304,6307,6310,6313,6314,6417,6413,6410,6410,6406,6402,6401,6320,6324,6327,6327,6330,6334,6343,6343,6348,6349,6349,6350,6353,6357,6361,6361,6364,6367,6375,6378,6378,6381,6385,6385,6390,6394,590,5350,5337,5326,5319,5314,5308,5308,4411,4412,4412,4435,4433,4432,4430,4429,4428,4427,4352,5478,5366,5370,5390,5389,5388,5384,5383,5381,5380,5379,5379,5377,5371,5369,5385,5385,5392,4434,4431,8073,8071,8069,8067,8064,7237,7237,7293,7281,7754,7766,7766,7769,7778,7780,7421,7444,7444,7467,7597,7597,7619,7607,7783,7784,7784,7784,7785,7788,7789,7790,7790,7795,7795,7796,7796,7808,7807,7806,7805,7805,7804,7802,7802,7802,7799,7797,7664,7665,7666,7668,7669,7669,7669,7670,7667,5396,5397,5400,5401,5402,5402,5403,5403,5405,5405,5405,5406,5406,5407,5408,5408,5409,5410,5411,5412,5412,5413,5413,5413,5414,5414,5414,5415,5415,5416,5416,5417,5417,5418,5418,5419,5420,5420,5421,5421,5422,5422,5423,5424,5424,5425,5426,5426,5427,508,5428,5429,5430,5430,5431,5432,5432,5433,5433,5434,5434,5435,5435,5436,5436,5437,5440,5440,5441,5441,5442,5442,5443,5443,5444,5444,5445,5445,5446,5446,5447,5447,5448,5448,5449,5449,5450,5450,5451,5451,5452,5452,5452,5453,5453,5453,5454,5454,5455,5457,5457,5458,5458,5459,5459,5460,5461,5462,5463,5463,5464,5464,5465,5465,5466,5467,5468,5468,5468,5469,5469,5470,5470,5471,5471,5472,5472,5473,5473,5476,5476,5477,5477,8074,8074,8074,8076,8076,8078,8079,8081,8083,8085,8085,8086,8088,8088,8090,8165,8166,8173,8176,8177,8182,8202,8205,8206,8208,8211,8214,8221,8227,8231,8238,8238,8239,8247,8248,8249,8249,8250,8264,8267,8268,8269,8270,8273,8274,8276,8277,8279,8282,8286,8287,8291,8293,8297,8305,8308,8319,8320,2143,8257,8321,8323,8324,8328,8338,8340,8343,8344,8346,8347,8351,8354,8358,8360,8363,8373,8384,8387,8389,8390,8391,8393,8396,8397,8399,8400,8403,8407,8410,8410,8413,8415,8417,8419,8422,8424,8430,8437,8442,8443,8444,8451,8452,8459,8462,8465,8466,8472,8474,8477,8480,8481,8484,8485,8491,8492,8497,8504,8508,8510,8518,8536,8537,8538,8539,8540,8541,8543,8544,8545,8546,8547,8553,8554,8557,8558,8561,8562,8563,8564,8565,8566,8567,8568,8573,8574,8576,8578,8579,8583,8586,8587,8590,8591,8594,8856,8859,8862,7325,7318,7323,7323,7324,7328,7330,7332,7335,8865,8865,8652,8654,8655,8656,8657,7724,8112,8113,8648,8648,8650,7680,7681,7684,7685,7686,7687,7689,7690,7691,7692,7694,7695,7696,7697,7698,7699,7700,7700,7701,7702,7703,7704,7705,7705,7706,7709,7710,7711,7713,7715,7716,7721,7721,7671,7671,7674,7674,7675,7672,7672,7673,7673,7365,7365,7366,7366,7369,7369,7371,7371,7372,7373,7373,7376,7376,7377,7377,7378,7378,7379,7380,7380,7381,7381,7382,7382,7383,7383,7384,7384,7385,7385,7386,7386,7387,7387,7388,7388,7390,7390,7392,7392,7391,7391,7393,7393,8099,7732,7737,7739,7741,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8056,8057,8059,8060,8061,8529,8530,8530,8535,8605,8605,8606,8607,8608,8609,8609,8610,8610,8611,8611,7815,7818,7835,7835,7862,7865,7868,7871,7876,7880,7880,7881,7881,7885,7890,7890,7893,7893,7897,7897,7901,7908,7914,7928,7928,7933,8637,8644,8646,8646,7958,7958,7960,7962,7963,7963,7965,7965,7967,8668,8668,8669,8669,8670,8670,8671,8671,8672,8672,8673,8673,8674,8674,8612,8615,8616,8617,8619,8620,8621,8622,8623,8625,8626,8627,8628,8830,8831,8833,8834,8835,8836,8837,8838,8839,8839,8840,8840,8841,8842,8843,8844,8845,8846,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,7937,7940,7942,7941,7954,7953,7952,7951,7951,7951,7950,7950,7949,7948,7948,7947,7947,7509,7522,7526,7527,8867,8873,8874,8875,7731,7730,5497,5499,5501,5503,5505,5505,5505,7340,7349,7349,7355,7362,9051,9052,9053,9054,9056,9057,9058,9059,9060,9061,9063,9064,9066,8953,8955,8961,8963,8965,8967,8973,8980,8984,8987,9003,9010,7092,5787,5790,3811,3815,3820,4064,4083,4084,4103,4114,9322,9339,9340,9341,9342,9345,9346,9347,9357,9360,9367,9371,9373,9377,9378,9381,9308,9415,9417,9427,9441,9442,9462,9465,9466,9473,9474,9505,9520,9544,9578,9580,9584,9591,9600,9608,9619,9627,9629,9670,9703,9704,9708,9710,9712,9713,9746,9803,9808,9809,9813,9814,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9849,9852,9862,9868,9871,9881,9928,9935,9936,9938,9940,9941,9942,9945,9946,9947,9948,9949,9950,9952,9953,9956,9957,9958,9959,9960,9977,9988,9996,9997,9999,10000,10001,10002,10004,10017,10018,10022,10023,10025,10026,10027,10028,10029,10030,10031,10032,10033,10035,10035,10036,10037,10039,10040,10043,10044,10046,10050,10051,10052,10053,10055,10056,10057,10066,10096,10104,10104,10157,10159,10160,10163,10167,10168,10172,10172,10175,10178,10179,10180,10181,10187,10188,10189,10192,10197,10207,10211,10214,10225,10226,10229,10231,10234,10235,10236,10248,10249,10253,10259,10268,10282,10283,10287,10290,10292,10299,10302,10304,10308,10309,10310,10334,10335,10340,10345,10348,10349,10359,10360,10360,10364,10369,10374,10378,10380,10381,10382,10384,10385,10392,10393,5456,5456,5438,5941,5404,5404,10429,10437,10454,10472,10512,10539,10559,10613,10630,10634,10635,10668,10676,10746,10856,10878]'),(758,984,112,12,2,'Underground','[4858,4418,4419,4420,4423,4424,6101,6435,4411,7366,7732,5941]'),(759,530,119,75,2,'Jazz Band','[1158,1194,416,413,418,293,1827,1159,1160,1161,1197,1641,1642,1647,1644,1643,1740,1664,1705,1671,2035,2026,1428,2222,2226,2241,2243,2233,2256,2123,2127,2132,2137,2140,2158,2159,2234,3036,3035,2254,1676,3342,3859,3863,1673,8857,8662,8661,9371,9391,9399,9409,9413,9414,9425,9457,9458,9487,9509,9512,9537,9538,9666,9667,9742,9764,9765,9934,9984,9985,10041,10042,10286,10332,10375]'),(760,507,101,26,2,'Erotic / Sensual','[2262,3327,3035,2254,3331,3611,4190,3978,4670,4484,4501,4509,4750,5658,6735,6736,7162,8857,7682,7963,8835,8837,8852,8853,7731,428]'),(761,531,119,19,2,'Jazz Rhythm section','[3598,4538,4393,3211,3076,2476,4749,4709,7199,5362,7750,8858,7682,7811,7849,8647,7731,9951,10030]'),(762,532,119,1,2,'Military Band','[5652]'),(763,535,119,39,2,'Other Small Ensembles','[308,316,374,895,897,898,899,729,1307,1308,559,572,584,586,1615,1622,594,611,1682,1129,2219,2134,2154,2155,2653,2656,2667,2671,2684,2590,2618,2764,2777,2851,2846,5819,9026,9396,10366]'),(764,534,119,0,2,'Oompah Band',NULL),(765,533,119,0,2,'One Man Band',NULL),(766,536,119,0,2,'Piano Trio',NULL),(767,537,119,735,2,'Pop / Rock band','[289,300,301,302,305,317,318,512,326,327,373,378,381,382,407,408,409,410,411,379,1151,1630,1633,1640,1646,1645,1188,1339,1344,1375,450,451,456,462,471,473,474,487,479,660,657,639,651,654,664,665,785,786,787,800,807,811,822,828,829,833,839,849,848,856,857,859,865,866,870,884,893,900,901,903,794,549,541,542,543,544,548,552,560,563,567,568,569,570,575,577,578,579,580,581,582,583,587,588,1594,1595,1596,1602,1604,1607,1610,1612,1614,1617,1618,1620,1621,1626,606,607,1398,1649,1652,1666,1669,1692,1701,1658,1703,1695,1665,1663,1108,255,262,260,2036,1884,2017,2165,2224,2147,2163,2191,2247,2215,2227,2237,2235,2264,2307,2327,2356,2658,2659,2660,2663,2669,2672,2674,2675,2677,2678,2679,2680,2682,2683,2693,2694,2695,2688,2698,2701,2703,2705,2716,2709,2708,2706,2654,2725,2722,2721,2632,2594,2620,2547,2558,2535,2597,2760,2772,2805,2808,2832,2841,2825,2829,2752,2745,2732,3037,3074,3071,3064,3062,3060,3058,3054,3053,3044,3251,3250,3246,3242,3235,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,3268,3270,3272,3324,3307,3034,3033,3329,3537,3541,3619,3618,3615,3614,3610,3608,3605,3593,3592,3586,3580,3578,3569,3567,3565,3562,3560,3559,3557,3556,3554,3332,3334,3338,3339,2094,2099,2101,2103,3630,3642,3646,3658,3662,3666,3368,3385,3386,3411,3412,3420,3425,3426,3427,3428,3430,3433,3437,3363,4182,4189,3732,3739,3740,3356,3446,3462,3473,3477,3483,3488,3501,3515,3524,3970,3979,3981,3985,3986,3987,3992,573,574,576,551,4574,4584,4608,4612,4618,4627,4552,4532,4527,4526,4670,4399,4951,4952,4953,4954,4955,4956,4957,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4453,4456,4459,4464,4471,4483,4493,4497,4502,4508,4516,4517,5094,5072,4242,4209,4204,3704,3693,3670,3174,3095,3086,2949,2913,2904,2886,2367,4977,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,1700,5617,5544,5757,5746,5710,5548,5549,5550,5555,5557,5559,5560,5562,5564,5565,5566,5569,5109,5150,5170,5196,5571,5572,5573,5581,5583,5585,5591,3751,5844,5888,6132,6112,6101,6092,2417,2422,2441,6470,6475,6477,6480,6481,6483,6486,6493,6494,6835,6825,6814,6780,6757,6673,6659,6616,6605,6594,6570,6998,7027,6427,6428,6429,6430,6431,6432,6433,6426,6434,5793,5794,5795,5796,5797,5800,5801,5802,5805,5806,5808,5813,5815,5818,5631,7047,6949,6938,7191,7148,7097,5578,5922,3245,5047,4377,4297,3803,5020,3040,7246,7259,7293,7270,7302,7762,7467,7476,7487,7586,7641,7652,7607,7630,7788,7810,7809,7804,7803,7799,7798,8079,8081,8083,8086,8176,8179,8181,8186,8196,8200,8234,8312,8257,8354,8361,8370,8373,8411,8431,8438,8492,8499,8508,8513,8520,8550,8554,8577,7742,7743,7744,7745,7746,7748,7751,7752,7753,7395,7397,7333,7336,8651,7717,8092,8110,7732,7733,7735,7737,7739,7741,8047,8048,8049,8056,7861,7887,8633,8635,8637,7956,7959,7961,8627,8831,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,9018,9020,9023,9024,9025,9027,9029,9030,9032,9033,9034,9035,9036,9037,9041,9068,8989,8993,8999,9008,8933,5057,5937,4300,4311,4317,4362,4358,4329,4322,3773,3822,3866,3941,3954,4010,4023,4060,4074,4084,4104,4165,4167,4168,4171,4279,9191,9193,9194,9287,9289,9304,9318,9400,9407,9412,9456,9463,9464,9469,9476,9501,9515,9524,9525,9526,9527,9528,9529,9535,9571,9575,9576,9652,9660,9668,9675,9682,9686,9690,9693,9697,9699,9701,9707,9709,9714,9716,9719,9724,9726,9728,9730,9731,9734,9736,9737,9738,9740,9741,9744,9750,9752,9754,9756,9757,9759,9760,9762,9797,9804,9805,9807,9815,9821,9824,9825,9826,9827,9876,9882,9966,9967,9969,9970,9971,9973,9979,9978,9980,9981,9982,9983,10000,10010,10032,10043,10347,10355,10362,10394,8528,428,10418,10472,10500,10508,10551,10587,10668,10669,10689,10746,10766,10774,10787,10794,10846,10889,10895]'),(768,203,14,0,2,'Barn Dance',NULL),(769,1027,1,979,1,'Film Music','[1145,1146,1168,1175,1176,1183,227,249,254,55,243,290,291,292,295,296,298,299,304,309,314,319,320,321,322,324,501,503,509,510,511,513,514,517,520,522,522,328,338,339,347,1132,329,337,330,331,333,1710,1712,1712,1714,1718,1716,1724,1726,1727,1728,1735,1721,1719,1823,1837,1832,1830,1825,1826,1829,1828,1843,1840,1839,1838,1824,404,377,401,403,406,380,383,384,385,386,387,388,390,391,392,393,395,396,397,399,389,405,1143,1179,1187,1189,1148,1165,1170,1174,1144,1191,1195,1192,1193,1196,1198,1156,1637,1638,1631,1200,34,56,1799,1806,1813,1353,1389,1345,469,643,721,722,726,728,739,759,840,977,963,956,958,965,970,846,849,853,854,855,861,863,871,874,781,770,758,740,733,732,727,1307,1299,1308,1301,1300,1217,1218,1267,1284,610,1844,1845,1847,1849,2058,2068,1661,1698,1683,1705,1671,1650,1651,1653,1667,1678,1685,1691,1694,1708,1107,1850,276,1109,1112,2038,2031,2024,2023,2019,2025,2029,1128,1127,1124,1123,1122,1121,1119,1114,1115,1117,2213,2236,1120,1111,2209,2395,2396,2397,2398,2399,2400,2402,2403,2404,2405,2406,2407,2408,2409,2646,2647,2662,2664,2666,2676,2685,2703,2704,2719,2717,2715,2714,2713,2712,2711,2707,2728,2721,2553,2593,2605,2610,2612,2565,2584,2829,2732,3316,3317,3318,3320,3321,3322,3323,3325,3326,3327,2259,3311,3314,3027,3029,3308,2223,3534,3539,3610,3606,3600,3588,3584,3574,3566,3558,3555,3553,3634,3638,4182,4183,3855,3865,2482,2474,2414,3968,3974,3975,3986,3275,3289,3288,3287,3276,3277,3278,3281,3282,3283,3284,3286,4197,4198,4448,4442,4443,4444,4445,4446,4447,4449,4450,4452,4451,4643,3296,4556,4549,4539,4533,4530,4523,4632,4633,4638,1173,4460,4461,4467,4468,4499,4500,4502,4503,4505,4506,4507,4510,4512,4518,4521,5084,5060,4230,4209,3200,2931,4795,4808,4821,4831,4904,4909,4909,5007,5008,5009,5010,5011,5012,5013,5014,5015,4959,4960,4961,4962,4964,4966,4967,4968,4969,4972,4973,4950,4949,4948,4938,4939,4940,4942,4943,4944,4946,4947,4936,4935,4934,4933,4932,4931,4930,4929,4928,4679,4680,4681,4682,1673,3609,303,306,334,2018,2419,2424,2429,2444,2450,2435,2456,2457,2465,2468,2489,2491,2460,2461,2430,2431,2487,2445,2446,2448,2451,2454,5016,2455,2452,2425,2477,2464,2436,2490,2492,2462,2466,2472,2449,5659,5684,5683,5681,5676,5668,5488,5734,1100,2486,2459,2447,2439,2434,2423,6463,6464,6468,6485,6489,6490,6491,6492,6495,6847,6825,6825,6631,6518,7057,6920,6929,7017,7017,7068,4732,5272,5278,4700,4701,4702,4708,4724,4725,4741,5283,5286,5288,5269,5267,4735,4733,4731,4718,4707,4706,5281,4713,4719,4720,4730,4717,4727,4727,5273,5275,5284,4723,4696,4694,4704,5274,5277,5263,4740,4728,4722,4712,4703,4699,4690,4686,4691,4684,5640,5644,5645,5667,5677,6508,6528,6528,6536,6544,6552,6685,6692,6692,6701,6710,6859,6870,6879,6885,6901,6949,6938,6988,6958,6958,5951,5955,5960,5962,5965,5966,5968,5971,5974,5977,5981,5983,5987,5988,5989,5990,5994,5998,6001,6002,6006,6009,6013,6016,6017,6021,6024,6028,6033,6036,6041,6140,6143,6146,6150,6155,6157,6160,6164,6166,6171,6175,6179,6183,6188,6191,6193,6195,6198,6202,6208,6215,6216,6220,6224,6225,6228,5663,6231,6234,6240,6244,6248,6252,6257,6261,6265,6274,6278,6281,6285,6290,6295,6300,6304,6307,6310,6417,6413,6410,6406,6402,6401,6397,6320,6324,6327,6330,6334,6338,6343,6348,6349,6350,6353,6357,6361,6364,6367,6375,6378,6381,6385,6394,2641,5328,5361,5479,5363,5364,5365,5370,5391,5387,5384,5383,5380,5376,5375,5374,5372,5371,5368,8073,8070,8068,8066,8065,8064,8062,8063,7409,7399,7554,7619,7566,7783,7784,7791,7792,7793,7794,7794,7796,7806,5395,5396,5397,5399,5400,5401,5422,5423,5424,5426,5427,5429,5432,5437,5442,5443,5444,5475,5484,8167,8167,8179,8184,8182,8185,8185,8186,8186,8187,8189,8190,8192,8206,8208,8209,8209,8210,8213,8214,8222,8224,8224,8225,8226,8227,8228,8229,8232,8235,8238,8242,8244,8245,8247,8252,8252,8292,8297,8301,8308,8309,8310,8317,8319,8319,8321,8327,8328,8341,8344,8347,8350,8354,8360,8368,8369,8373,8376,8379,8381,8383,8389,8386,8390,8391,8395,8397,8398,8403,8404,8405,8406,8407,8408,8410,8418,8419,8422,8424,8433,8450,8450,8451,8452,8455,8458,8459,8460,8463,8466,8472,8473,8476,8477,8478,8484,8503,8504,8510,8512,8539,8555,8562,8563,8564,8565,8581,8586,8587,8591,8593,8595,7752,8857,8860,8861,7325,7326,7317,7319,7320,7324,7327,7329,7330,7330,7331,7332,7334,7339,7338,8865,7722,7723,7724,7725,7726,7727,7728,7729,8112,8113,8113,8114,8114,8116,8117,8117,8648,8648,8927,8649,8649,8650,8650,8651,8651,7681,7685,7690,7692,7693,7696,7697,7702,7703,7706,7707,7708,7708,7710,7714,7718,7719,7719,7720,8099,8050,8051,8057,8058,8059,8060,8061,7814,7821,7821,7824,7854,7855,7856,7858,7858,7862,7865,7868,7876,7877,7885,7903,7904,7908,7909,7909,7917,7921,7932,8629,8629,8631,8632,8644,8645,7964,8612,8613,8614,8615,8617,8619,8620,8621,8844,8846,8847,8848,7937,7938,7939,7940,7940,7942,7941,7943,7944,7955,7954,7953,7952,7949,7948,7946,7945,7509,7512,7518,7522,7526,7527,8872,5497,5501,7341,7344,7351,7353,7354,7355,7358,7362,7364,2538,8950,8950,8958,8958,8977,8977,8986,8986,9003,9003,9003,9008,6055,6061,9324,9325,9326,9327,9328,9329,9330,9331,9337,9340,9341,9344,9376,9379,9380,9303,9549,9548,10066,10184,10215,288]'),(770,205,14,0,2,'Black Bottom',NULL),(771,1167,29,4,2,'West Coast','[2603,2617,2627,2532]'),(772,538,119,0,2,'Quartets',NULL),(773,539,119,5,2,'Seaside / Fairground Band','[591,2190,2136,2686,7574]'),(774,540,119,42,2,'String Quartet','[914,1228,2068,1131,2022,1124,1121,1114,3064,3058,3323,3326,2527,4448,4444,4445,4447,4449,4450,4452,4451,5555,5581,4724,5376,5372,8062,8866,9051,9062,7087,9582,9688,9689,10230,10251,10254,10263,10288,10337,10368,10370]'),(775,1026,1,0,1,'Film',NULL),(776,541,119,7,2,'String Quintet','[1116,4442,4443,4446,4971,4940,4719]'),(777,542,119,1,2,'Symphonic Wind Ensemble','[10316]'),(778,409,31,0,2,'Acid Jazz',NULL),(779,543,119,0,2,'Trios',NULL),(780,1093,119,24,2,'Metal Band','[332,1199,1200,2692,2696,2437,6988,7224,7498,8235,8345,8391,8433,8452,8580,7937,4070,4094,4115,9828,9829,9830,9831,10760]'),(781,1096,119,15,2,'Arabic Ensemble','[1834,406,1251,1270,1272,1668,1693,2021,2252,2220,2228,2229,2230,8375,9037]'),(782,1113,119,47,2,'Soul Band','[1636,1709,1688,1706,2201,2194,2204,2245,2274,2286,2298,2318,2338,2652,2634,2583,2782,2812,2739,3309,3611,3597,4678,1681,4489,3682,3104,3340,3030,5050,8258,8334,8429,8460,9028,8664,6057,6058,3901,9491,9766,9816,9818,9819,9822,9944,9968]'),(783,1116,119,249,2,'Orchestral Strings','[1335,722,723,757,768,853,871,1300,1217,1267,1845,1661,1690,1679,1650,1678,1691,281,1109,1112,2016,2022,2187,2185,2178,1128,1127,1126,1125,1123,1122,1119,1114,2213,2216,2236,2233,1116,2207,2153,2681,2600,2642,3316,3322,3311,3312,3314,3600,3583,3572,3306,2109,3634,3862,2412,2443,2484,2482,3288,4642,3296,4523,4391,4510,4518,5009,5013,5015,4969,4948,4943,4944,4935,4929,2424,2429,2450,2468,2491,2448,5016,2455,2492,2462,6464,6479,6825,7057,4701,4702,4725,5266,5279,5287,5288,5267,4731,5264,4729,4727,4694,5277,4712,4699,4698,4690,4688,4686,6445,6879,6240,5360,5361,5364,5391,5380,5379,5375,5378,8073,8069,8068,8065,8064,8063,7791,7807,7806,7805,7800,5397,5399,5401,5425,5474,8231,8232,8376,8386,8460,8463,8484,8503,8506,7320,7724,7688,7379,8061,7821,7933,8645,8614,8618,8848,7955,7952,7949,7945,7512,5503,9070,8997,7080,7082,7084,7089,7095,6055,6060,6063,5791,4141,9167,9175,9325,9335,9343,9355,9356,9359,9362,9310,9434,9444,9501,9759,10181,10201,10218,10221,10240,10243,10246,10266,10271,10275,10278,10281,10289,10293,10295,10296,10300,10303,10312,10314,10315,10316,10317,10318,10320,10321,10322,10328,10330,10331,10334,10338,10361,10363,10373,10376,10379,10383,10390,10391,10393,10395,10396,10399,10414,10443,10495,10497,10498,10539,10577,10584,10585,10586,10587,10603,10630,10667,10844,10856,10861]'),(784,1122,119,2,2,'Balkan','[1340,585]'),(785,1148,119,20,2,'Latin Ensemble','[593,602,603,612,614,615,616,620,2255,2257,2258,2138,2166,2157,3328,3331,3337,9432,9543,10038]'),(786,1254,119,22,2,'Folk Band','[8663,8137,8133,8128,6739,6745,4041,9435,9461,9475,9490,9496,9516,9646,9648,9654,9656,9658,9662,9859,9860,10306]'),(787,623,120,32,2,'Bells / Chimes / Mark Trees','[1187,917,914,918,937,956,910,1207,1208,1239,1822,2657,2670,2600,2786,2818,2752,3539,2109,3380,3432,4528,4456,4518,6300,8864,9361,9363,10187,10618,10619,10724]'),(788,1259,119,0,2,'Traditional dance band',NULL),(789,624,120,0,2,'Cymbals',NULL),(790,625,120,4,2,'Death Drum','[295,3314,4706,6295]'),(791,626,120,52,2,'Featured Percussion','[11,1233,617,619,2078,2073,1886,2211,2225,2231,2239,2238,2125,2130,2133,2135,2149,2162,2657,2661,2662,2703,2704,2712,3260,3323,3032,3561,3857,4528,5007,4737,6001,7796,5409,8187,7334,7372,8864,8615,9065,7078,10157,10174,10176,10200,10213,10357,5404,10614,10644,10773]'),(792,627,120,0,2,'Finger Clicks',NULL),(793,628,120,1,2,'Finger Cymbals','[10210]'),(794,629,120,3,2,'Glockenspiel / Music Box','[651,3497,6692]'),(795,631,120,0,2,'Human Beat box',NULL),(796,630,120,0,2,'Gongs',NULL),(797,632,120,0,2,'Kits',NULL),(798,634,120,0,2,'Military Percussion',NULL),(799,633,120,31,2,'Latin Percussion / Drums','[608,618,3576,3550,3301,3345,3346,4194,4546,4545,4544,4524,4520,2418,2420,2421,5137,5856,6718,6735,6736,7200,7190,7162,590,7385,9432,10058,10329,10377,10466]'),(800,635,120,144,2,'Percussion / Drum Grooves','[1420,846,1123,2250,2253,2221,2408,2649,2651,2664,2687,2700,2599,2539,2565,2579,2792,3073,3042,3032,2379,3534,3535,3540,3545,3546,3620,3602,3599,3573,3564,3290,3387,3402,3405,3416,3431,3435,3865,2426,3458,4542,4535,4529,4634,4454,4479,4486,4870,4873,4978,4934,4387,303,2464,2490,2472,2440,4976,3746,2439,6487,6490,6491,6648,6583,5277,7216,5971,6021,6024,6028,6157,6160,6166,6171,6179,6188,6215,6220,5389,5587,8068,7757,7769,5461,8187,8300,8310,8317,8386,8425,8504,7332,7847,7883,7962,7358,2538,9415,10059,10066,10170,10176,10227,10229,10243,10262,10292,10301,10305,10324,10372,10425,10428,10430,10443,10444,10447,10467,10483,10514,10524,10575,10584,10586,10607,10618,10619,10634,10635,10636,10652,10702,10712,10718,10726,10729,10737,10830,10844,10860,10862,10870]'),(801,636,120,2,2,'Sleigh Bells','[3462,7097]'),(802,637,120,0,2,'Snares',NULL),(803,639,120,13,2,'Tambourine','[342,1300,1109,2240,3452,5626,5567,6484,6729,7751,7316,8097,7864]'),(804,638,120,7,2,'Solo Percussion','[3027,3601,3395,4457,5486,5966,5998]'),(805,640,120,0,2,'Tam-Tam',NULL),(806,641,120,16,2,'Timpani','[4539,10317,10318,10330,10376,10495,10496,10498,10548,10559,10577,10585,10603,10630,10798,10838]'),(807,643,120,10,2,'Tuned Percussion','[1389,475,977,956,10207,10228,10286,10358,10425,10428]'),(808,642,120,0,2,'Tom-Toms',NULL),(809,644,120,78,2,'World Percussion','[309,966,967,960,609,2021,1881,1883,2188,2189,2205,2210,2192,2664,2720,2546,2857,2729,3072,2374,3309,3542,3613,3577,3572,3551,3548,3297,3298,3299,3304,2109,3373,4183,3858,3860,3864,3505,3976,3991,4540,4534,4672,1639,4870,4905,4681,4682,5487,5490,2488,2442,5843,6268,7780,5455,5474,8395,7709,7822,7851,7872,8630,8841,8854,10080,10168,10186,10190,10209,10223,10228,10230,10233,10350,10365,10513,10676]'),(810,1131,120,12,2,'Claps','[3391,3414,5629,6460,6471,6474,7007,8288,7316,10513,10681,10870]'),(811,1109,120,7,2,'Marimba','[2600,1639,9344,9348,9349,9528,10196]'),(812,1142,120,2,2,'Goblet drum','[1253,7725]'),(813,1133,120,1,2,'bodhran','[1306]'),(814,1169,120,4,2,'Egg shaker','[2786,2799,5633,8646]'),(815,1171,120,3,2,'Cajon','[3070,8435,8103]'),(816,1164,120,29,2,'Taiko','[4197,4198,3296,4638,5084,3200,5007,4966,2465,2466,5492,4707,4706,5284,5677,5968,6410,6330,7791,5401,5475,8244,8301,7714,8051,8614,8847,10703,10861]'),(817,1191,120,16,2,'Hand Percussion','[4392,4483,2949,334,5666,8066,8473,8616,8830,8844,10198,10228,10394,10696,10727,10812]'),(818,1194,120,1,2,'Wood Block','[4510]'),(819,1210,120,0,2,'Bongos/Congas',NULL),(820,1196,120,5,2,'Tabla','[5060,5579,7432,7710,10165]'),(821,1235,120,1,2,'Spoons','[7109]'),(822,679,121,66,2,'Accordion / Concertina','[520,896,610,1845,609,617,619,2240,2225,2239,2125,2130,2133,2135,2149,2162,3538,3568,4194,3857,3865,3463,4542,4536,4455,4470,4481,4221,5617,5699,5137,5899,6479,6768,6560,6561,6562,6563,6564,6565,6566,6567,6568,4709,6909,7036,6453,7214,6737,7148,7197,5028,8393,2212,7712,7864,8870,6569,9393,9395,9470,9485,9490,9524,10313,10329]'),(823,680,121,332,2,'Acoustic Guitar','[259,310,315,323,325,354,353,352,351,349,348,345,344,343,342,341,346,402,1354,953,952,902,589,1205,1206,1222,1233,1273,1274,1275,1276,1279,1280,1281,1284,600,2081,1109,1886,1127,2160,2208,2193,2197,2206,2239,2236,1118,2235,2665,2687,2375,2387,2389,2722,2799,2818,2821,2837,3039,3073,3072,3070,3068,3066,3056,3052,3042,3265,3256,2214,2374,2203,3313,2254,2379,3540,3620,3600,3582,3575,3561,3365,3366,3367,3369,3371,3372,3374,3375,3376,3377,3378,3370,3379,3381,3382,3383,3387,3388,3390,3395,3396,3397,3398,3399,3400,3402,3403,3404,3407,3408,3409,3413,3416,3417,3418,3419,3422,3423,3424,3429,3431,3432,3434,3435,3436,3438,3439,3440,3441,3443,3444,3445,3727,3731,3734,3735,3736,3737,3744,3452,3463,3470,3508,3509,3512,3982,3983,3991,2527,4195,4196,4594,4558,4535,4531,4639,4391,4393,4394,4400,4479,4500,4515,4519,4221,3223,2931,306,2451,2479,2449,2440,5610,5687,5685,5683,5671,5541,5543,5699,5546,5553,5567,5181,5589,4742,5866,6084,2471,6457,6466,6467,6469,6474,6478,6479,6484,6487,6488,6490,6496,6501,6507,6768,5105,5106,5799,5803,5809,5811,5816,5658,6901,7036,7214,5663,6718,6719,6723,6727,6729,6733,6735,6737,7203,7201,7200,7199,7190,7172,5037,5377,5372,5587,7769,7780,7807,5424,5458,8188,8204,8218,8284,8300,8310,8311,8323,8361,8376,8402,8413,8421,8423,8435,8442,8445,8462,8465,8491,8506,7749,7751,7753,7395,8862,7315,7688,7689,7697,7712,7717,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,7901,7906,8626,8836,8840,8841,8846,8850,8852,8855,7518,7344,7358,6753,4033,9386,9388,9428,9451,9472,9478,9492,9507,9532,9533,10049,10223,10230,10231,10233,10353,10358,2261,10400,10430,10447,10514,10636,10662,10681,10696,10702,10712,10820,10862,10879]'),(824,684,121,35,2,'Bass','[2248,2125,2133,3027,3601,3364,4491,4756,6467,6397,7754,7797,5423,8317,8445,7847,8630,8620,9354,9533,10262,10301,10319,10346,10352,10357,10365,10377,10386,10397,10466,10467,10662,10717,10737]'),(825,682,121,26,2,'Banjo','[352,351,349,2152,2653,3538,3617,3377,3429,3095,5541,5543,6490,5804,5807,5809,5810,5812,5816,7183,7164,7109,7316,7883,7351,9402]'),(826,681,121,0,2,'Bagpipes / Celtic Pipes',NULL),(827,683,121,0,2,'Barrel Organ',NULL),(828,686,121,8,2,'Bells / Tubular Bells','[1298,4711,5455,7901,7938,7955,7353,10227]'),(829,685,121,1,2,'Bassoon','[4939]'),(830,1224,21,8,2,'Minimal','[2485,2478,7216,5366,5377,8136,9627,10040]'),(831,687,121,0,2,'Bugle',NULL),(832,688,121,2,2,'Celeste','[468,1217]'),(833,691,121,19,2,'Clarinet','[520,1354,1389,1337,1428,2185,2151,2152,2154,2155,2230,3288,4940,4709,4686,5815,5791,9569,10332]'),(834,689,121,41,2,'Cello','[324,1179,726,954,963,1110,1881,1118,2668,2685,2837,4966,4932,2490,5606,5272,4708,5283,5285,5645,6692,6879,6901,6719,7203,5363,5376,8070,8066,7778,8245,8247,8301,8398,8455,8466,8512,8843,9099,6753,9566]'),(835,690,121,4,2,'Church Organ','[1829,2721,4697,8451]'),(836,692,121,0,2,'Didgeridoo',NULL),(837,694,121,4,2,'Dulcimer','[4703,6536,8050,7815]'),(838,693,121,0,2,'Drum Solo',NULL),(839,696,121,3,2,'Electric Organ','[10634,10727,10808]'),(840,695,121,268,2,'Electric Guitar','[315,476,642,650,658,679,680,688,689,647,661,672,673,678,684,685,687,692,693,708,793,799,930,938,948,958,906,905,562,1212,1214,1283,1291,1294,608,621,2084,2078,1696,287,2029,2250,2207,2650,2665,2667,2691,2700,2389,2720,2637,2571,2821,3239,638,3542,3600,3599,3587,3573,3564,3552,3298,3301,3349,3638,3391,4183,4185,4186,4187,3743,2410,2414,3505,3508,3513,3519,3966,3968,3971,3976,3977,3980,3984,3990,4198,4556,4547,4540,4539,4634,4636,4675,4673,4395,4398,4399,4480,4486,4488,4491,4505,4507,4510,4511,4513,4514,4517,4519,4230,3187,2367,303,2476,2445,2479,2490,2492,5622,5666,5684,5681,5722,5746,5734,5546,5548,5856,5866,5908,6132,2467,2439,6803,6789,6648,6583,7057,6441,5949,5649,6978,6958,5965,6041,6140,6202,5663,6723,961,6248,6338,6348,5578,5050,5028,5042,5037,5049,4352,5389,5388,5392,7224,7281,7757,7766,7778,7421,7444,7785,7786,7803,7801,7797,5412,5446,8090,8232,8250,8270,8300,8317,8257,8327,8397,8413,8437,8466,8480,8497,8504,7750,8856,7328,7334,7724,7695,7699,7700,8100,8061,8535,7847,7967,8671,8673,8613,8619,8620,8622,8623,8624,8625,8830,8835,8837,8838,8844,8845,8849,8853,7518,7730,7340,8125,8121,8118,6055,4165,9166,9174,9397,9420,9479,9493,9499,9522,9535,9608,312,10215,10217,10277,10324,10325,10354,10362,10377,10398,10428,10472,10508,10512,10524,10539,10613,10618,10619,10635,10652,10681,10717,10726,10798,10838,10844]'),(841,698,121,31,2,'Flute / Piccolo','[1112,2225,2238,2156,2732,3613,3572,3570,3551,3550,3861,4545,4544,4540,4391,303,2461,2440,5734,6068,4719,5263,4737,8062,8425,8473,7326,9065,9534,10223,10454]'),(842,697,121,3,2,'Ethnic','[1624,5677,10726]'),(843,699,121,0,2,'Gamelan',NULL),(844,700,121,24,2,'Glockenspiel / Music Box','[418,520,666,846,859,863,871,1651,2642,3529,4470,4935,2423,6474,6892,6978,5434,7527,10254,10263,10338,10341,10658,10812]'),(845,701,121,28,2,'Hammond Organ','[418,562,1253,2792,2858,3582,3560,3666,4189,3462,4398,4242,3211,3187,3174,3104,2886,4928,3609,5137,5888,6472,6998,4708,5382,4103,4279,9534]'),(846,702,121,10,2,'Harmonica','[2169,2214,3735,3519,6729,7172,2212,6753,9516,10551]'),(847,408,31,2,2,'1950s Jazz','[1158,9413]'),(848,704,121,30,2,'Harp','[1826,1156,2068,1821,2185,1124,1119,3031,3539,3862,4518,5009,2491,2446,5123,5272,6188,6324,8071,8473,8612,8618,8848,7355,3624,10239,10295,10338,10395,10399]'),(849,703,121,0,2,'Harmonium',NULL),(850,705,121,5,2,'Harpsichord','[1219,1220,1226,3384,3865]'),(851,706,121,1,2,'Horn','[7773]'),(852,707,121,0,2,'Hunting Horn',NULL),(853,708,121,0,2,'Lute',NULL),(854,709,121,46,2,'Mandolin','[351,1300,2231,2238,2162,2198,2199,2200,2156,2693,3071,3546,3568,3727,3744,3452,3458,3463,3470,3483,4589,4479,306,5636,5543,5560,5123,5181,5899,4740,4703,5812,6727,6733,7183,7164,7134,7120,5363,5391,5375,5373,3040,7773,9322,9305]'),(855,710,121,21,2,'Marimba','[3589,3427,4523,4672,4462,4491,2442,6464,6471,6488,5263,7379,7912,8644,7967,5499,7341,7344,7347,7353,7360]'),(856,711,121,1,2,'Oboe / Cor Anglais','[4741]'),(857,712,121,11,2,'Organ','[1249,4455,4485,5622,6092,7630,7786,7809,5428,5449,10262]'),(858,713,121,0,2,'Pan Pipes',NULL),(859,714,121,5,2,'Percussion','[8125,10215,10313,10400,10414]'),(860,715,121,602,2,'Piano','[307,310,311,323,324,353,346,347,1132,1714,1724,1823,1841,1837,1832,1835,375,377,384,386,1637,34,56,1806,1813,1354,1389,1342,476,646,666,651,654,661,692,693,694,702,706,707,715,716,722,726,739,793,799,817,822,834,918,927,931,933,937,944,948,954,963,959,958,965,970,982,846,853,863,871,791,792,1302,1204,1239,1253,1254,1267,1284,1286,1288,1295,1298,1578,2051,2093,1398,1661,1704,1679,1651,1657,1691,1851,287,286,270,1131,1112,1134,1135,1136,1822,2016,2186,2181,2177,2182,2183,2176,2175,2033,1127,1126,1125,1123,1122,1121,1114,1115,2253,2248,2251,2216,1118,2124,2161,2155,2235,2153,2668,2681,2559,2554,2580,2595,2553,2571,2623,2544,2565,2570,2860,2732,3073,3316,3318,3323,3326,3310,3311,3312,3313,3028,3534,3544,3545,3601,3598,3595,3589,3588,3583,3582,3574,3573,3570,3291,3335,3634,3650,3364,3380,3389,3410,3415,3421,3739,3740,3743,3860,3862,2426,2428,566,3289,3288,3277,3278,3280,3281,3283,3286,4640,4641,4442,4443,4445,4447,4449,4450,4452,4388,4389,4413,4414,4642,4558,4555,4550,4549,4530,4528,4524,4523,4676,4675,4395,4454,4455,4458,4390,4415,4485,4500,4221,3693,3223,3211,3095,2931,4752,4831,4834,4840,4866,4904,4914,4916,5010,5012,5013,5014,5015,4969,4971,4950,4949,4948,4939,4943,4944,4945,4947,4933,4930,4680,334,2468,2430,2431,2487,2448,2454,2455,2462,5771,5757,5212,5017,4750,5844,5899,6112,1336,2442,2423,6460,6464,6462,6461,6478,6485,6489,6491,6504,6768,6648,7057,4687,4683,4685,4689,4692,4710,4711,4732,5265,5270,5271,5272,5278,4701,4725,5279,5285,5286,5269,4731,5264,4729,5273,5275,4696,4686,5803,5805,6445,5644,6685,6692,6879,6885,6892,6901,7007,7047,6949,6453,5951,5962,5983,5989,5990,6006,6016,6036,6155,6198,6202,6208,6216,6220,6244,6248,6252,6261,6295,6299,6300,6304,6314,6417,6413,6406,6397,6350,6357,3803,5361,5362,5370,5388,5382,5380,5376,5373,5372,5367,5385,8070,8064,7757,7597,7619,7566,7785,7786,7791,7795,7803,7801,7800,7798,5407,5420,5425,5426,5433,5435,5436,5443,5451,5473,5474,8083,8090,8163,8167,8176,8180,8188,8189,8192,8195,8204,8212,8214,8218,8222,8228,8230,8251,8266,8279,8283,8284,8296,8299,8301,8304,8309,8310,8318,8321,8324,8327,8328,8351,8360,8368,8369,8379,8381,8383,8384,8385,8386,8397,8398,8402,8418,8419,8421,8422,8423,8427,8463,8465,8477,8491,8492,8503,8510,8511,8512,8541,8560,8570,8574,7747,7749,7750,8858,8859,8861,7326,7318,7320,7327,7331,7332,7333,7338,7723,7726,7727,7729,8927,7682,7683,7684,7688,7689,7690,7701,7712,7717,7718,7372,8095,8050,8057,8058,7811,7816,7821,7839,7845,7849,7854,7855,7856,7858,7862,7868,7876,7877,7903,7904,7908,7914,7917,7921,7926,7928,7932,8647,7956,7958,7963,7964,8674,8624,8628,8837,8849,7941,7955,7954,7953,7952,7949,7948,7945,7509,7512,7522,7527,8868,8871,5497,5499,5501,5503,7344,7349,7354,7355,7362,7364,2538,9097,9053,9062,9064,8957,8975,9006,7079,7085,7089,6060,5344,3627,9354,9560,9570,10234,10235,10243,10245,10264,10271,10308,10315,10322,10324,10334,10335,10337,10341,10351,10356,10357,10381,10383,10400,10414,10459,10495,10497,10498,10513,10514,10548,10559,10667,10702,10703,10718,10727,10838,10861]'),(861,716,121,0,2,'Recorder',NULL),(862,717,121,33,2,'Saxophone','[416,413,1340,2236,2161,2150,2167,3035,2254,3598,3332,3745,4386,4538,4474,4501,3746,4749,5658,4377,4436,7800,7798,7682,7881,8635,7731,3941,4022,4064,4074,4082,4104]'),(863,718,121,1,2,'Steel Drums','[7897]'),(864,719,121,2,2,'Trombone','[10718,10860]'),(865,720,121,13,2,'Trumpet / Cornet','[1341,3337,4555,3609,6988,7630,8229,8240,8476,9029,5107,3821,4077]'),(866,722,121,59,2,'Ukulele','[896,2693,2786,2792,2821,3260,3256,3535,3392,3393,3394,3401,3405,3442,3492,3497,3513,3522,3528,3529,3533,3970,3992,4594,4551,4392,4500,5636,5687,5181,6462,6461,6467,5798,5814,6892,6909,7007,7036,5028,5042,7574,8288,8427,8982,9467,9468,10444,10644,10658,10676,10703,10717,10812,10820,10830,10860,10862,10868]'),(867,721,121,5,2,'Tuba','[3861,3497,4481,4703,9504]'),(868,723,121,27,2,'Vibraphone / Xylophone / Marimba','[3316,3857,4755,5013,5014,5617,8073,8069,8065,8063,7773,8361,8427,8445,8506,8052,7849,8613,10314,10370,10397,10447,10467,10607,10636,10712,10724]'),(869,724,121,69,2,'Violin / Viola','[2025,1125,1122,2251,2221,2144,2145,2146,2653,2684,2687,2565,2856,3037,3066,3060,3577,3575,2526,4458,4470,4808,4840,4967,4968,4929,2472,5671,5549,1336,6560,6561,6562,6563,6564,6565,6566,6567,6568,4692,4700,4708,4725,4741,4730,4727,4699,4688,8189,2143,8375,8376,2212,7681,7694,7704,7707,7082,7091,6569,5107,9161,9164,9431,9944,10298,10329,10333,10388]'),(870,1076,121,62,2,'Classical guitar','[310,313,1179,896,1306,1221,2072,1671,2250,2221,2262,2661,2726,2857,3052,3327,3032,3595,3550,4190,4194,3978,3985,3986,4589,4640,4641,4478,4481,4484,4509,2451,2432,2436,2472,5609,5612,5613,5614,5611,5636,5676,5675,5633,6736,7162,8067,8066,8065,9098,9097,8133,8131,8125,8121,4280,4302,9481,312,10239,10256,10320]'),(871,288,12,0,2,'Stealth',NULL),(872,725,121,1,2,'Whistle / Tin & Penny Whistles','[10444]'),(873,1080,121,17,2,'Slide Guitar','[323,2649,2651,2684,3546,3614,3602,3991,4550,4546,4459,8860,8101,8836,8839,8851,8123]'),(874,1087,121,35,2,'Dobro guitar','[325,354,353,352,349,348,345,344,343,342,341,1171,2211,2160,2193,2799,3731,3734,4541,4637,4458,306,5799,6737,7183,7164,7134,7120,7109,7197,8118,9323,9401,9402,9861]'),(875,1088,121,10,2,'Upright Bass','[343,2231,2149,2214,3575,3290,3492,4392,2430,2432]'),(876,1110,121,1,2,'Kora','[1639]'),(877,1100,121,1,2,'Bandoneon','[1835]'),(878,1120,121,9,2,'Fiddle','[1340,2667,3617,3693,3076,5798,5801,5804,5810]'),(879,1123,121,27,2,'Electric bass','[2084,2649,2651,2700,2860,3070,3535,3613,3552,4644,4545,4544,4529,4636,4486,4387,334,2439,6472,5277,5814,7216,7162,8425,8577,7730,10236]'),(880,1139,121,21,2,'Electric Piano','[1232,1297,3536,3602,3587,3564,3346,2106,4543,4673,4394,8071,7754,5423,5428,8576,4141,9342,9934,9960,10325]'),(881,1140,121,3,2,'Melodica','[1233,9408,9504]'),(882,1153,121,5,2,'Celesta','[1126,1119,5011,7351,9433]'),(883,1141,121,1,2,'Pump Organ','[1250]'),(884,1158,121,1,2,'Bouzouki','[2130]'),(885,1215,121,10,2,'Double Bass','[5626,9064,9323,9509,10245,10305,10313,10333,10341,10368]'),(886,1253,121,3,2,'Synth','[8980,8984,9006]'),(887,1160,121,1,2,'Balafon','[2192]'),(888,1252,121,4,2,'Clap','[8980,8982,9989,10658]'),(889,1175,121,4,2,'Theremin','[3260,3246,3458,3470]'),(890,1209,121,1,2,'Glass Marimba','[5016]'),(891,544,122,5,2,'A Cappella','[467,3373,3414,4677,571]'),(892,545,122,26,2,'Angelic / Heavenly Choir','[2032,3374,3282,4589,5659,4732,4736,5282,5288,4730,4721,4694,7326,8927,7693,7715,8617,8832,7938,7080,7082,7089,5786,10059,10089,10221]'),(893,546,122,3,2,'Ballad','[580,581,589]'),(894,547,122,0,2,'Barber Shop',NULL),(895,548,122,0,2,'Boy / Girl Soprano',NULL),(896,549,122,9,2,'Chant','[2752,5797,5807,5812,5817,5820,5410,8854,2261]'),(897,550,122,54,2,'Choral / Choir','[383,1663,2401,2404,2405,2650,2685,2728,2723,2553,2599,3317,3318,3320,4594,4632,4795,4960,6920,6929,7068,5106,5645,6508,6536,6544,6701,2641,5050,5400,5475,8184,8190,8245,8328,8407,8433,8451,8455,8478,8593,7722,8117,8651,7909,8950,8977,8986,9166,9375,9285,10179,10204,10266]'),(898,552,122,0,2,'Comedy',NULL),(899,551,122,1,2,'Choral / Classical','[10270]'),(900,553,122,4,2,'Country','[9644,9646,9648,9650]'),(901,556,122,0,2,'Gregorian Chant',NULL),(902,554,122,0,2,'Gangster Rap',NULL),(903,557,122,0,2,'Human Beatbox',NULL),(904,555,122,3,2,'Gospel','[3335,4668,9975]'),(905,559,122,1,2,'Jazz','[1161]'),(906,558,122,0,2,'Hymns',NULL),(907,560,122,0,2,'Madrigals / Plainsong / Plainchant',NULL),(908,561,122,4,2,'Operatic','[1710,2398,5017,4750]'),(909,564,122,3,2,'Rap','[4676,10034,10039]'),(910,562,122,41,2,'Pop / Rock','[549,541,542,543,544,548,552,562,563,564,565,567,568,572,575,577,578,579,582,583,587,588,1596,1600,1602,1604,1608,1610,1612,1615,1618,1620,1621,1626,566,550,551,4551,6428,9699,10644]'),(911,563,122,0,2,'Quirky',NULL),(912,565,122,1,2,'Scat','[1159]'),(913,566,122,0,2,'Sea Shanties',NULL),(914,567,122,324,2,'Solo Voice','[1833,1635,1375,855,1624,591,603,594,604,609,611,612,620,2057,1690,1662,1106,2026,1821,2307,2860,2729,3037,3074,3068,3062,3058,3056,3054,3042,2861,2862,2863,2864,2865,2866,2867,2868,2870,2871,3268,3270,3272,3322,3309,3328,3329,3331,3342,3299,3303,3332,3334,3335,3337,3338,3339,2094,2099,2101,2103,3365,3364,3366,3367,3368,3369,3371,3372,3375,3376,3377,3378,3370,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3363,4187,4190,3727,3731,3732,3734,3735,3736,3737,3739,3740,3743,3744,573,574,576,3287,4195,4196,4612,4552,4548,4675,4678,4670,4951,4952,4953,4954,4955,4956,4957,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4456,4978,4977,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,3340,5626,5541,5544,5546,5549,5550,5553,5555,5557,5560,5562,5567,5569,5573,5581,5583,5589,5591,4976,6475,6481,5284,5105,5106,5793,5794,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5813,5814,5815,5816,5817,5818,5819,5820,7201,7200,7197,590,3040,5579,5587,8072,5419,8184,8232,8234,8247,8321,8370,8431,8435,7742,7743,7744,7745,7747,7748,7749,8857,7395,7397,8862,7336,7388,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8110,7733,7735,7737,7739,8047,8048,8645,7956,7959,7961,7965,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8961,9552,8528,5942]'),(915,569,122,2,2,'Spanish / Latin Vocal','[615,2262]'),(916,568,122,0,2,'Songs',NULL),(917,570,122,1,2,'Sports / Football Chants','[9728]'),(918,571,122,4,2,'Ululation / Ululating','[9406,9499,9926,9951]'),(919,572,122,23,2,'Vocal Effects','[494,1692,1697,2576,3296,4498,8578,7334,9054,9010,7092,5937,5341,5343,9526,9531,9534,9878,9959,9995,10037,10206,9872]'),(920,574,122,11,2,'Whistling','[467,1695,6469,6496,8284,8288,9500,10652,10662,10830,10870]'),(921,575,122,27,2,'World / Ethnic Vocal','[1022,1833,1306,2188,2210,2192,2857,2374,3542,3548,3304,3858,4676,4673,4674,4668,4677,4672,4870,5843,5677,8395,8856,7714,7871,2538,10198]'),(922,573,122,147,2,'Voices & Voice Textures','[1167,981,1301,561,1598,1617,593,605,616,1707,1688,1675,1309,274,2211,2201,2232,2195,2646,2710,2725,2724,2619,2630,2542,2543,2554,2567,2541,2572,2745,2739,3319,3321,3325,3327,2203,3314,3621,3615,3611,3570,3551,2872,3302,3305,3344,3654,4203,4579,4543,4524,4475,4476,4478,4482,4489,3200,4755,4773,4809,4858,4916,4936,5629,5687,5685,4975,6122,6112,6460,6466,6472,6477,6493,6502,6506,4729,5275,4722,6435,5839,6028,5319,5369,5392,7799,5402,5411,5421,5448,8182,8186,8200,8202,8248,8249,8250,8279,8324,8334,8419,8499,8520,7746,8859,8654,8117,7681,7687,7704,7719,7721,7373,8057,7912,8644,8612,8613,8614,8615,8618,8619,8621,8622,8623,8624,8625,8628,8831,8833,8835,8842,8843,8845,8847,8850,8851,8852,8855,7940,7340,9948,9956,10429,10696,10820]'),(923,576,122,0,2,'Yodelling / Jodelling',NULL),(924,1203,122,4,2,'Whispers','[4948,5407,7701,7932]'),(925,1018,1017,11,2,'Pads','[24,9354,9361,9365,9366,9369,9285,9320,9428,9473,9511]'),(926,1064,1063,0,2,'Blues',NULL),(927,126,123,1062,1,'Corporate & Industrial','[158,167,167,259,275,1101,1102,1103,1104,413,289,301,302,294,305,307,317,318,321,324,499,499,504,500,502,506,512,512,515,517,518,518,519,519,521,521,522,523,342,342,346,1132,1710,1711,1711,1714,1718,1718,1716,1716,1724,1728,1728,1735,1735,1719,1828,1835,373,373,374,374,374,375,376,378,378,381,381,382,382,404,407,407,407,408,408,409,409,410,410,410,411,411,379,379,379,401,403,389,1137,1137,1164,1147,1151,1151,1154,1179,1189,1152,1198,1630,1630,1633,1633,1633,1637,1637,1637,1640,1640,1641,1647,1646,1645,1644,1644,1643,1643,1636,1636,1167,1199,1200,1806,1813,1354,1341,1344,1344,1344,1375,1375,1335,451,451,462,466,466,471,474,476,487,478,477,595,642,646,650,658,660,666,679,680,689,657,643,643,636,636,639,639,647,651,651,654,654,661,661,661,664,664,665,665,673,678,685,692,693,708,708,708,716,716,722,739,785,785,786,786,786,787,793,799,799,799,800,800,807,807,811,811,821,821,821,822,828,829,829,839,839,839,927,933,948,954,954,963,963,969,959,959,953,952,965,965,982,846,846,849,853,853,848,848,855,855,856,856,857,857,859,863,863,864,864,864,865,865,866,869,870,870,874,874,881,881,881,884,884,888,888,889,889,893,893,893,895,896,897,898,899,899,900,900,791,978,978,903,903,794,732,1202,1202,1304,549,541,542,543,544,548,552,560,560,561,564,565,565,565,575,575,575,577,577,578,579,580,580,582,583,585,587,588,1205,1209,1211,1219,1220,1221,1221,1232,1233,1239,1251,1253,1228,1267,1267,1268,1270,1271,1272,1273,1275,1285,1285,1285,1287,1287,1288,1290,1291,1292,1293,1293,1294,1295,1295,1296,1296,1297,1298,1298,1594,1594,1594,1595,1595,1596,1600,1602,1604,1606,1607,1608,1610,1612,1614,1615,1617,1617,1617,1618,1620,1621,1621,1621,1622,1622,1626,1626,603,594,597,600,600,604,604,605,606,607,607,607,608,609,612,614,614,618,618,356,1578,2057,2081,1398,1649,1649,1652,1669,1692,1701,1701,1701,1659,1659,1660,1661,1699,1690,1707,1695,1695,1683,1683,1665,1665,1665,1662,1654,1668,1706,1693,1675,1106,1108,359,360,363,1309,276,261,2037,2037,2037,2036,2036,1884,2017,2024,1886,1886,2188,2189,2222,2227,2232,2241,2243,2243,2124,2131,2137,2140,2142,2234,2153,2153,2144,2347,2650,2650,2657,2658,2659,2660,2660,2663,2663,2665,2672,2678,2693,2693,2694,2695,2695,2702,2711,2709,2377,2381,2381,2387,2727,2727,2722,2722,2721,2721,2604,2619,2630,2542,2545,2580,2536,2536,2568,2551,2592,2611,2632,2632,2643,2564,2564,2576,2616,2633,2620,2547,2558,2535,2597,2613,2613,2623,2544,2565,2573,2574,2579,2579,2805,2805,2829,2858,2752,2745,2739,3039,3073,3071,3053,3053,3260,3250,3250,3242,3242,2862,3125,3135,3150,3150,3150,3164,3319,3322,3324,3325,2374,3310,3313,3315,3032,2379,516,516,3537,3539,3541,3542,3545,3545,3546,3546,3620,3610,3605,3602,3590,3585,3585,3585,3583,3571,3571,3571,3561,2872,3297,3300,3300,3344,3334,2094,3646,4182,4184,4184,4185,4187,4193,4193,4193,3856,3446,3458,3483,3509,3515,3515,3515,3524,3528,3992,573,573,574,576,576,550,551,4574,4584,4644,4554,4554,4554,4552,4548,4530,4397,4982,4983,4984,4985,4986,4987,4988,4992,4454,4456,4456,4457,4459,4459,4459,4463,4465,4466,4475,4476,4479,4484,4496,4497,4497,4503,4503,4503,4508,4512,4512,4512,4515,4515,4515,4517,4522,4522,5072,5072,4242,4221,3670,3115,3086,4763,4781,4858,4882,4882,4882,4943,4977,4416,1700,361,361,306,2018,1155,2479,2479,2473,5617,5617,5622,5622,5629,5636,5687,5543,5691,5722,5757,5564,5564,5566,5236,5109,5212,5150,5181,5572,5585,3746,4742,5844,5866,5879,5908,5908,5908,6132,6101,6076,2437,6457,6457,6460,6460,6463,6464,6464,6462,6461,6467,6467,6468,6469,6470,6470,6470,6471,6471,6473,6473,6474,6474,6475,6475,6477,6477,6477,6478,6478,6480,6481,6483,6483,6484,6487,6488,6488,6488,6490,6490,6490,6491,6491,6491,6493,6493,6494,6497,6497,6497,6500,6500,6501,6501,6503,6505,6507,6507,6507,6835,6814,6803,6780,6757,6757,6757,6673,6673,6659,6659,6659,6648,6616,6616,6616,6605,6998,4689,4726,5259,5259,6427,6428,6431,6432,6426,6441,6441,6445,6449,6449,6449,5631,5631,5631,5642,6892,6892,6892,6909,6909,6978,6978,6978,7007,7007,7036,7036,7036,7047,7047,6723,6727,7191,7191,7148,7097,7097,5319,5319,4411,4412,4412,4433,4433,4432,4432,4430,4429,4428,4427,4297,5365,5365,5366,5366,5366,5389,5382,5382,5379,5379,5379,5374,5385,4434,4434,4434,4431,4436,3040,8073,8073,8071,8068,8068,7237,7259,7293,7293,7293,7270,7270,7757,7762,7766,7778,7778,7421,7467,7467,7554,7607,7607,7607,7783,7783,7783,7788,7788,7788,7790,7806,7806,7799,7799,5395,5395,5403,5403,5403,5407,5408,5408,5408,5411,5411,5411,5416,5416,5417,5417,5417,5418,5418,5420,5420,5422,5422,5422,5427,5427,5427,508,5433,5437,5446,5446,5446,5449,5449,5449,5450,5453,5453,5454,5455,5457,5457,5459,5471,5472,8074,8074,8079,8079,8081,8083,8083,8083,8085,8085,8086,8086,8086,8090,8090,8090,8163,8165,8166,8167,8173,8173,8176,8176,8176,8177,8180,8187,8187,8188,8192,8192,8195,8196,8196,8200,8200,8200,8204,8205,8211,8212,8213,8214,8214,8214,8218,8218,8221,8222,8222,8228,8230,8230,8234,8234,8242,8248,8249,8251,8251,8258,8258,8266,8279,8279,8282,8282,8283,8284,8284,8286,8286,8286,8287,8288,8296,8296,8299,8300,8301,8304,8305,8311,8311,8312,8318,8257,8257,8257,8323,8343,8343,8343,8351,8351,8354,8354,8354,8361,8361,8368,8370,8373,8373,8373,8381,8381,8383,8384,8384,8387,8387,8386,8386,8386,8399,8399,8399,8400,8402,8402,8411,8411,8413,8419,8421,8421,8421,8423,8423,8427,8427,8430,8430,8430,8435,8435,8438,8438,8438,8443,8444,8444,8445,8445,8462,8462,8462,8465,8465,8465,8474,8477,8480,8491,8491,8492,8492,8492,8497,8499,8499,8506,8506,8508,8511,8512,8513,8518,8520,8536,8537,8537,8538,8540,8540,8541,8543,8543,8544,8545,8545,8545,8546,8547,8549,8550,8553,8554,8555,8557,8560,8561,8561,8561,8566,8567,8568,8570,8573,8574,8576,8577,8578,8579,8580,8583,8586,8588,8590,8594,7753,7753,8856,8859,8859,8862,7323,7327,7331,7332,7333,7333,7333,7334,7335,7339,7339,7338,7336,7336,8112,7686,7686,7689,7689,7689,7700,7700,7712,7712,7713,7713,7713,7717,7717,7671,7671,7674,7674,7675,7675,7672,7672,7673,7380,7382,7391,8047,8052,8052,8052,8053,8054,8055,8055,8055,8057,8529,8529,8530,8605,8606,8607,8608,8609,8609,8609,8611,7818,7835,7835,7849,7861,7861,7871,7876,7877,7877,7887,7887,7901,7901,7901,7914,7914,7914,7928,7928,7933,7933,8637,8637,8646,7958,7958,7959,7963,7967,7967,7967,8668,8669,8670,8671,8671,8672,8672,8673,8674,8674,8674,8627,8855,8855,8855,7943,7950,7947,7947,7945,7945,5497,5497,5501,5501,5503,5503,5503,5505,7354,7354,7354,7364,2538,9031,9099,8662,8664,8953,8955,8957,8989,8999,8933,8661,7079,7080,6058,6059,6060,6061,6062,5790,4300,4311,4362,4358,4329,3773,3941,4033,4060,4070,4076,4104,4141,4279,9128,9130,9132,9138,9154,9161,9164,9167,9175,9193,9194,9356,9363,9370,9287,9289,9290,9291,9292,9293,9295,9296,9300,9302,9313,9314,9317,9318,9386,9396,9412,9427,9463,9465,9466,9467,9468,9469,9478,9479,9484,9487,9492,9515,9525,9526,9527,9528,9529,9531,9535,9537,9571,9575,9580,9669,9686,9687,9692,9703,9728,9732,9759,9810,9832,9876,9878,9879,9881,9882,9927,9987,9988,9989,9990,9997,9999,10002,10004,10005,10010,10017,10023,10025,10026,10028,10039,10050,10051,10052,10052,10056,10159,10160,10169,10178,10180,10182,10194,10207,10213,10225,10225,10234,10251,10251,10273,10288,10289,10311,10347,10347,10362,10362,10374,10374,5456,5456,5438,10400,10400,10418,10425,10428,10428,10430,10430,10430,10444,10454,10467,10467,10483,10497,10508,10508,10512,10513,10514,10514,10618,10618,10619,10619,10619,10630,10635,10636,10644,10652,10658,10662,10662,10668,10681,10681,10681,10689,10689,10689,10696,10696,10702,10702,10702,10703,10712,10717,10717,10724,10727,10737,10798,10798,10812,10820,10838,10838,10870,10889]'),(928,127,123,793,1,'Documentary','[123,1181,55,993,324,509,1841,1832,1830,1834,1838,377,406,383,384,387,391,1178,1185,1179,1628,1628,34,1340,655,679,680,688,688,689,689,665,671,671,672,672,673,678,684,685,685,687,687,690,692,694,701,701,707,757,759,768,787,806,811,812,816,817,828,840,930,934,938,943,966,969,972,967,960,953,982,981,978,975,906,751,750,749,1,1299,559,1205,1209,1210,1212,1214,1215,1233,1237,1242,1251,1228,1270,1272,1273,1274,1286,1290,1292,1578,2093,2072,2078,2073,2073,1668,1693,1107,1891,287,283,1109,1110,1110,1134,1135,1136,2022,1821,2187,2177,2182,2183,1881,1883,2033,1123,1122,1115,2188,2189,2205,2210,2248,2251,2252,2206,2216,2225,2239,2238,2255,2257,2258,2125,2135,2134,2149,2162,2198,2198,2199,2200,2220,2228,2229,2230,2192,2156,2262,2400,2403,2648,2661,2713,2681,2375,2385,2724,2720,2546,2594,2859,2857,3140,2374,3310,3315,3031,2379,3542,3544,3613,3613,3606,3589,3583,3563,3552,3548,3304,3650,4183,4183,4186,3858,3858,3860,3860,3862,3864,2411,2411,2410,2410,2412,2412,2413,2415,2415,2426,2438,2438,2443,2443,2453,2453,2463,2470,2470,2484,2482,2481,2481,3969,3969,3976,3980,3990,3991,3991,4442,4442,4443,4445,4449,4388,4642,4540,4635,4675,4673,4674,4674,4668,4668,4677,4677,4672,4672,1639,4466,4390,4390,4484,4522,5084,3200,3115,4756,4763,4831,4837,4840,4852,4852,4866,4870,4870,4904,5009,4967,4971,4941,4943,4945,4945,4933,4681,4682,4682,2018,2489,2489,2460,2461,2430,2431,2445,2446,2448,2451,2454,2455,2452,2416,2416,2418,2418,2420,2421,2425,2475,2477,2483,2464,2464,2492,2462,5606,5609,5612,5613,5614,5652,5659,5666,5685,5685,5681,5671,5486,5487,5489,5490,5490,5491,5492,5493,5494,5495,5496,5691,5771,5734,5236,5236,5123,3751,3751,4750,4438,4438,6068,6068,1336,2488,2488,2486,2486,2442,2442,2434,6464,6492,6504,6504,6847,6847,6631,6560,6561,6562,6563,6565,6566,6567,4685,4692,5265,5271,4697,4697,4700,4701,4701,4702,4702,4725,5266,5282,5285,5286,5287,5269,5268,4734,4731,4718,4707,4706,5264,4717,5276,4693,4693,4696,4694,5263,4722,4716,4715,4712,4698,4690,4691,5843,5843,5677,5960,6183,6193,5663,5663,961,6234,6252,6268,6299,6310,6313,6313,6314,6314,6406,6397,6338,6348,6349,6350,6367,7190,590,5308,4427,5360,5361,5478,5478,5394,5363,5370,5391,5391,5390,5390,5387,5384,5381,5381,5375,5375,5375,5373,5373,5371,5371,5371,5367,5378,5378,5378,5392,5392,8073,8072,8070,8069,8069,8068,8067,8065,8062,8063,7281,7281,7757,7409,7399,7432,7574,7597,7790,7807,7805,7664,7664,7665,7665,7668,7668,7670,7670,7670,7667,7667,5395,5409,5423,5423,5424,5424,5425,5425,5431,5431,5433,5436,5436,5437,5440,5441,5443,5443,5444,5445,5447,5447,5453,5455,5458,5459,5460,5460,5463,5463,5463,5464,5464,5465,5467,5467,5468,5469,5469,5469,5470,5470,5471,5472,5473,5474,5474,5475,5477,5477,8074,8078,8078,8078,8195,8239,8239,8239,8273,8274,8310,8317,8327,8352,8360,8375,8376,8376,8395,8398,8400,8406,8418,8443,8463,8473,8564,8565,8566,8567,8570,8581,8586,8587,8588,8588,8591,8595,8856,8858,8861,7316,7318,7323,7327,7328,7332,8865,8654,8655,8656,8656,8656,8657,8657,7724,7725,8112,8927,7686,7687,7690,7695,7695,7699,7699,7702,7702,7704,7706,7709,7709,7710,7710,7711,7711,7714,7714,7718,7718,7674,7372,7372,7373,7377,7378,7382,7391,7393,7393,8051,8051,8053,8053,8054,8057,8057,8059,8060,8530,8534,8534,8606,8608,8610,8611,8864,7821,7822,7822,7851,7868,7872,7872,7876,7890,7906,7912,7912,7917,7921,7928,7933,8630,8630,8644,8645,8646,7960,7964,8669,8670,8673,8612,8612,8616,8616,8616,8617,8617,8618,8618,8619,8620,8621,8624,8624,8626,8626,8627,8628,8628,8833,8833,8834,8834,8838,8839,8840,8842,8843,8845,8846,8854,7950,7948,7730,5505,5505,7344,7344,7344,7355,7355,7360,7362,7362,7362,2538,8663,8133,8128,8125,8123,7078,7087,7090,7091,7092,7092,7095,6753,6739,6569,4083,4124,9123,9126,9130,9154,9157,9165,9166,9171,9179,9191,9345,9348,9349,9350,9351,9354,9357,9359,9360,9361,9365,9366,9367,9369,9374,9375,9379,9380,9320,9388,9393,9395,9396,9397,9429,9435,9443,9446,9470,9485,9490,9504,9507,9511,9532,9559,9573,9688,9689,9696,9786,9863,9865,9866,9867,9868,9870,9871,9873,9874,9922,9923,9926,10026,10029,10030,10080,10089,10089,10096,10104,10156,10157,10158,10158,10160,10162,10163,10165,10167,10172,10173,10177,10182,10183,10186,10187,10188,10189,10190,10192,10194,10196,10197,10198,10199,10200,10200,10201,10203,10209,10209,10210,10211,10213,10214,10215,10217,10218,10221,10225,10226,10229,10230,10231,10233,10234,10236,10239,10240,10242,10244,10246,10248,10249,10250,10256,10260,10263,10270,10274,10277,10279,10280,10281,10287,10287,10288,10289,10290,10293,10301,10303,10305,10308,10312,10319,10320,10323,10324,10327,10333,10335,10339,10340,10340,10341,10342,10344,10350,10351,10356,10364,10370,10371,10374,10376,10377,10379,10380,10380,10380,10381,10384,10386,10387,10389,10390,10391,10394,10395,10396,10399,2261,9872,10414,10425,10428,10443,10459,10548,10577,10584,10586,10630,10667,10726,10773,10861]'),(929,124,123,319,1,'Children','[1175,418,319,520,340,1716,373,1170,1174,1640,1353,468,469,475,475,960,846,859,859,861,863,871,895,896,897,898,900,1217,1239,1271,1284,1288,610,1663,1656,1657,1667,1685,1694,1708,2171,2186,2186,2184,2177,2182,2183,2175,2019,2020,2033,1117,2190,2152,2406,2657,2670,2670,2597,2600,2600,2642,2583,2786,2792,2818,2821,2752,3052,3260,3169,3535,3576,3574,3564,3553,3297,3298,2109,3365,3365,3364,3364,3366,3366,3367,3367,3368,3368,3369,3371,3372,3373,3373,3374,3375,3376,3377,3378,3370,3379,3379,3379,3380,3380,3381,3382,3382,3383,3384,3385,3386,3387,3387,3388,3389,3390,3391,3391,3392,3393,3393,3394,3395,3396,3397,3398,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3408,3409,3410,3410,3411,3411,3412,3413,3414,3415,3415,3416,3416,3417,3418,3418,3419,3420,3421,3422,3423,3424,3426,3427,3427,3428,3428,3429,3431,3431,3432,3433,3434,3434,3436,3436,3437,3438,3438,3439,3439,3440,3441,3442,3442,3443,3445,3445,3363,3363,3739,3743,3856,3463,3492,3492,3492,3497,3497,3513,3519,3528,3529,3529,3992,4594,4640,4641,4450,4551,4392,4400,4400,1639,1173,4518,2440,5617,5626,5629,5687,5493,5212,5137,6467,6474,6484,4723,4726,5105,5106,5793,5793,5794,5794,5794,5795,5795,5796,5796,5797,5797,5798,5798,5798,5799,5800,5800,5801,5801,5801,5802,5802,5802,5803,5804,5804,5805,5805,5806,5806,5806,5807,5807,5808,5808,5808,5809,5809,5810,5810,5811,5811,5812,5812,5813,5813,5814,5815,5815,5815,5816,5817,5817,5818,5819,5819,5820,5820,5633,6909,7007,7134,5028,5042,8071,7237,7259,7574,8288,8311,8361,8427,8445,7315,7694,8094,8608,8864,7845,7847,7885,7955,5499,5499,7341,7347,7360,4041,9307,9309,9310,9315,9316,9319,9321,9388,9391,9400,9401,9402,9451,9460,9467,9468,9475,9476,9487,9495,9496,9497,9498,9509,9512,9524,9553,9582,9672,9676,9677,9678,9679,9685,9799,9806,9814,10119,10120,10121,10122,10125,10126,10127,10128,10130,10131,10132,10135,10136,10137,10139,10140,10141,10143,10144,10145,10146,10148,10149,10150,10151,10152,10153,10154,10155,10176,10634,10718,10724,10830,10860,10862]'),(930,125,123,214,1,'Comedy','[1175,249,319,322,322,503,1197,1170,1174,1641,1641,1644,1200,1353,1389,467,467,467,468,470,869,871,890,890,1300,1300,1300,1740,1740,1740,589,591,1696,1702,1702,1702,1672,1672,1672,2019,2253,2217,2217,2150,2150,2151,2151,2152,2152,2154,2154,2154,2155,2155,2155,2157,2157,2167,2148,2799,2846,2846,2846,2832,2866,3538,3602,3599,3580,3564,3553,3291,3735,3740,3740,3743,3743,3744,3857,3857,3859,3861,3861,3863,3863,3463,3462,3462,3497,3513,3519,4612,4542,4528,4678,4393,4393,4398,4398,4398,4399,4399,4399,4400,4989,4481,4483,4489,4491,4491,4510,4513,4513,4521,4521,4521,3693,3682,3211,3211,3211,3187,2367,4840,4963,4963,4963,4964,4964,4964,4965,4965,4942,4942,4931,4931,2440,5626,5626,5137,5573,5573,5856,6486,6495,6495,6495,6648,6518,4703,5793,5805,5809,5813,5814,5816,6988,3030,3030,7164,7120,7120,7109,5028,5042,5037,5037,5037,7237,7762,7773,7773,7798,8425,7750,7694,7698,8094,8101,8101,8101,8529,8864,7811,7816,7816,7839,7845,7847,7849,7864,7864,7883,7887,8634,8634,8635,8635,8123,8121,6745,6569,9130,9305,9307,9319,9400,9401,9402,9409,9426,9457,9487,9495,9496,9497,9498,9500,9512,9524,10057,10124,10124,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10149,10150,10151,10152,10153,10154,10155,10176,10198,10254,10262,10263,10266,10306,10306,10313,10313,10329,10329,10332,10332,10337,10337,10343,10346,10346,10346,10352,10352,10352,10353,10353,10357,10357,10357,10358,10365,10365,10368,10368,10370,10388,10397,2261,10634,10652,10718,10860,10868,10868]'),(931,128,123,415,1,'Drama','[290,310,311,323,1719,1837,1832,1826,377,386,388,390,389,1154,1187,1144,1156,1354,1337,595,642,660,679,680,688,684,687,690,692,693,694,701,702,706,707,715,787,793,806,812,817,822,828,833,834,840,914,931,926,905,733,732,1,24,548,1204,1267,1294,1595,1615,2068,2072,1682,1691,1851,286,1131,2176,2175,1125,1124,1122,1121,1119,1115,2193,2216,2216,2169,2398,2399,2661,2681,2565,2732,3256,3246,3326,3327,3311,3312,3028,3614,3588,3562,4186,566,3289,3288,3287,3276,3277,3277,3278,3278,3280,3281,3281,3282,3282,3283,3283,3284,3286,3286,2527,4589,4640,4641,4452,4451,4451,4413,4414,4531,4530,4635,4395,4395,4395,4478,4795,4808,4808,4831,4866,4904,5008,5008,5009,5010,5010,5013,5015,4967,4968,4969,4950,4950,4938,4939,4939,4940,4940,4945,4947,4947,4933,4932,4932,4930,4930,4929,4929,4928,4679,4680,4680,4425,4426,2435,2468,2491,2491,2461,2430,2431,2476,2487,2445,2446,2448,2451,2455,2490,2490,2492,2462,5606,5609,5610,5612,5611,5681,5681,5676,5676,5557,5559,2423,6789,6567,4687,4687,4683,4683,4685,4689,4710,4732,4732,5265,5270,5270,5271,5272,5272,5278,5278,4700,4708,4724,4725,4741,4741,5279,5279,5283,5288,5267,4739,4735,4731,4705,4705,4738,4729,4727,5273,5275,4696,4694,4704,4704,5274,5274,4722,4712,4699,4695,4695,4688,4686,4686,4691,4684,5949,5644,5645,5645,5649,5677,6544,6544,6685,6685,6692,6859,6885,6901,5951,5962,5981,6002,6016,6016,6021,6036,6041,6140,6155,6155,6198,6198,6202,6202,6208,6216,6220,6224,6295,6295,6299,6300,6338,6348,7203,7201,3245,5047,5049,5049,5360,5361,5364,5364,5370,5370,5384,5380,5380,5376,5376,5374,5372,5372,5368,5368,5385,5392,8067,8067,8065,8064,8062,8063,7769,7619,7805,5399,5401,5425,5484,8189,8189,8212,8228,8238,8247,8266,8300,8309,8310,8318,2143,8321,8327,8368,8369,8379,8379,8381,8383,8397,8397,8397,8398,2212,8422,8422,8424,8451,8463,8477,8510,8510,8512,8558,8564,8570,8581,8595,7743,7745,7746,7747,7748,7748,7752,8857,8858,8861,7325,7319,7320,7324,7338,7723,7723,7724,7726,7727,7728,7728,7729,8116,8927,8650,7680,7680,7681,7681,7683,7683,7688,7688,7688,7690,7692,7696,7697,7697,7701,7702,7703,7707,7715,7716,7718,7720,8099,8103,7739,8058,8058,8059,7821,7854,7854,7855,7855,7856,7856,7862,7862,7868,7876,7903,7903,7904,7904,7908,7917,7917,7921,7932,8632,8644,7964,8615,8848,7940,7941,7941,7941,7954,7954,7949,7948,7509,7509,7512,7512,7522,7527,7527,8867,8868,8869,8870,8872,8873,8874,7730,7355,7364,9099,4302,9174,9353,9389,9403,9419,9421,10037,10096,10241,10244,10245,10246,10257,10258,10281,10283,10391,10396,10398,571]'),(932,130,123,735,1,'Leisure / Lifestyle','[994,994,108,123,1420,1420,1420,1149,1150,1158,416,259,275,1558,413,293,308,308,502,506,507,515,521,355,1831,1831,1827,389,1163,1154,1159,1160,1161,1166,1166,1166,1635,1635,1635,1634,1634,1634,1642,1632,1632,1632,1631,1631,1636,1338,1338,1339,1341,1342,456,462,473,474,487,494,723,723,896,897,898,975,559,1219,1220,1253,1268,1286,1596,1596,1606,1608,1622,1624,1624,1624,591,591,593,593,602,614,615,615,616,616,616,620,620,356,2093,2084,2084,2081,2081,2078,1666,1697,1697,1699,1686,1690,1709,1662,1662,1664,1664,1704,1704,1704,1670,1654,1654,1706,1106,1108,283,281,280,2035,2035,2026,1428,1884,2017,2189,2224,2240,2240,2205,2210,2190,2194,2208,2208,2208,2191,2191,2247,2215,2226,2227,2232,2232,2237,2237,2241,2241,2219,2221,2225,2231,2233,2233,2255,2257,2258,2258,2256,2124,2124,2125,2127,2127,2130,2130,2132,2133,2135,2136,2134,2137,2138,2138,2140,2141,2142,2158,2159,2161,2166,2166,2195,2195,2195,2149,2162,2148,2246,2246,2249,2249,2235,2234,2234,2164,2164,2144,2144,2145,2145,2145,2146,2146,2199,2200,2220,2230,2242,2156,2169,2262,2298,2318,2338,2338,2356,2652,2658,2668,2683,2686,2705,2710,2377,2385,2391,2393,2724,2720,2604,2630,2542,2543,2549,2581,2590,2537,2537,2537,2545,2554,2569,2575,2589,2541,2550,2568,2622,2603,2603,2596,2596,2601,2609,2609,2643,2576,2577,2582,2582,2533,2534,2534,2598,2615,2615,2616,2631,2631,2636,2636,2639,2566,2566,2572,2572,2585,2585,2613,2570,2570,2570,2821,2856,2857,2745,2739,3072,3052,3265,3235,2861,3125,3130,3130,3155,3155,3155,3164,3313,3309,2254,2254,2379,1676,3328,3329,3331,3342,3535,3542,3621,3621,3621,3620,3619,3618,3615,3611,3608,3605,3598,3595,3587,3576,3570,3561,3556,3554,3551,3551,3550,3550,3293,3294,3301,3344,3346,3346,3337,3339,2099,2106,3642,3646,3646,3654,3662,4187,4189,4190,4190,4194,4194,3864,3864,3356,3356,3356,3452,3458,3488,3501,3509,3528,3970,3978,3978,3983,3987,3987,3987,3745,3745,4200,4200,4200,2526,4448,4446,4447,4386,4386,4555,4550,4546,4546,4546,4545,4545,4545,4544,4544,4542,4540,4540,4534,4534,4529,4528,4527,4524,4524,4524,4634,4634,4636,4636,4637,4639,4676,4673,4677,4672,4670,4670,4392,4392,4394,4394,4394,4397,1639,4454,4462,4462,4474,4474,4475,4475,4481,4482,4482,4484,4488,4488,4488,4496,4496,4501,4509,4509,4509,4514,4517,4519,4221,3717,3717,3223,3223,3187,3174,3095,3095,3095,3076,2949,2913,2886,4752,4834,4834,4837,4866,4905,4905,4905,4914,4916,4941,4937,3340,2640,2640,2689,2689,1155,1155,2476,2418,2420,2421,2432,2483,2464,2436,2436,2472,2472,2449,5594,5594,5598,5602,5602,5602,5622,5636,5636,5659,5666,5666,5675,5489,5491,5492,5493,5494,5495,5496,5771,5771,5699,5699,5699,5548,5548,5137,5181,5585,5856,5856,5866,5866,5879,5888,5899,6122,6122,6112,6092,6084,2417,2471,2467,2442,2458,2458,6465,6465,6462,6462,6461,6458,6458,6466,6472,6473,6479,6486,6496,6496,6499,6501,6502,6502,6503,6503,6505,6506,6803,6789,6780,6768,6768,6583,6583,6583,6561,6562,6563,6564,6566,4740,4716,4715,4709,5251,6435,5839,5839,5633,5633,5658,5674,6970,6970,5663,6718,6718,6718,6727,6735,6735,6735,6736,6736,7199,7199,7190,7190,7162,7162,7162,5578,5578,5922,590,5314,5314,5308,5050,5050,4411,4411,4435,4377,4377,4352,4352,4352,4297,4297,3803,5362,5362,5394,5391,5388,5388,5388,5369,5369,5367,5367,4436,8072,7754,7754,7754,7757,7444,7487,7432,7574,7630,7784,7789,7808,7802,7802,7798,7666,7669,7667,5410,5414,5415,5419,5424,5426,5426,508,5428,5428,5433,5435,5435,5436,5441,5448,5450,5451,5452,5452,5457,5473,5476,5477,8076,8076,8088,8088,8248,8249,8250,8250,8264,8267,8267,8268,8268,8279,8287,8293,8305,8312,8324,8334,8346,8358,8376,8393,8393,8393,8396,8413,8419,8419,8431,8435,8437,8437,8442,8442,8442,8481,8497,8499,8508,8513,8520,8856,8652,8654,7682,7694,7721,7673,7365,7366,7369,7369,7371,7371,7373,7376,7377,7378,7380,7381,7383,7384,7384,7385,7385,7385,7386,7386,7387,7387,7388,7388,7390,7392,8105,7815,7815,7815,7822,7851,7851,7868,7871,7871,7872,7880,7880,7880,7881,7890,7890,7897,7897,7897,7906,8646,8647,7962,8668,8613,8613,8622,8622,8625,8830,8830,8831,8831,8835,8835,8835,8837,8837,8838,8838,8839,8839,8840,8841,8841,8842,8842,8844,8844,8845,8845,8850,8850,8851,8851,8852,8852,8852,8853,8853,7731,7731,7340,7340,7349,9097,9067,9006,5344,4165,4168,4171,9132,9138,9157,9161,9164,9165,9167,9171,9179,9339,9342,9346,9347,9353,9354,9369,9371,9377,9292,9293,9295,9296,9302,9304,9313,9428,9431,9433,9478,9490,9533,9654,9656,9658,9660,9666,9667,9673,9680,9681,9682,9684,9686,9696,9708,9709,9710,9818,9819,9821,9822,9835,9862,10009,10009,10009,10010,10011,10011,10012,10013,10013,10015,10016,10017,10023,10025,10026,10027,10031,10038,10038,10039,10041,10041,10042,10043,10044,10051,10052,10054,10055,10057,10057,10058,10058,10156,10162,10169,10173,10174,10206,10206,10212,10212,10213,10221,10260,10279,10282,10286,10301,10301,10327,10350,10350,10355,10355,10366,10366,10366,10375,10377,10394,10394,5404,10429,10429,10437,10437,10444,10447,10447,10454,10459,10466,10467,10483,10508,10512,10513,10513,10514,10575,10585,10607,10618,10635,10636,10636,10658,10658,10662,10676,10676,10696,10703,10712,10717,10726,10727,10787,10798,10808,10838,10862,10870,10895]'),(933,129,123,2612,1,'Film Styles','[1074,1074,158,158,1550,1550,1145,1145,1146,1146,1149,1149,1150,1150,1157,1157,1157,1158,1158,1168,1175,1176,1176,1181,1181,1182,1182,1183,1183,1194,1194,1194,416,416,227,227,249,254,254,259,55,1558,243,243,243,993,1022,1075,1075,1101,1102,1103,1104,413,418,289,290,291,291,291,292,292,293,295,295,296,296,296,298,299,300,300,301,302,304,304,307,308,309,309,310,311,311,313,313,314,314,315,315,316,316,316,317,317,318,318,319,320,321,322,323,324,501,504,500,500,503,503,509,510,511,511,511,513,513,513,514,514,517,520,520,522,522,325,325,354,354,353,353,352,352,351,351,349,349,348,348,345,345,345,344,344,344,343,343,341,341,326,326,326,327,327,327,328,328,328,338,338,339,339,347,1132,329,329,337,337,340,330,330,331,331,331,332,332,332,333,333,333,1710,1710,1712,1712,1714,1724,1724,1726,1726,1727,1727,1721,1823,1841,1841,1837,1832,1830,1825,1825,1825,1826,1826,1829,1829,1829,1827,1833,1833,1834,1843,1843,1840,1839,1838,1835,1835,1824,1824,1824,375,376,404,377,401,403,403,402,402,402,406,406,380,383,384,385,385,386,387,387,388,390,390,391,391,392,392,392,393,393,393,395,395,395,396,397,397,397,399,399,399,405,405,405,1143,1143,1159,1160,1160,1161,1161,1197,1197,1153,1178,1185,1185,1190,1190,1179,1187,1187,1189,1189,1148,1148,1171,1171,1152,1152,1165,1165,1165,1170,1174,1144,1144,1191,1191,1191,1195,1195,1195,1192,1192,1193,1193,1196,1196,1198,1198,1156,1628,1638,1638,1638,1642,1642,1647,1647,1167,1188,1188,1184,1184,34,34,56,56,1799,1799,1799,1806,1813,1352,1352,1352,1353,1354,1389,1389,1337,1337,1338,1345,1345,1345,1375,1340,1335,1335,450,468,469,469,472,472,472,473,474,475,476,476,487,479,479,642,646,646,650,655,658,658,660,666,666,657,647,647,654,664,671,672,678,684,690,693,694,702,706,707,715,721,721,721,722,726,726,728,728,728,739,757,759,759,768,793,812,816,817,833,833,834,840,977,977,977,917,914,918,927,927,930,931,933,934,934,937,937,938,943,944,947,948,954,966,972,967,960,956,956,956,952,910,958,958,958,965,970,982,849,854,855,861,861,871,899,901,791,792,792,906,905,904,903,902,902,902,794,781,770,770,769,769,758,751,750,749,740,740,733,733,732,729,729,727,11,11,11,24,1307,1299,1299,1308,1308,1308,1306,1306,1306,1301,1301,1739,1739,1302,1302,1304,1304,1305,549,541,542,543,544,548,552,552,559,561,562,562,563,563,564,567,568,569,569,570,572,572,578,578,579,580,581,582,583,584,585,586,588,588,589,1204,1204,1209,1210,1214,1217,1218,1222,1235,1235,1237,1238,1249,1249,1250,1250,1254,1228,1268,1272,1274,1276,1276,1276,1279,1279,1280,1280,1281,1281,1281,1283,1283,1283,1284,1284,1290,1292,1294,1610,1615,1618,1626,603,1844,1844,1844,1845,1847,1847,1849,597,605,609,611,617,619,620,2043,2043,2047,2047,2051,2051,2057,2058,2058,2068,2072,1648,1648,1666,1669,1692,1658,1658,1658,1661,1684,1684,1696,1707,1698,1709,1664,1705,1705,1682,1670,1671,1671,1668,1679,1650,1650,1651,1651,1653,1657,1667,1678,1678,1685,1689,1689,1691,1708,1107,1107,359,360,362,362,363,1850,1850,1851,1891,255,255,255,287,287,286,283,281,274,274,270,276,263,263,262,262,260,260,1110,1131,1112,1112,1112,1134,1134,1135,1135,1136,1136,2038,2038,2035,2032,2032,1428,1428,1822,1822,2016,2031,2022,2022,1821,2023,2171,2187,2186,2185,2185,2184,2184,2181,2177,2182,2183,2174,2019,2025,2029,2033,1129,1128,1127,1126,1125,1125,1124,1124,1123,1123,1122,1121,1119,1114,1114,1117,1117,2211,2250,2253,2253,2160,2160,2165,2201,2163,2251,2252,2197,2206,2213,2222,2219,2219,2221,2231,2239,2238,2236,2257,1116,1116,1118,1120,1120,1120,1111,1111,2130,2133,2209,2134,2140,2141,2142,2159,2161,2149,2162,2245,2249,2235,2153,2220,2228,2229,2230,2242,2262,2264,2264,2274,2307,2307,2327,2327,2347,2356,2395,2395,2396,2397,2397,2398,2398,2399,2400,2402,2403,2403,2404,2404,2405,2405,2405,2406,2406,2407,2407,2407,2408,2409,2409,2409,2646,2647,2648,2649,2651,2653,2655,2655,2656,2656,2658,2659,2661,2662,2662,2662,2664,2664,2664,2666,2666,2666,2667,2669,2669,2671,2673,2673,2673,2674,2674,2675,2676,2676,2676,2677,2677,2678,2679,2680,2680,2682,2683,2684,2685,2687,2687,2691,2691,2691,2692,2692,2688,2696,2698,2700,2700,2701,2703,2704,2704,2705,2719,2718,2718,2717,2717,2716,2716,2715,2715,2714,2714,2714,2713,2713,2712,2712,2712,2709,2709,2708,2707,2707,2706,2654,2654,2681,2375,2381,2383,2383,2387,2389,2389,2728,2728,2728,2727,2726,2726,2726,2725,2724,2723,2581,2618,2618,2618,2621,2621,2621,2635,2635,2635,2638,2638,2644,2644,2556,2556,2556,2567,2567,2578,2580,2530,2530,2536,2540,2546,2557,2557,2586,2586,2531,2591,2591,2595,2595,2602,2602,2606,2606,2607,2607,2625,2625,2626,2626,2628,2628,2628,2637,2637,2552,2552,2552,2553,2553,2560,2560,2562,2562,2563,2563,2528,2529,2529,2588,2588,2592,2592,2617,2627,2627,2532,2611,2548,2548,2548,2555,2555,2555,2571,2571,2587,2587,2594,2594,2620,2593,2599,2599,2605,2605,2605,2610,2610,2610,2612,2612,2612,2614,2614,2623,2629,2629,2642,2539,2544,2565,2584,2584,2584,2760,2760,2764,2772,2777,2777,2782,2786,2792,2799,2805,2808,2808,2851,2851,2812,2818,2818,2821,2837,2825,2829,2860,2859,2857,2752,2732,2729,2729,2729,3037,3037,3039,3039,3074,3074,3074,3073,3072,3071,3070,3070,3068,3068,3066,3066,3064,3064,3062,3062,3060,3060,3060,3058,3058,3056,3056,3054,3054,3044,3044,3042,3260,3251,3250,3246,3239,3239,3235,2861,2862,2862,2863,2863,2864,2864,2865,2866,2866,2867,2867,2868,2868,2869,2870,2870,2871,2871,3268,3268,3270,3270,3272,3135,3140,3145,3145,3160,3169,3316,3317,3317,3317,3318,3318,3318,3320,3320,3321,3321,3322,3323,3323,3324,3325,3326,3327,2214,2214,2374,2203,2203,2259,2259,2259,3311,3312,3312,3314,3314,3027,3029,3029,3308,3308,3308,3307,3036,3036,3036,3035,3035,3035,3033,3033,3033,2223,2223,638,638,638,1676,1676,3328,3329,3329,3331,3342,3342,3534,3534,3534,3538,3538,3539,3540,3540,3540,3544,3619,3618,3617,3615,3614,3614,3611,3611,3606,3601,3601,3600,3600,3598,3598,3595,3589,3588,3588,3587,3586,3584,3584,3584,3583,3582,3577,3577,3577,3575,3574,3574,3568,3568,3567,3567,3567,3566,3566,3566,3565,3565,3563,3560,3558,3558,3558,3556,3555,3555,3552,2872,3290,3290,3290,3291,3299,3299,3302,3303,3303,3305,3306,3347,3348,3348,3349,3349,3332,3332,3334,3335,3335,3335,3337,3338,3338,3339,2094,2099,2101,2101,2103,2109,2111,2111,2111,2112,2112,2112,2113,2113,2114,2114,2115,2115,3634,3638,3638,3638,3642,3650,3650,3658,3662,3374,3375,3370,3385,3387,3400,3402,3403,3405,3406,3411,3412,3420,3425,3426,3427,3428,3429,3430,3430,3431,3432,3432,3433,3433,3435,3435,3444,4182,4183,4186,4189,4189,4190,3727,3727,3731,3731,3731,3732,3732,3732,3734,3735,3736,3736,3737,3739,3740,3855,3855,3855,3859,3859,3861,3862,3862,3863,3865,3865,3865,2410,2412,2413,2415,2426,2426,2438,2443,2453,2463,2463,2470,2484,2482,2481,2474,2474,2428,2428,2428,2414,2414,2414,3452,3452,3470,3473,3483,3488,3505,3505,3505,3508,3508,3509,3512,3512,3513,3522,3522,3533,3533,3966,3966,3966,3967,3967,3968,3968,3968,3969,3971,3971,3973,3973,3974,3975,3975,3976,3977,3977,3978,3979,3980,3981,3982,3982,3983,3983,3984,3984,3985,3985,3986,3986,3990,3990,3996,3997,3997,3275,3275,3275,574,566,566,550,3289,3289,3288,3287,3287,3276,3277,3278,3280,3281,3282,3283,3284,3286,3745,4197,4197,4197,4198,4198,4198,4199,4199,4201,4201,4202,4202,4203,4203,2526,2527,2527,4195,4195,4195,4196,4196,4196,4579,4584,4589,4589,4603,4608,4608,4608,4612,4627,4627,4641,4448,4442,4443,4443,4444,4444,4444,4445,4446,4447,4449,4450,4450,4452,4452,4451,4388,4388,4389,4389,4389,4413,4413,4414,4386,4642,4642,4643,4643,4644,3295,3295,3295,3296,3296,3296,4558,4558,4556,4556,4556,4555,4555,4550,4541,4541,4536,4536,4536,4535,4535,4533,4533,4532,4532,4532,4531,4528,4526,4523,4523,4632,4632,4632,4633,4633,4633,4638,4638,4638,4635,4637,4637,4639,4676,4675,4673,4678,4670,4391,4391,4391,4393,4951,4951,4952,4952,4953,4953,4954,4954,4955,4955,4956,4956,4956,4957,4957,4979,4979,4980,4980,4981,4981,4981,4982,4983,4983,4984,4985,4986,4987,4988,4989,4990,4990,4990,4991,4991,4992,4992,4993,4993,4994,4994,4994,4995,4995,4996,4996,1681,1681,1681,1173,4455,4457,4458,4458,4458,4461,4461,4463,4464,4465,4466,4467,4467,4467,4468,4468,4470,4470,4470,4471,4471,4476,4478,4478,4479,4390,4415,4415,4415,4486,4486,4486,4489,4494,4494,4495,4495,4499,4499,4499,4500,4500,4501,4501,4505,4505,4505,4506,4506,4506,4507,4507,4510,4510,4513,4518,4519,5084,5084,5060,5060,5060,4230,4230,4230,4209,4209,4209,4204,3704,3704,3704,3693,3693,3223,3200,3200,3174,3115,3086,3086,3076,2931,2931,2931,2913,2367,4752,4755,4755,4756,4756,4763,4773,4773,4781,4790,4790,4795,4795,4806,4806,4808,4809,4809,4821,4821,4821,4831,4837,4852,4855,4855,4855,4873,4873,4904,4909,4909,4916,4916,5007,5007,5007,5008,5009,5010,5011,5011,5011,5012,5012,5013,5013,5014,5014,5014,5015,5015,4978,4978,4978,4959,4959,4959,4960,4960,4960,4961,4961,4961,4962,4962,4962,4966,4966,4966,4967,4968,4968,4969,4971,4971,4972,4972,4972,4973,4973,4973,4950,4949,4949,4949,4948,4948,4948,4938,4939,4940,4942,4943,4944,4944,4944,4946,4946,4946,4947,4937,4936,4936,4936,4935,4935,4935,4934,4934,4934,4933,4932,4931,4930,4929,4928,4928,4977,4679,4679,4680,4681,4681,4682,4416,4416,4417,4417,4417,4418,4418,4418,4419,4419,4419,4420,4420,4420,4421,4421,4421,4422,4422,4422,4423,4423,4423,4424,4424,4424,4425,4425,4426,4426,1673,1673,1673,4387,4387,1700,3340,2608,2561,2561,303,306,334,334,334,2018,2419,2419,2424,2424,2429,2429,2444,2444,2450,2450,2435,2435,2456,2456,2457,2457,2465,2465,2465,2468,2489,2491,2460,2460,2461,2430,2431,2476,2487,2445,2446,2448,2454,5016,5016,5016,2455,2452,2452,2432,2425,2425,2475,2475,2477,2477,2483,2436,2490,2492,2462,2466,2466,2466,2472,2449,2449,5606,5609,5610,5610,5612,5613,5613,5614,5614,5611,5652,5659,5685,5684,5684,5683,5683,5683,5676,5675,5675,5671,5671,5668,5668,5668,5486,5486,5487,5487,5488,5488,5488,5489,5490,5491,5492,5494,5495,5496,5541,5541,5541,5543,5544,5544,5746,5746,5734,5710,5546,5546,5549,5549,5549,5550,5550,5553,5553,5555,5555,5557,5557,5559,5559,5560,5560,5562,5562,5565,5565,5566,5567,5569,5569,5123,5123,5170,5196,5571,5581,5583,5583,5589,5589,5591,5591,5591,4975,4975,4975,4976,4976,4976,4750,4750,4749,4749,4749,4742,4742,4438,1100,5844,5888,5899,5899,6112,6101,6092,6084,6084,6068,1336,1336,2441,2441,2437,2488,2486,2485,2485,2478,2478,2471,2471,2469,2467,2467,2459,2459,2447,2447,2447,2439,2439,2434,2423,2458,6463,6469,6479,6479,6481,6485,6485,6486,6489,6489,6492,6492,6847,6825,6825,6825,6631,6631,6594,6594,6594,6560,6561,6562,6563,6564,6564,6565,6565,6566,6567,6568,6568,6568,6518,7057,7057,6920,6920,6920,6929,6929,6929,7017,7017,7017,7068,7068,7068,4683,4685,4689,4692,4692,4710,4710,4711,4711,4732,5265,5270,5271,5272,5278,4697,4700,4701,4702,4708,4708,4724,4725,4736,4736,4736,4741,5266,5266,5279,5282,5282,5283,5283,5285,5285,5286,5286,5287,5287,5288,5288,5269,5269,5268,5268,5267,5267,4739,4735,4735,4734,4733,4733,4731,4718,4718,4705,4707,4707,4706,4706,5281,5281,5281,4713,4713,4713,4719,4719,4719,4720,4720,4720,5264,5264,4730,4730,4730,4717,4738,4738,4729,4729,4727,5273,5273,5276,5276,5275,5275,5284,5284,5284,4721,4721,4721,4723,4723,4693,4696,4694,4704,5274,5277,5277,5263,5263,4740,4740,4737,4737,4737,4728,4728,4728,4722,4716,4715,4712,4709,4709,4703,4703,4699,4699,4698,4698,4690,4690,4695,4688,4688,4686,4691,4684,5105,5105,5106,5799,5799,5800,5803,5803,5804,5807,5810,5811,5812,5814,5816,5817,5818,5818,5819,5820,6445,6445,5943,5943,5944,5944,5945,5945,5945,5946,5946,5947,5947,5948,5948,5949,5949,5950,5950,6064,6064,6064,6065,6065,6066,6066,5843,5640,5645,5649,5649,5658,5658,5667,5674,5674,5677,6508,6508,6508,6528,6528,6528,6536,6536,6536,6544,6552,6552,6552,6685,6692,6692,6701,6701,6710,6710,6710,6859,6870,6870,6870,6879,6879,6879,6885,6885,6901,6901,6949,6949,6949,6938,6938,6938,6988,6988,6958,6958,6958,6453,6453,7214,7214,7214,5951,5955,5955,5960,5962,5962,5965,5965,5966,5966,5966,5968,5968,5968,5971,5971,5971,5974,5974,5974,5977,5977,5977,5981,5983,5983,5987,5987,5987,5988,5988,5989,5989,5989,5990,5990,5990,5994,5994,5994,5998,5998,5998,6001,6001,6001,6002,6002,6006,6006,6006,6009,6009,6013,6013,6016,6017,6017,6021,6021,6024,6024,6024,6028,6028,6033,6033,6036,6041,6140,6140,6143,6143,6146,6146,6146,6150,6150,6150,6155,6157,6157,6157,6160,6160,6160,6164,6164,6164,6166,6166,6171,6171,6171,6175,6175,6175,6179,6179,6179,6183,6183,6188,6188,6188,6191,6191,6191,6193,6193,6195,6195,6198,6202,6208,6208,6215,6216,6216,6220,6220,6224,6224,6225,6225,6225,6228,6228,6228,6231,6231,6231,6719,6719,6723,6727,6729,6729,6729,6733,6733,6733,6736,6737,6737,961,961,6234,6234,6240,6240,6240,6244,6244,6244,6248,6248,6248,6252,6252,6257,6257,6257,6261,6261,6261,6265,6265,6265,6268,6268,6274,6274,6274,6278,6278,6278,6281,6281,6281,6285,6285,6285,6288,6288,6290,6290,6295,6299,6300,6304,6304,6304,6307,6307,6307,6310,6310,6313,6314,6417,6417,6417,6413,6413,6413,6410,6410,6410,6406,6406,6402,6402,6402,6401,6401,6397,6397,6320,6320,6320,6324,6324,6327,6327,6327,6330,6330,6330,6334,6334,6334,6338,6343,6343,6348,6349,6349,6350,6350,6353,6353,6357,6357,6357,6361,6361,6361,6364,6364,6364,6367,6367,6375,6375,6375,6378,6378,6378,6381,6381,6381,6385,6385,6385,6390,6390,6390,6394,6394,6394,7203,7201,7201,7200,7200,7200,7199,7183,7183,7183,7172,7172,7172,7164,7164,7148,7134,7134,7120,7109,7109,7197,7197,5922,590,2641,2641,2641,3245,5328,5328,5328,5047,5047,5042,5049,4412,4433,4427,5360,5361,5479,5479,5479,5478,5394,5363,5363,5364,5390,5387,5387,5384,5383,5383,5381,5380,5377,5377,5377,5376,5374,5368,4431,4436,3040,3040,5579,5579,5579,5587,5587,5587,8072,8071,8070,8069,8065,8064,8064,8062,8063,7224,7281,7302,7769,7769,7409,7409,7498,7399,7399,7476,7476,7432,7641,7597,7597,7619,7619,7652,7566,7566,7566,7630,7630,7785,7785,7785,7786,7786,7786,7791,7791,7791,7792,7792,7792,7793,7793,7793,7794,7794,7794,7796,7796,7796,7809,7809,7809,7807,7805,7804,7804,7803,7803,7803,7801,7801,7801,7800,7800,7800,7798,7797,7797,7797,7664,7665,5396,5396,5396,5399,5399,5400,5400,5400,5401,5401,5402,5402,5402,5405,5405,5405,5406,5406,5407,5407,5409,5409,5410,5410,5412,5412,5413,5413,5413,5414,5416,5423,5429,5429,5429,5430,5430,5430,5431,5432,5432,5432,5434,5434,5434,5437,5440,5440,5441,5442,5442,5442,5443,5444,5444,5445,5447,5458,5458,5460,5461,5461,5462,5462,5462,5464,5465,5465,5466,5466,5466,5467,5468,5468,5470,5471,5472,5473,5475,5475,5484,5484,8167,8179,8179,8180,8184,8184,8184,8182,8182,8182,8185,8185,8185,8186,8186,8186,8188,8189,8190,8190,8206,8206,8206,8208,8208,8209,8209,8209,8210,8210,8213,8222,8224,8224,8224,8225,8226,8226,8226,8227,8227,8227,8228,8229,8232,8232,8232,8235,8235,8235,8238,8242,8242,8244,8244,8244,8245,8245,8245,8247,8247,8251,8273,8274,8282,8283,8292,8292,8292,8297,8297,8297,8299,8301,8301,8304,8308,8308,8309,8310,8317,8319,8319,8319,2143,8321,8321,8327,8328,8328,8328,8341,8341,8341,8344,8344,8344,8347,8347,8347,8350,8352,8352,8360,8360,8368,8369,8370,8375,8375,8379,8383,8385,8389,8389,8390,8390,8390,8391,8391,8395,8395,8398,8400,8403,8403,8404,8404,8404,2212,2212,8405,8405,8405,8406,8406,8407,8407,8407,8408,8408,8408,8410,8410,8410,8418,8422,8424,8433,8443,8450,8450,8450,8451,8451,8452,8452,8452,8455,8455,8455,8458,8458,8458,8459,8459,8459,8463,8466,8466,8466,8472,8472,8473,8473,8474,8476,8477,8478,8478,8478,8484,8484,8484,8503,8503,8504,8504,8510,8518,8518,8539,8539,8541,8546,8555,8558,8562,8563,8564,8567,8573,8581,8586,8591,8593,8593,8595,7742,7742,7743,7744,7744,7745,7745,7746,7747,7747,7748,7749,7749,7749,7750,7751,7751,7752,7752,8857,8857,8858,8860,8860,8860,8861,7395,7395,7397,7397,8862,8862,7325,7325,7326,7326,7326,7315,7315,7316,7316,7317,7317,7317,7318,7319,7320,7323,7324,7324,7328,7328,7329,7329,7329,7330,7330,7330,7331,7332,7335,7339,7338,7336,8865,8865,8655,8655,8657,7722,7722,7722,7723,7724,7725,7725,7726,7726,7727,7727,7728,7729,7729,8113,8113,8113,8114,8114,8116,8116,8117,8117,8117,8648,8648,8648,8927,8649,8649,8649,8650,8651,8651,8651,7680,7681,7682,7682,7683,7684,7685,7685,7685,7687,7687,7690,7692,7693,7693,7693,7695,7696,7696,7697,7699,7701,7703,7704,7704,7705,7705,7705,7706,7706,7707,7707,7708,7708,7708,7709,7710,7711,7712,7714,7715,7715,7716,7716,7719,7719,7719,7720,7721,7671,7675,7672,7366,7371,7372,7373,7376,7378,7381,7382,7390,7390,7392,7392,7391,7393,8092,8092,8093,8093,8094,8095,8095,8096,8096,8097,8097,8098,8098,8098,8099,8100,8100,8100,8102,8102,8102,8103,8104,8104,8104,8105,8105,8110,8110,7732,7732,7732,7733,7733,7733,7735,7735,7735,7737,7737,7737,7739,7739,7741,7741,7741,8047,8047,8048,8048,8048,8049,8049,8049,8050,8050,8050,8051,8054,8056,8058,8059,8060,8060,8061,8061,8061,8534,8535,8535,8535,8610,8610,8611,7811,7811,7814,7814,7814,7816,7821,7824,7824,7824,7839,7839,7847,7849,7854,7855,7856,7858,7858,7858,7862,7865,7865,7865,7881,7883,7883,7885,7903,7904,7906,7908,7909,7909,7909,7912,7921,7926,7932,8629,8629,8629,8630,8631,8631,8631,8632,8632,8634,8635,8644,8645,8645,8647,7956,7956,7958,7959,7960,7960,7961,7961,7962,7963,7963,7964,7965,7965,7965,8668,8669,8670,8672,8673,8612,8613,8614,8614,8614,8615,8617,8618,8619,8619,8620,8620,8621,8621,8624,8625,8625,8626,8627,8628,8830,8831,8832,8832,8833,8834,8836,8836,8836,8837,8840,8841,8843,8843,8844,8846,8846,8847,8847,8847,8848,8848,8849,8849,8849,8850,8851,8853,8854,8854,7937,7937,7937,7938,7938,7938,7939,7939,7939,7940,7940,7942,7942,7942,7943,7944,7944,7955,7954,7953,7953,7953,7952,7952,7952,7951,7951,7951,7950,7949,7948,7947,7946,7946,7946,7945,7512,7518,7518,7518,7522,7526,7526,7527,8866,8866,8866,8867,8867,8868,8868,8869,8869,8870,8870,8871,8871,8871,8872,8872,8873,8874,8874,8875,8875,8875,7731,7730,5497,5499,5501,7341,7341,7347,7347,7351,7351,7351,7353,7353,7358,7358,7358,7360,7364,9020,9023,9024,9026,9031,9070,9098,9050,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,8950,8953,8957,8958,8961,8975,8977,8986,8987,8987,8987,8997,9003,9008,9008,2126,8137,8136,8136,8131,8123,8118,7078,7079,7080,7082,7084,7085,7087,7089,7090,6739,6745,6746,6747,6748,6055,6057,5931,5786,5789,5791,5302,5343,3624,3627,4280,4280,4317,3812,3815,3815,3821,3954,4010,4022,4077,4103,4114,4114,4115,4141,4168,79,79,79,9123,9126,9156,9166,9167,9322,9324,9325,9326,9327,9327,9328,9328,9329,9329,9330,9330,9331,9331,9332,9332,9333,9334,9335,9336,9337,9340,9340,9341,9344,9345,9352,9355,9357,9358,9358,9359,9364,9367,9373,9376,9285,9286,9286,9303,9305,9390,9392,9393,9394,9394,9397,9398,9403,9404,9405,9406,9408,9413,9416,9417,9418,9419,9420,9424,9429,9430,9431,9432,9433,9434,9440,9442,9444,9445,9447,9448,9455,9460,9461,9472,9473,9474,9477,9480,9481,9483,9484,9493,9494,9499,9503,9516,9519,9532,9549,9548,9550,9551,9552,9553,9556,9557,9558,9560,9561,9562,9563,9564,9566,9567,9568,9569,9570,9582,9591,9600,9608,9644,9646,9648,9650,9652,9662,9664,9671,9685,9688,9689,9691,9691,9692,9701,9765,9767,9769,9771,9811,312,312,312,9855,9857,9858,9859,9860,9864,9865,9868,9869,9870,9871,9873,9875,9885,9889,9893,9898,9902,9906,9910,9914,9918,9924,9944,9951,9962,9963,9964,9965,9977,9979,9978,9980,9981,9982,9983,9984,9985,9986,9991,9992,9993,9995,9998,10003,10011,10022,10022,10025,10028,10029,10031,10032,10032,10033,10033,10034,10035,10035,10036,10036,10037,10040,10042,10042,10043,10044,10046,10046,10049,10049,10053,10055,10059,10066,10073,10080,10089,10096,10104,10104,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10125,10126,10127,10131,10132,10133,10134,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10150,10151,10152,10153,10154,10155,10157,10158,10159,10160,10163,10165,10167,10168,10168,10170,10172,10172,10174,10176,10177,10177,10179,10179,10181,10181,10183,10184,10187,10188,10189,10190,10192,10194,10196,10199,10200,10201,10203,10204,10209,10210,10210,10211,10214,10214,10215,10215,10217,10218,10218,10226,10227,10227,10228,10228,10229,10234,10235,10237,10239,10240,10241,10242,10242,10243,10248,10249,10249,10250,10252,10252,10253,10254,10254,10255,10255,10256,10256,10259,10259,10260,10261,10262,10264,10264,10265,10265,10265,10266,10267,10267,10268,10268,10269,10270,10271,10272,10272,10273,10274,10274,10275,10276,10276,10276,10277,10277,10278,10278,10279,10280,10286,10287,10289,10290,10291,10292,10293,10293,10294,10295,10296,10297,10297,10297,10298,10299,10299,10300,10300,10302,10302,10303,10304,10305,10305,10307,10308,10309,10309,10310,10310,10310,10311,10311,10312,10312,10314,10314,10314,10315,10315,10316,10316,10317,10317,10318,10318,10318,10319,10320,10320,10321,10322,10322,10322,10323,10324,10325,10325,10326,10326,10327,10328,10330,10330,10331,10331,10333,10334,10335,10337,10338,10338,10339,10339,10340,10341,10342,10342,10343,10343,10344,10345,10345,10348,10348,10349,10349,10351,10354,10354,10356,10358,10359,10359,10359,10360,10361,10361,10361,10363,10363,10363,10364,10368,10369,10369,10370,10371,10372,10372,10373,10373,10373,10376,10378,10378,10379,10379,10381,10382,10383,10384,10385,10385,10385,10386,10387,10388,10389,10389,10390,10391,10392,10392,10393,10393,10395,10396,10397,10398,10399,10399,8528,571,5438,5438,5941,5941,5941,5942,5942,5942,428,288,10414,10443,10459,10472,10472,10495,10495,10495,10496,10496,10496,10497,10497,10498,10498,10500,10524,10524,10524,10539,10539,10548,10548,10551,10559,10559,10575,10575,10577,10577,10584,10584,10585,10585,10586,10587,10603,10603,10603,10607,10614,10614,10630,10667,10669,10729,10729,10746,10746,10746,10760,10766,10773,10774,10794,10844,10844,10846,10852,10852,10856,10856,10861,10861,10878,10879,10889,10895]'),(934,132,123,19,1,'Musical Effects / Editor\'s Mix Section','[1177,523,1178,1205,1206,1207,1208,1215,1226,1274,613,621,2205,2210,4717,8549,9055,9057,10253]'),(935,131,123,45,1,'Military / War','[9026,9099,9098,9003,9324,9325,9326,10066,10170,10188,10189,10201,10203,10204,10227,10235,10240,10241,10245,10250,10252,10253,10255,10257,10258,10261,10267,10268,10269,10271,10272,10275,10291,10294,10300,10303,10307,10315,10328,10330,10376,10383,10414,10443,10559]'),(936,133,123,84,1,'News / Current Affairs','[523,346,1727,1828,1839,1838,396,1137,1143,1153,477,947,947,1216,1684,1105,1105,2131,2209,2207,2587,2624,2624,2629,4598,4460,4460,4494,4495,4502,4502,5734,2485,2478,2469,2439,2434,6814,6570,7057,5277,7790,8204,8317,8415,8415,8536,8536,8537,8538,8540,8543,8544,8546,8547,8549,8553,8560,8565,8566,8568,8574,8579,8583,8587,8590,8594,8112,7379,7379,8530,7835,9058,9060,3811,3820,3822,3853,4103,9584,9591,9600,10017,10035,10162,10169,10170,10178,10180,10199,10207,10207,10236]'),(937,135,123,72,1,'Special Occasions','[335,1196,1340,471,917,937,727,1295,1598,593,602,1663,1656,1657,1821,2187,2181,2178,2178,2194,2197,2401,2657,2633,2597,2583,3311,3562,2109,3396,3435,3462,4446,4414,4544,4676,4668,4678,4455,4455,4481,4518,3187,2420,2421,5581,5017,5017,5017,6494,6518,4711,4724,4726,6719,7097,5020,8503,7845,7885,7926,8647,7956,8832,7522,7353,9027,9667,10041,571,2261,10447,10466,10586,10607,10812]'),(938,134,123,284,1,'ShowBiz / Entertainment','[502,506,507,507,518,355,1831,411,1163,1163,1164,1164,1147,1147,1339,1339,1342,450,451,456,456,462,473,494,494,1600,1600,1602,1602,610,610,617,617,619,619,1696,1656,1675,1675,1106,1309,1884,2201,2240,2226,2227,2237,2221,2225,2231,2239,2238,2217,2123,2125,2132,2133,2135,2204,2150,2151,2164,2156,2318,2338,2683,2694,2702,2710,2619,2543,2549,2549,2581,2590,2634,2601,2598,2636,2639,2558,2856,2745,3309,516,3615,3608,3608,3568,3293,3293,3346,4184,4187,4579,4584,4547,4538,4538,4538,4537,4537,4529,4529,4636,4461,4474,4480,4480,4482,4493,4498,4511,4511,4520,4520,4520,3717,2949,4834,4841,4841,4893,4914,2640,2689,2034,2034,2473,5598,5598,5629,6122,6459,6459,6459,6472,6496,6499,6500,6502,6505,6506,6560,5251,6435,6435,5839,6970,7216,7216,5578,5350,5350,5337,5326,5326,5050,4435,4429,5369,7766,7766,7784,7789,7789,7795,7795,7808,7808,7666,7669,7669,5397,5406,5415,5418,5419,5419,5420,5421,5421,5426,508,5428,5435,5448,5450,5451,5451,5452,8173,8177,8177,8202,8202,8205,8211,8231,8240,8240,8240,8248,8249,8250,8264,8264,8267,8268,8269,8270,8270,8270,8276,8277,8287,8291,8293,8293,8320,8323,8324,8334,8340,8346,8358,8363,8396,8417,8417,8429,8431,8460,8480,8481,8554,8557,8577,8578,8652,8652,7691,7691,7721,7673,7365,7365,7366,7369,7376,7377,7380,7381,7383,7384,7386,7387,7388,8605,8607,7864,7881,7962,8622,7340,7349,7349,3901,9343,9399,9414,9423,9425,9450,9475,9491,9505,9534,9535,9537,9538,9539,9540,9542,9543,9544,9928,9934,9935,9936,9938,9940,9941,9942,9943,9945,9947,9948,9949,9950,9952,9953,9956,9957,9958,9959,9960,9984,9999,10010,10012,10015,10016,10018,10018,10034,10039,10043,10053,10126,10178,10206,10282,9518,5404,5404,428,10429,10437,10454,10466,10512,10613,10613,10613,10635,10726,10727,10808,10820,10830,10862]'),(939,136,123,269,1,'Sport','[1168,275,1101,305,515,519,1711,408,409,1151,1148,1630,1342,477,655,643,856,866,874,888,891,560,1607,1607,1666,2017,2165,2148,2396,2400,2659,2660,2672,2674,2696,2698,2716,2711,2708,2722,2721,2619,2630,2542,2559,2578,2551,2611,2620,2547,2535,2539,2772,2812,2829,2858,3251,3319,3324,3310,3313,3541,3610,3599,3593,3593,3592,3590,3590,3580,3578,3578,3559,3559,3557,3557,3556,3302,3630,3630,3630,3658,4185,3446,3477,3477,3524,3524,4618,4618,4618,4627,4548,4547,4539,4527,4527,4951,4979,4453,4453,4457,4463,4464,4471,4508,4508,4514,4516,4516,5094,5094,5072,4242,4204,4204,3670,3670,2913,2904,2904,2904,2886,4781,4841,4858,4893,303,5594,5722,5757,5710,5109,5150,5170,5196,5196,5571,5888,6132,6101,6076,2417,2422,2422,2437,6465,6461,6458,6466,6466,6468,6480,6493,6499,6835,6673,6605,6605,6998,7027,7027,6433,6434,6701,5350,5337,5337,5326,5319,4435,4432,4430,4429,4428,4428,3803,5389,7224,7246,7246,7270,7302,7302,7421,7444,7498,7476,7487,7487,7586,7586,7641,7652,7652,7810,7810,7668,5412,5455,8079,8081,8085,8165,8166,8167,8181,8181,8190,8192,8269,8276,8277,8291,8324,8338,8338,8340,8345,8346,8351,8358,8363,8363,8387,8396,8418,8433,8433,8481,8485,8485,8485,8508,8513,8520,8580,7331,7334,8114,8110,8056,8056,7818,7877,7893,7893,8633,8633,8637,7961,8671,7943,8997,9010,9154,9174,9193,9194,9340,9367,9291,9299,9493,9510,9527,9576,9577,9578,9668,9670,9675,9714,9716,9719,9724,9737,9744,9759,9807,9815,9824,9825,9826,9827,9828,9829,9830,9831,10282,10347,10362,8528,10418,10500,10500,10539,10551,10587,10614,10668,10669,10729,10737,10760,10760,10766,10773,10774,10787,10794,10846,10879,10889]'),(940,137,123,802,1,'TV Music / Themes','[249,418,310,347,355,1827,1840,1840,1839,1159,1167,1806,1341,450,470,470,650,706,715,722,723,726,739,822,834,931,938,926,891,905,794,567,568,582,583,1216,1219,1286,1287,1288,1296,1604,1604,1610,1618,606,612,356,2068,2084,1649,1698,1703,1703,1703,1663,1688,1688,1688,1670,1679,1679,1653,1678,1706,1105,1108,1309,270,2036,2026,2016,2024,2024,1886,2250,2165,2201,2190,2194,2147,2147,2147,2163,2191,2247,2226,2243,2256,2256,1116,2123,2131,2132,2209,2207,2158,2204,2246,2245,2242,2169,2274,2274,2286,2286,2286,2318,2356,2396,2653,2670,2677,2694,2718,2711,2710,2545,2580,2550,2531,2591,2551,2601,2547,2558,2535,2600,2623,2642,2583,2760,2782,2812,2832,2841,2841,2825,2858,2739,2732,3037,3073,3071,3053,3052,3042,3251,3246,3242,3239,3235,2863,2864,2867,2868,2870,3125,3319,3315,3028,3034,3034,3034,3032,3031,3328,3536,3536,3536,3537,3537,3539,3541,3545,3619,3610,3605,3602,3601,3599,3597,3597,3597,3593,3592,3592,3589,3586,3586,3582,3580,3578,3573,3573,3573,3572,3572,3569,3569,3569,3564,3562,3560,3559,3557,3554,3554,3553,3291,3294,3298,3301,3302,3345,3332,3334,3337,3339,2094,2099,2103,3642,3658,3662,3666,3666,3666,3368,3375,3377,3385,3386,3402,3403,3404,3405,3406,3408,3420,3426,4185,3857,3858,3446,3458,3463,3470,3473,3473,3477,3483,3501,3519,3529,3970,3970,3979,3980,3992,573,550,3280,4574,4579,4594,4598,4603,4603,4612,4640,4448,4447,4449,4644,4558,4552,4552,4551,4550,4549,4549,4548,4547,4543,4543,4543,4542,4541,4539,4539,4535,4531,4530,4523,4634,4639,4397,4952,4953,4954,4955,4957,4980,4982,4984,4985,4986,4987,4988,4989,4991,4995,4996,4453,4454,4456,4460,4462,4464,4465,4468,4476,4479,4480,4483,4485,4485,4485,4489,4491,4493,4493,4497,4498,4498,4502,4511,4514,4516,4517,4519,5094,4242,3682,3682,3174,3104,3104,3104,3076,2949,2886,2367,4752,4840,4858,4893,4914,3609,3609,3609,1700,3340,2034,2487,2451,2454,2416,2432,2479,2473,2440,5611,5652,5687,5543,5544,5691,5722,5757,5746,5710,5546,5550,5553,5555,5560,5562,5564,5565,5566,5567,5569,5109,5212,5150,5170,5181,5571,5572,5572,5573,5585,3746,3746,5844,5879,6132,6112,6092,6076,2417,2422,2469,6457,6460,6463,6468,6469,6471,6472,6475,6478,6480,6483,6484,6485,6487,6489,6494,6504,6506,6835,6814,6803,6789,6780,6768,6648,6570,6570,6998,7027,4687,5251,5259,6427,6427,6428,6428,6429,6429,6429,6430,6430,6430,6431,6431,6432,6432,6433,6433,6426,6426,6434,6434,5106,5796,5797,6441,6859,7047,6453,3030,7216,6041,6723,7191,7148,5922,3245,5314,5308,5028,4377,3803,5365,5389,5382,5373,5372,5385,4431,8070,7224,7246,7259,7762,7773,7778,7421,7444,7498,7467,7554,7554,7586,7641,7784,7795,7810,7806,7804,7802,7799,7666,5397,5397,5414,5415,5421,5445,5448,5459,5474,8081,8166,8180,8181,8187,8188,8195,8196,8202,8204,8205,8211,8212,8218,8221,8221,8230,8231,8231,8234,8238,8258,8266,8269,8276,8277,8283,8284,8288,8296,8299,8300,8304,8305,8309,8312,8318,8320,8320,2143,8323,8334,8338,8340,8345,8345,8369,8370,8384,8385,8385,8411,8413,8415,8417,8423,8425,8425,8429,8429,8431,8437,8444,8460,8460,8480,8491,8497,8506,8511,8511,8512,8538,8541,8544,8547,8550,8550,8553,8554,8557,8560,8565,8568,8573,8574,8576,8577,8578,8579,8583,8590,8594,7742,7743,7744,7746,7751,7753,8859,7395,7397,7318,7327,7334,7335,8654,7684,7691,7698,7698,7700,7717,7379,7383,8092,8093,8096,8097,8103,8605,8606,8607,7818,7861,7893,8633,7959,7955,7509,9018,9018,9020,9020,9023,9024,9025,9025,9026,9027,9028,9029,9029,9030,9032,9033,9034,9035,9036,9037,9041,9068,9070,8662,8664,8973,8993,8933,2126,8661,5057,5937,5787,5302,5341,5343,5344,5107,5108,4317,4322,3812,3815,3866,4022,4023,4060,4074,4082,4083,4114,4167,9156,9157,9164,9166,9171,9322,9323,9341,9343,9346,9347,9348,9349,9350,9351,9352,9359,9362,9368,9378,9380,9381,9308,9312,9407,9415,9432,9441,9457,9458,9462,9471,9482,9482,9499,9507,9509,9532,9533,9554,9565,9575,9644,9690,9693,9697,9699,9704,9707,9710,9712,9713,9716,9724,9726,9730,9731,9733,9734,9736,9737,9738,9740,9741,9742,9744,9746,9748,9750,9752,9754,9756,9757,9760,9762,9763,9764,9765,9766,9776,9779,9782,9786,9789,9792,9796,9797,9799,9798,9800,9801,9803,9804,9805,9806,9807,9808,9809,9813,9815,9816,9832,9833,9834,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9849,9852,9861,9941,9946,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9996,10000,10001,10013,10046,10049,10050,10051,10053,10054,10056,10128,10129,10129,10130,10134,10135,10142,10147,10148,10149,10159,10163,10180,10184,10211,10212,10236,10251,10286,10288,10309,10375,8528,5456,428,10425,10444,10483,10644,10644,10652,10712,10718,10808,10820,10830,10868]'),(941,999,123,0,1,'baba',NULL),(942,138,123,14,1,'Wildlife','[10080,10156,10168,10174,10184,10186,10190,10230,10233,10237,10243,10244,10295,10299]'),(943,1013,123,14,1,'Action/Thriller','[1103,3314,1100,6215,9325,9442,9519,9522,10157,10167,10248,10257,10258,10304]'),(944,1010,123,28,1,'Action','[227,8965,4084,4094,9193,9194,9299,9493,9494,9501,9572,9576,9577,9578,9668,9670,9675,9807,9828,9829,9830,9831,10056,10073,10243,10472,10551,10668]'),(945,1036,123,102,1,'Media','[994,108,1168,1022,289,294,307,504,354,353,352,351,349,346,347,1719,1828,376,478,8955,8957,8961,8963,8967,8969,8973,8976,8980,8982,8984,8989,8993,8999,9006,9010,8125,8121,7079,7080,6055,6058,6059,6060,6061,6062,6063,5931,5937,5790,4302,4064,4141,4165,4279,9191,9398,9407,9412,9428,9450,9456,9464,9466,9469,9471,9478,9492,9499,9505,9507,9509,9510,9517,9520,9527,9531,9533,9555,9571,9580,9573,9862,10004,10005,10027,10028,10030,10031,10033,10034,10040,10044,10050,10054,10175,9518,288,10724,10812,10846,10852,10879]'),(946,1045,123,325,1,'Games','[1074,108,123,167,1550,1145,1182,1183,55,1558,993,1022,1075,1102,1104,290,292,295,298,294,304,309,314,320,320,321,499,501,509,510,514,517,338,1132,329,337,340,1712,1714,1718,1726,1735,1721,1823,1830,1833,1834,1843,380,383,384,385,386,396,1190,1156,1188,1199,1200,1184,478,479,595,636,768,816,918,943,966,910,910,970,869,904,750,749,727,1301,1302,1305,1210,1215,1218,1232,1235,1237,1238,1239,1242,1249,1251,1253,1270,1271,1279,1280,1606,1849,597,600,613,2043,2047,2051,2057,2093,2078,1660,1707,1698,1671,1651,1653,1667,1685,1694,359,360,362,363,1891,281,263,262,261,2038,2023,2185,2174,2029,2166,2347,2408,2646,2647,2655,2704,2715,2707,2644,2540,2557,2586,2531,2595,2606,2607,2625,2637,2562,2528,2599,2614,2859,3135,3140,3160,3169,3029,2223,3555,2872,3297,3298,3300,3303,3305,3347,3348,3349,2413,2474,3967,3973,3974,3975,3977,3984,3996,3997,4199,4201,4202,4203,4549,4221,4755,4773,4790,4806,4809,4873,4909,4938,4937,2608,361,303,2419,2424,2429,2444,2450,2456,2457,2468,5684,1100,2459,2423,4739,4734,4733,4727,5943,5944,5946,5947,5948,5950,6065,6066,5951,5955,5960,5965,5981,5983,5988,6009,6013,6017,6028,6033,6036,6143,6166,6195,6215,6288,6290,6300,6401,6324,6343,6353,5383,5454,5461,8165,8179,8208,8210,8273,8274,8308,8389,8391,8403,8424,8472,8504,8539,8558,8591,8593,7319,7320,8650,7692,7701,7703,7720,7932,8615,7944,7949,7526,8967,8993,6061,9285,9295,9385,9459,9502,9534,9535,9537,9538,9550,9572,9574,9577,9579,9573,9619,9627,9629,10027,10055,10059,10175,10179,10181,10261,10266,10294,10295,10304,10321,10328,10345,10360,10378,10387,10392,288,10418,10766,10774,10787,10794,10844,10856,10878,10895]'),(947,1206,123,1,1,'Theatre','[10353]'),(948,726,124,6,2,'Children 0-4','[3445,3492,3529,7955,7347,7360]'),(949,727,124,13,2,'Children 5-10','[1288,2186,2786,3439,5105,5106,5794,5796,5801,5802,5804,5807,5813]'),(950,728,124,0,2,'Children 11-15',NULL),(951,730,124,62,2,'Educational / Times Tables','[960,2186,2177,2182,2183,3365,3364,3366,3367,3368,3369,3371,3372,3373,3375,3376,3378,3379,3380,3383,3384,3386,3387,3388,3389,3390,3391,3395,3398,3401,3403,3404,3407,3409,3410,3411,3413,3414,3415,3417,3418,3419,3421,3422,3423,3424,3427,3428,3431,3434,3436,3438,3443,3363,5795,5796,5802,5804,5805,5806,5810,5815]'),(952,731,124,8,2,'Electronic','[468,1239,2657,2670,3297,3298,3856,4400]'),(953,729,124,48,2,'Children\'s TV','[418,373,859,895,896,900,3379,3380,3382,3387,3391,3393,3400,3406,3408,3411,3412,3415,3416,3427,3428,3431,3432,3433,3436,3743,3497,5617,5629,5793,5794,5798,5800,5801,5803,5806,5807,5808,5809,5811,5814,5817,5820,7134,7237,8311,10634,10718]'),(954,732,124,32,2,'Fantasy','[1175,520,340,1716,1174,469,475,861,863,1217,1271,1284,1656,1657,1667,1685,1694,1708,2171,2184,2019,2020,1117,2406,2752,3169,2109,3492,4518,4723,5633,5499]'),(955,733,124,69,2,'Happy','[319,1640,871,897,898,2190,2152,2670,2600,2583,2792,2821,3052,3260,3535,3576,3574,3564,3553,3379,3393,3394,3396,3405,3416,3418,3420,3426,3463,3492,3497,3513,3519,3528,3529,3992,4594,4450,4392,4400,1639,2440,5626,5687,5493,5212,5137,6467,6474,6484,4726,5798,5802,5815,5028,5042,7574,8288,8361,8427,8445,7315,7694,8094,7845,7847,5499,7341,10120]'),(956,734,124,6,2,'Kids Playing Instruments','[2175,2033,2600,3399,5797,8864]'),(957,735,124,28,2,'Kids Singing / Children\'s Songs','[3365,3364,3366,3367,3368,3373,3374,3377,3370,3381,3382,3397,3398,3402,3408,3410,3429,3434,3442,3363,5793,5798,5799,5806,5810,5811,5816,5818]'),(958,736,124,0,2,'Links',NULL),(959,737,124,8,2,'Lullabies','[475,846,2818,3440,4640,4641,8071,7885]'),(960,738,124,16,2,'Nursery Rhymes','[2642,3392,3437,3438,3439,3441,3442,3445,3739,5808,5809,5812,5813,5815,5819,5820]'),(961,739,124,18,2,'Pop For Kids','[859,2597,3385,4551,5794,5795,5797,5800,5801,5805,5808,5812,5817,5819,6909,7007,7259,8608]'),(962,782,125,5,2,'Badly Played','[467,1740,8635,10306,2261]'),(963,740,124,1,2,'Sad','[610]'),(964,784,125,11,2,'Chase','[2167,2846,4513,4963,4964,4965,6486,7120,8101,7883,8634]'),(965,783,125,70,2,'Cartoons / Animation','[1175,249,322,503,1170,1174,1641,1644,1353,1389,467,468,869,871,890,1300,1740,1702,2019,2154,2155,2846,3564,3553,3740,3857,3497,4398,4399,4510,4513,4521,4963,4964,6495,5816,7773,8864,8634,10124,10127,10128,10129,10130,10131,10132,10134,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10149,10150,10151,10152,10153,10154,10155,10365,10368,10652,10718,10868]'),(966,785,125,2,2,'Cheeky','[5805,8101]'),(967,786,125,9,2,'Cheesy / Kitsch','[890,1740,4393,3211,2367,10124,10306,10313,10352]'),(968,787,125,3,2,'Comedy Effects','[2157,5814,5037]'),(969,788,125,19,2,'Comedy General','[1696,1672,2152,2157,2148,3602,3735,3743,3861,3462,5793,5809,5813,8101,8635,10329,10337,10352,10353]'),(970,789,125,2,2,'Cumbersome / Plodding','[3743,3462]'),(971,790,125,18,2,'Happy','[1672,2152,2846,3463,3513,4481,4521,3211,3187,5137,5856,5028,5042,5037,8425,7698,8094,7887]'),(972,598,117,7,2,'Harmonica','[5819,9644,9650,9855,9857,9858,9861]'),(973,603,117,1,2,'Lute','[2477]'),(974,602,117,1,2,'Kazoo','[5800]'),(975,791,125,39,2,'Jaunty / Whimsical','[322,1197,1641,467,1300,591,1672,2150,2151,2799,3538,3291,3861,3863,3519,4542,4393,4398,4399,4491,4521,3211,4963,4964,5626,6648,7164,7109,5037,7762,7773,7694,7811,7816,7845,7847,7849,7864,10176]'),(976,793,125,0,2,'Links',NULL),(977,792,125,1,2,'Jews / Jaws Harp','[7864]'),(978,794,125,16,2,'Loony / Zany','[1702,2217,2154,2155,3740,3857,4399,7120,10329,10332,10346,10352,10365,10368,10860,10868]'),(979,600,117,0,2,'Harpsichord',NULL),(980,797,125,2,2,'Music Hall / Vaudeville','[3859,3863]'),(981,795,125,0,2,'March',NULL),(982,796,125,0,2,'Modern',NULL),(983,798,125,0,2,'Pathos',NULL),(984,804,125,1,2,'Stealth','[10357]'),(985,800,125,0,2,'Saucy',NULL),(986,803,125,7,2,'Slapstick','[1702,2217,2150,2154,2155,7816,7839]'),(987,801,125,0,2,'Saw',NULL),(988,799,125,16,2,'Quirky','[470,1300,4398,4942,4931,2440,6495,7750,8529,10254,10262,10313,10332,10346,10357,10634]'),(989,802,125,13,2,'Sit Com','[2832,2866,3599,3580,3744,4612,4528,4678,4400,4989,4491,5573,3030]'),(990,805,125,1,2,'Villainy','[6518]'),(991,806,125,1,2,'Vocal','[5626]'),(992,807,125,0,2,'Wah-Wah Trumpet',NULL),(993,1202,125,7,2,'Comedic Tension','[4965,4942,4931,6495,10353,10357,10370]'),(994,1137,125,13,2,'Dramedy','[589,2253,2151,4840,5573,4703,6988,10337,10343,10346,10358,10388,10397]'),(995,1193,125,7,2,'Vintage','[4483,4489,3693,3682,3030,7237,7798]'),(996,879,126,26,2,'Automation','[1137,478,1285,618,3150,3585,3571,4184,4193,4554,361,6449,5403,5408,5411,5416,5417,8187,8399,8400,8540,8545,8561,8055,8529,7835]'),(997,880,126,76,2,'Beds / Underscore','[158,374,1637,1341,679,680,689,661,673,678,685,708,787,799,811,828,839,969,953,952,982,870,1205,1211,1219,1221,1239,1267,1275,1291,1292,1293,1295,1296,1297,1298,1595,607,356,1578,2081,2124,2650,2660,2377,2381,3125,3610,3344,3646,3856,4454,5236,5109,5866,6470,6471,6487,6488,6490,6491,6507,6803,4689,5259,4297,4434,7806,8373,10160,10213,10374,10425,10454,10681,10702]'),(998,881,126,254,2,'Bright / Optimistic','[289,301,512,518,521,342,1718,1728,1735,373,374,378,381,382,408,410,379,1151,1152,1633,1640,1641,1647,1645,1644,1643,1375,451,474,487,639,651,716,785,807,829,959,849,853,848,857,865,881,884,888,889,893,895,896,897,898,900,1202,575,1220,1288,1295,1614,1617,1621,606,1649,1701,1695,1683,1665,1706,1108,2037,2036,1886,2243,2657,2665,2693,2695,2564,2620,2558,2597,2613,2805,2739,3039,3073,3071,3053,3260,3242,3032,3545,3620,3605,3446,3483,3509,3515,3528,3992,573,4574,4397,4456,4459,4479,4497,4512,4515,4517,5072,4242,1700,2479,5617,5622,5629,5636,5543,5564,5566,5181,5585,3746,5844,5908,6457,6460,6462,6467,6469,6470,6473,6474,6477,6478,6480,6484,6490,6497,6500,6501,6503,6835,6814,6780,6757,6673,6659,6616,4726,5259,6427,6432,6449,5631,6892,6909,6978,7007,7036,6723,6727,7191,7148,7097,5365,5389,5382,5379,3040,7270,7762,7467,7554,7607,7788,7799,5446,8086,8090,8176,8196,8200,8204,8214,8218,8230,8258,8279,8284,8288,8311,8257,8351,8361,8370,8387,8386,8402,8411,8421,8423,8427,8430,8435,8438,8445,8462,8465,8491,8492,8506,8508,8513,8543,7753,8862,7333,7339,7689,7712,7717,7861,7887,7901,7914,7928,8637,7967,8668,8671,8672,8855,5503,7354,9031,10028,10051,10234,10251,10430,10467,10508,10618,10619,10636,10689,10696,10703,10717,10798,10812,10820,10838]'),(999,882,126,3,2,'Build','[1716,4943,5503]'),(1000,878,126,39,2,'Anthemic','[643,786,800,821,965,874,2711,2722,2721,2632,4512,6076,6464,6461,6468,6477,6488,6493,5379,8073,8068,7778,5395,5420,5422,5427,8074,8079,8081,8083,8085,8090,8176,8192,8200,8386,7877,7933,7943]'),(1001,883,126,2,2,'Classical Idiom','[1228,6464]'),(1002,884,126,14,2,'Communications','[1633,466,864,1617,1665,4184,6441,6449,5366,7607,7783,7700,10428,10689]'),(1003,885,126,58,2,'Electronic','[1221,1285,1287,1296,1594,1659,1660,1699,1707,359,363,2037,2131,2347,2702,2381,2545,2536,2568,2643,2616,2574,2579,2858,3135,3150,3164,3590,3571,2872,3297,3300,4185,4193,4522,4882,361,7293,7783,7790,7806,5417,5420,5422,5427,5446,5449,5453,5457,5459,8052,8055,8609,7958,7947,5505,10056,5456]'),(1004,888,126,24,2,'Heavy Industrial','[1101,1102,1103,1104,519,1711,665,1304,1595,4193,4457,4858,4882,4416,7293,8166,8282,10159,10347,10362,10418,10668,10737,10889]'),(1005,887,126,81,2,'Futuristic','[565,1209,1290,1606,604,605,608,618,576,4466,4522,3115,6497,4412,4432,5366,7783,5403,5408,5411,5416,5417,5418,5427,5449,5453,5457,5471,5472,8214,8242,8248,8249,8282,8286,8343,8354,8399,8443,8444,8537,8545,8561,8859,7323,7686,7700,7713,7671,7674,7675,7672,7382,7391,8052,8053,8054,8055,8057,8529,8530,8606,8607,8609,8611,7835,7928,7933,8646,7958,8669,8670,8671,8672,8673,8674,8627,8855,7950,7947,5438]'),(1006,886,126,0,2,'Fanfares',NULL),(1007,889,126,222,2,'Inspiring / Stirring','[259,275,413,307,321,324,517,518,521,522,1132,1710,1714,1718,1716,1724,1728,1735,1719,1835,374,375,381,382,404,408,410,379,401,403,389,1154,1179,1189,1198,1637,1636,1167,1806,1813,1335,471,595,646,650,658,660,657,643,636,639,651,654,661,664,708,716,739,785,786,799,800,807,811,821,822,829,839,954,963,959,846,853,855,859,863,870,874,881,884,899,791,978,903,794,732,565,1267,1298,1398,1649,1701,1683,276,2024,1886,2153,2144,2650,2663,2694,2727,2722,2721,2611,2632,2633,2613,2544,2573,2829,3250,3242,3322,3325,3310,3315,3539,3583,3561,4182,3458,4459,4496,4512,4515,306,5691,5564,5572,6463,6477,6488,6490,6491,6493,6494,6501,6507,6445,5631,7036,5365,5379,5374,5385,8073,8071,8068,5395,5407,5422,5433,5446,8074,8079,8083,8085,8086,8090,8167,8176,8177,8192,8200,8214,8218,8222,8230,8234,8251,8296,8257,8351,8373,8381,8384,8386,8419,8421,8423,8430,8438,8462,8465,8492,8497,8499,8520,7331,7333,7339,7336,7689,7712,8052,7876,7877,7901,7967,8674,8855,7945,5497,5501,5503,7354,10025,10050,10289,10400,10430,10497,10508,10514,10619,10630,10681,10702,10727,10798,10838]'),(1008,892,126,57,2,'Logos','[504,523,346,1661,6428,6431,6426,5642,5437,8205,8211,8213,8318,8323,8384,8402,8474,8477,8480,8491,8511,8536,8537,8538,8540,8541,8543,8544,8545,8546,8547,8549,8550,8553,8554,8555,8557,8560,8561,8566,8567,8568,8570,8573,8574,8576,8577,8578,8579,8580,8583,8586,8588,8590,8594,8605,10724]'),(1009,890,126,8,2,'Launch','[1636,839,965,855,1232,1285,3515,10428]'),(1010,893,126,2,2,'Luxury','[1654,10039]'),(1011,894,126,5,2,'Period','[1622,600,607,614,2387]'),(1012,891,126,36,2,'Light Industrial','[167,499,506,407,411,864,881,261,3150,516,3585,4554,4503,3086,4781,5722,6101,6441,5366,5449,5450,8286,8343,8399,8444,8518,8859,8112,7686,7713,8609,8674,10180,10225,10288,10696]'),(1013,895,126,163,2,'Pop Corporate','[500,502,512,342,1828,373,378,407,409,410,379,1164,1147,1151,1630,1633,1643,848,856,857,865,888,889,893,900,1202,575,577,1594,1617,1621,1695,1665,2036,1884,2658,2660,2663,2672,2678,2693,2695,2564,2576,2805,2752,3053,3250,3313,516,3537,3545,3515,573,4552,4456,4459,4497,4503,5072,2479,5617,5622,5687,5757,5212,5908,6457,6460,6467,6470,6473,6474,6475,6478,6483,6500,6505,6757,6673,6659,6616,5631,6892,6909,6978,7007,7036,7047,7191,7097,5382,7259,7270,7757,7766,7421,7467,7607,7788,7799,8086,8173,8196,8234,8258,8279,8284,8287,8305,8311,8312,8257,8354,8361,8387,8411,8413,8427,8430,8435,8438,8445,8462,8465,8492,8499,8506,7753,7333,7334,7689,7717,7861,7887,7901,7914,8637,7967,9467,10010,10023,10026,10052,10251,10400,10430,10467,10483,10512,10513,10514,10618,10619,10635,10644,10652,10658,10662,10689,10702,10712,10870]'),(1014,896,126,105,2,'Power & Energy','[167,302,305,317,318,499,515,519,1711,407,409,411,1137,1630,1646,1199,1200,1344,451,462,466,477,856,864,866,869,893,560,1594,1607,1620,1626,1652,1669,1692,1701,1675,360,1309,2037,2017,2659,2709,2727,2604,2619,2630,2542,2536,2551,2547,2535,2579,2745,3319,3324,3541,3546,3585,3571,3524,4554,4548,4463,4503,4508,3670,4882,2473,5150,5879,5908,6132,2437,6483,6757,6605,6998,6978,7047,5319,4411,4412,4433,4429,7293,7788,5403,5408,5411,5418,508,8083,8165,8173,8187,8221,8286,8343,8354,7380,7818,7914,10347,10362]'),(1015,898,126,1,2,'Progress','[1287]'),(1016,897,126,1,2,'Prestige','[10273]'),(1017,899,126,17,2,'Training / Information','[6471,6507,5319,4434,7332,10017,10052,10169,10178,10182,10207,10225,10374,10444,10662,10681,10717]'),(1018,1101,126,71,2,'Emotional','[376,1637,1354,476,642,666,647,654,661,664,665,692,693,708,722,786,793,799,821,927,933,948,954,963,846,863,899,978,903,552,580,1293,1294,2153,2580,2623,2565,4530,4742,6491,6892,7778,8163,8180,8188,8195,8212,8222,8228,8251,8266,8283,8296,8299,8300,8301,8304,8368,8373,8381,8383,8421,8512,7327,7338,7945,5497,5501,7354,7364,10311]'),(1019,900,126,61,2,'Vocal','[1640,1344,549,541,542,543,544,548,560,561,564,565,575,577,578,579,580,582,583,587,588,1596,1600,1602,1604,1608,1610,1612,1615,1618,1621,1626,604,612,2057,1690,1662,1106,2862,3334,2094,4187,574,576,550,551,4982,4983,4984,4985,4986,4987,4988,4992,4475,4977,6475,6481,7336,8047,7959]'),(1020,1112,126,50,2,'Vintage','[1644,1375,636,1268,1271,1622,597,600,607,614,1659,2222,2227,2232,2241,2243,2137,2140,2142,2234,3300,4584,4644,4465,4476,4221,6497,6659,6648,6616,4433,4432,4430,4428,4427,4434,4431,4436,7237,5454,7335,7713,7671,7674,7675,7672,7673,7849,7963,5456]'),(1021,741,127,134,2,'Atmospheric','[123,1181,509,383,1628,655,680,688,671,672,685,687,811,812,816,943,969,972,953,982,906,749,1,1209,1215,1242,1891,287,283,1110,1821,2248,2206,2198,2375,2385,3140,3031,3583,3862,2412,2415,2438,2443,2453,2463,2470,2481,3969,4442,4390,4484,5009,4945,2454,2464,5236,6068,2486,6504,4692,4697,4701,4702,5282,5287,5276,4693,4690,6234,6314,5360,5478,5390,5381,5392,8073,8069,8068,7281,7805,7664,7668,7670,5395,5423,5424,5425,5433,5436,5447,5458,5460,5463,5464,5469,5477,8074,8078,8239,8376,8418,8654,8657,7687,7699,7702,7704,7709,7711,7718,7393,8534,7890,8612,8616,8617,8618,8621,8624,8628,8833,8834,8838,5505,7344,7355,7362,7090,7092,4124,9365,9511,10340]'),(1022,1121,126,30,2,'Ethnic','[585,1233,1251,1253,1270,1272,1273,603,594,609,1668,1693,2188,2189,2592,2374,2379,3542,3546,3602,4484,4515,4763,2018,1155,5455,8856,8608,7871,2538]'),(1023,742,127,100,2,'Background / Pads','[993,34,679,688,689,671,673,678,684,685,690,701,707,787,806,930,1205,1212,1214,1292,2073,1109,1110,1115,3310,2411,2410,2412,2415,2438,2453,2470,2481,3969,3990,4642,4635,4852,4945,2489,5771,5236,3751,4438,4697,4693,6313,6314,6367,5478,5390,5375,5371,8069,7664,7665,7668,7670,5425,5431,5436,5441,5460,5463,5467,5477,8078,8239,8376,8656,8657,7695,7699,7711,7393,8053,8057,7917,8624,7087,7091,7092,9354,9320,9396,9446,9559,10026,10029,10030,10156,10158,10192,10201,10249,10287,10290,10340,10374,10380]'),(1024,744,127,7,2,'Factual Entertainment / Reality','[2093,1336,10236,10324,10351,10380,10425]'),(1025,743,127,124,2,'Docudrama','[324,1841,1832,377,387,391,1179,689,672,687,692,694,701,817,828,840,938,978,1210,2072,1107,1123,1122,2216,2681,2594,3650,4186,2410,3980,4449,4831,4840,4866,4904,4967,4971,4941,4943,4933,2430,2431,2446,2448,2451,2455,2492,2462,5612,5685,5681,2486,6847,4685,5265,5271,4700,4702,4725,5266,5285,5286,5269,4731,5264,4694,4722,4698,6299,6338,6348,5361,5370,5384,8070,8067,8065,8062,8063,5443,8078,8195,8310,8327,8398,8406,8463,8858,8861,7327,8927,7690,7695,7702,7718,7821,7868,7876,7921,8644,7964,8843,7948,7355,7362,10200,10203,10215,10240,10277,10287,10303,10308,10323,10356,10364,10381,10386,10390,10391,10396,10414,10667,10861]'),(1026,745,127,13,2,'Historical','[2400,4442,4388,5609,5363,5391,10167,10242,10250,10293,10339,10342,10389]'),(1027,746,127,192,2,'International & Ethnic','[1834,406,1340,967,960,981,975,1299,559,1233,1251,1270,1272,1273,1274,2078,2073,1668,1693,1881,1883,2188,2189,2205,2210,2251,2252,2225,2239,2238,2255,2257,2258,2125,2135,2134,2149,2162,2198,2199,2200,2220,2228,2229,2230,2192,2156,2262,2661,2713,2724,2720,2546,2857,2374,2379,3542,3544,3613,3606,3589,3563,3552,3548,4183,3858,3860,3864,2411,3976,3991,4675,4673,4674,4668,4677,4672,1639,4756,4763,4837,4870,4682,2018,2461,2416,2418,2420,2421,2425,2475,2477,2483,2464,5659,5666,5685,5671,5489,5490,5491,5492,5493,5494,5495,5496,5123,6068,2488,2442,6560,6561,6562,6563,6565,6566,6567,4716,4715,5843,5677,5663,961,7190,590,5394,5375,5373,5367,5378,8072,7432,7574,7667,5455,5474,8352,8375,8395,8473,8856,7316,7725,7706,7709,7710,7714,7372,8051,8534,8864,7822,7851,7872,7906,7912,8630,8645,8616,8626,8833,8839,8840,8842,8845,8854,2538,9360,9361,9374,10080,10158,10165,10173,10186,10190,10230,10233,10256,10260,10274,10279,10280,10301,10305,10320,10350,10377,10394,2261,10443,10726]'),(1028,747,127,58,2,'Light Tension','[1838,751,750,3315,2426,2443,2484,2482,4682,2489,2460,2445,2452,5734,3751,2434,4734,4712,4691,5960,6310,6406,6350,7597,7807,5440,5443,5444,5465,5468,5469,5470,5473,8317,8360,7332,8656,7724,8112,7373,7377,8059,8617,8846,7730,7344,7362,10157,10172,10189,10196,10209,10211,10229,10246,10248,10344,10376]'),(1029,748,127,18,2,'Military / War Documentary','[2403,5084,3200,4681,5652,6847,6631,4707,4706,4696,7409,7399,5475,10089,10270,10387,10548,10577]'),(1030,749,127,107,2,'Science & Technology','[55,1830,384,1178,1185,1628,665,757,768,934,1237,1290,1578,2648,2859,2413,4466,4522,3115,4852,5691,4438,6492,4701,5268,4718,4717,6183,6193,6252,6313,6349,5308,4427,5381,5371,7281,7757,7790,7665,5409,5423,5431,5437,5445,5447,5453,5459,5463,5464,5467,5469,5470,5471,5472,8239,8273,8274,8400,8443,7323,7328,8865,8655,8656,7686,7674,7378,7382,7391,8053,8054,8057,8060,8530,8608,8610,8611,7928,7933,8646,7960,8669,8670,8673,8612,8618,8619,8620,8627,8628,8834,7950,5505,10160,10177,10182,10183,10197,10199,10210,10217,10225,10226,10231,10288,10384]'),(1031,1161,127,12,2,'Links/Stings','[8564,8565,8566,8567,8570,8581,8586,8587,8588,8591,8595,8606]'),(1032,750,127,60,2,'Wildlife','[966,3613,3304,4183,3858,3860,3991,4540,4674,4668,4677,4672,4870,2416,2418,5486,5487,5490,2488,2442,6464,6504,5263,5843,5663,6268,6397,5375,5378,7670,7667,5424,5474,8588,7710,7714,7372,8051,7822,7872,7912,8630,8616,8626,10187,10198,10200,10209,10214,10218,10221,10333,10370,10379,10395,10428,10584,10586,10630,10773]'),(1033,1138,127,41,2,'Art / Culture','[1228,1286,1134,1135,1136,2022,2187,2177,2182,2183,2033,4443,4445,4390,5606,5613,5614,4750,5391,5387,5373,5371,5378,5392,7318,7344,7360,10163,10194,10213,10234,10239,10244,10289,10312,10327,10341,10371,10380,10399,10459]'),(1034,808,128,1,2,'Action','[5949]'),(1035,809,128,4,2,'Adventure','[389,1144,5401,8116]'),(1036,811,128,5,2,'Build','[1125,1122,7748,7921,7941]'),(1037,810,128,91,2,'Beds / Underscores','[1154,660,679,680,688,684,687,690,692,701,707,715,787,806,812,817,828,840,926,905,1,1294,1691,1851,1131,1115,2732,3326,3278,3281,3282,3283,3284,3286,4635,4395,4478,4831,4866,5009,4939,4945,4933,4930,4680,2476,2487,2446,2451,2455,6789,4687,4683,4685,4689,5265,5270,5271,5272,5278,4725,5279,5283,5288,4731,4704,4686,6299,6338,5360,5364,5368,5425,8228,8327,8369,8379,8383,7718,8058,7854,7855,7862,7876,7903,7904,7917,7948,7512,7355,10037]'),(1038,812,128,0,2,'Chase',NULL),(1039,813,128,29,2,'Documentary Drama','[388,1337,595,642,822,2068,2216,2661,2681,4186,4395,4950,4940,4947,2490,5611,5676,4695,3245,5385,5484,8247,8321,8381,8510,7855,7856,8644,8868]'),(1040,815,128,1,2,'Historical','[5606]'),(1041,814,128,45,2,'Eerie / Supernatural','[386,390,2398,4795,2461,4732,4708,4738,4712,6544,5951,6016,6036,6155,6198,6202,6295,6348,5370,5380,5392,8067,8064,7619,8238,8397,8558,7319,7320,7728,7680,7681,7683,7696,7701,7702,7707,7715,7716,7720,8059,8615,8848,7527,7730]'),(1042,816,128,31,2,'Horror','[4808,5008,5013,4938,4932,4928,2435,2468,2423,4732,5267,4735,4727,4691,4684,5645,5981,6016,6216,6295,6300,5380,8189,8424,8451,7325,8650,7692,7703,7932,7949]'),(1043,817,128,26,2,'Light Tension','[323,834,1267,1124,1119,3312,3282,4451,4939,4929,2491,2445,2448,2492,2462,5649,6208,5372,8063,7746,7748,7680,7681,7683,7868,7917]'),(1044,818,128,11,2,'Links / Stings','[2176,2175,5644,8212,8266,8318,8477,8564,8570,8581,8595]'),(1045,819,128,4,2,'Menace','[8422,7752,7324,7940]'),(1046,820,128,26,2,'Mystery & Tension','[1826,3614,4413,4808,4967,4968,4969,4705,5677,6544,5962,6002,6021,6140,6224,5049,5372,8067,8310,8397,8422,7724,7728,7697,7941,7954]'),(1047,821,128,101,2,'Nostalgic','[310,311,1719,1837,1832,377,1156,1354,693,694,702,706,793,833,914,733,732,548,1615,2072,1682,286,1121,2193,3256,3246,3327,3028,3588,3562,3277,3280,3281,2527,4589,4452,4531,4395,4904,5015,4947,4679,4680,2430,2490,5609,5610,5612,5681,5557,5559,6567,4687,4683,4710,5270,4741,5279,6685,6692,6859,6885,6901,7203,7201,5047,5376,8062,7769,7805,2143,8368,8379,8398,2212,8463,8512,7745,7747,8857,7338,7726,7727,7729,7688,7690,8099,7821,7856,7862,7903,7904,7964,7509,7527,8867,8870,8872,8873,8874,7364]'),(1048,827,128,5,2,'Vintage Horror','[5008,4932,4739,5645,8632]'),(1049,824,128,5,2,'Scene Changes','[290,1187,3283,7723,7908]'),(1050,822,128,20,2,'Orchestral','[2399,3289,3276,3277,3278,3286,5010,4700,4729,5273,5275,4704,5274,4695,4688,6685,5374,5368,8861,7688]'),(1051,825,128,3,2,'Urban','[4425,4426,7739]'),(1052,823,128,5,2,'Promos','[2565,4640,4641,5399,8300]'),(1053,826,128,3,2,'Vintage Drama','[2216,2169,4530]'),(1054,828,128,0,2,'Vintage Links / Stings',NULL),(1055,829,128,1,2,'Violence','[1595]'),(1056,901,129,255,2,'Adventure','[227,243,291,292,300,314,316,317,318,501,500,503,511,513,514,326,331,332,1712,1829,406,392,393,397,399,405,1189,1148,1144,1638,1799,1345,721,728,965,740,729,1299,1308,1301,542,1618,1626,2058,2327,2395,2396,2397,2400,2405,2407,2408,2659,2674,2676,2677,2705,2716,2715,2709,2707,2706,2611,2620,2610,2772,2829,2857,3251,2861,2862,2863,2864,2865,2867,2868,2869,2870,3272,3317,3318,2259,3308,2223,3619,3586,3584,3577,3574,3566,3565,3558,3556,2099,2101,3642,3662,4182,3732,3855,3473,3483,3275,4608,4612,4627,4443,3296,4632,4676,4391,4951,4952,4953,4954,4956,4957,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4990,4992,4994,4995,4996,4464,4499,4510,4204,3704,2913,4959,4960,4962,4421,4422,4423,5495,5496,5170,5196,5571,5888,6825,6920,6929,5281,4713,4719,4730,5284,4721,4723,5263,4728,5843,6528,6536,6552,6701,6710,6949,5328,5479,5394,5387,8072,7409,7498,7476,7566,5396,5400,5401,5410,8185,8186,8209,8244,8245,8292,8328,8341,8407,8408,8418,8450,8455,8458,8478,8860,7317,7331,7339,7336,7722,7725,8114,8116,8649,7693,7719,8110,8050,7909,8630,8635,7959,7961,7965,8673,8836,8840,7938,7939,7943,7944,7351,7358,8987,9664,10028,10165,10174,10190,10242,10305,10314,10330,10339,10342,10361,10379,10393,10443,10496,10500,10524,10548,10551,10575,10584,10585,10586,10603,10630,10794,10861]'),(1057,903,129,2,2,'B-Movie','[2367,4387]'),(1058,905,129,112,2,'Children','[328,1165,956,861,871,1217,2186,2184,1117,1120,2612,2642,3260,3574,3558,3555,3374,3375,3370,3385,3387,3402,3403,3405,3406,3411,3412,3420,3426,3427,3428,3429,3430,3431,3432,3433,3435,3732,3739,3740,3861,3513,4444,4450,4523,4391,4393,4461,4467,4468,4518,5011,5105,5799,5800,5803,5804,5807,5812,5814,5816,5817,5818,5819,5820,7847,7912,7955,7341,7347,7351,7353,9305,10111,10112,10113,10114,10115,10116,10118,10119,10120,10121,10122,10124,10125,10126,10127,10131,10132,10133,10134,10136,10137,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10150,10151,10152,10153,10154,10155,10333,10338]'),(1059,902,129,45,2,'Animation','[1550,1175,322,520,328,1165,1170,1352,469,977,960,956,861,1284,1657,1667,1685,1708,1135,2171,2019,1120,3558,3555,4643,4523,4632,4673,1173,4461,4467,4468,4935,4931,6489,4711,5499,7341,7347,7360,9460,9553,9582,9671,9685]'),(1060,908,129,159,2,'Epic','[1145,291,292,295,299,333,1712,1726,1833,392,393,397,399,1638,721,1308,1306,1301,1847,2058,1653,1112,2032,2025,1111,2395,2402,2403,2404,2405,2407,2664,2666,2676,2610,2729,3317,3314,3584,3855,4632,4633,4638,4391,4499,5084,3200,4795,5007,4960,4681,2465,5668,5486,5487,5488,5123,6631,6920,6929,7017,7068,4736,4707,4706,5281,4713,4719,4720,4730,5284,4721,4737,5677,6508,6552,6701,6958,2641,5479,7399,7794,5396,5400,5401,5429,5475,5484,8184,8185,8190,8244,8245,8247,8292,8328,8341,8404,8405,8407,8408,8450,8455,8473,8478,7752,8860,7326,7329,7722,8116,8117,8649,8651,7693,7708,7719,7814,7824,7858,7909,8629,8614,8847,8854,7938,7939,7944,7946,9394,9550,9551,9552,9562,9691,10184,10260,10267,10270,10294,10300,10314,10315,10316,10317,10318,10328,10330,10339,10361,10379,10393,10414,10495,10496,10497,10498,10548,10861]'),(1061,907,129,484,2,'Drama','[1550,1146,310,324,522,330,333,1710,1841,1837,1832,1826,377,387,388,1179,1191,1156,1799,1352,1354,1337,1335,642,658,666,647,654,672,678,693,694,702,706,707,715,722,726,739,793,817,833,834,840,914,927,931,933,938,944,958,792,905,794,781,733,24,1302,563,572,578,1204,1210,1249,1250,1844,1845,2043,2057,2068,2072,1682,1651,1678,1691,1107,287,286,281,274,270,1131,1112,1134,2032,1822,2016,2031,2022,1128,1127,1126,1125,1124,1123,1122,1121,1119,1114,2251,1116,2398,2399,2407,2669,2675,2683,2654,2681,2726,2638,2580,2595,2552,2553,2529,2627,2571,2623,2760,2808,3074,3060,3246,3320,3323,3326,3311,3312,3308,3544,3588,3335,3650,4186,3731,3862,3470,3512,3522,3979,3980,3985,574,566,3289,3288,3287,3276,3277,3278,3280,3281,3282,3283,3284,3286,2527,4195,4449,4452,4451,4388,4389,4413,4414,4991,4478,4415,4506,4209,4808,4831,4904,5009,5010,5011,5015,4978,4959,4960,4969,4971,4973,4950,4939,4940,4943,4947,4933,4929,4679,4425,2435,2491,2430,2431,2487,2446,2448,2455,2477,2490,2492,2462,5613,5614,5676,5541,5557,5559,5567,5581,4975,4976,6084,1336,6485,6567,6568,7068,4683,4710,4732,5265,5270,5271,5272,5278,4700,4702,4708,4724,4725,4736,4741,5266,5279,5282,5283,5285,5286,5287,5288,5269,4731,4705,4720,5264,4729,5273,5276,5275,5284,4696,4694,4704,5274,4728,4722,4699,4698,4690,4695,4688,4686,5649,5674,6508,6685,6692,6859,6870,6879,6885,6901,6938,6006,6041,6155,6202,6208,6216,6220,6224,961,6299,6338,6348,7201,3245,5328,5047,5361,5364,5384,5376,5368,8070,8065,8062,8063,7769,7566,5484,8189,8232,8238,8247,8301,8309,8310,8321,8327,8368,8369,8379,8383,8385,8398,8404,2212,8406,8422,8458,8463,8510,7743,7745,7746,7747,7748,7749,7752,8857,8858,8860,8861,7326,7329,7338,7722,7723,7726,7727,7728,7729,8927,7690,7695,7696,7697,8103,7739,8050,8058,7814,7821,7854,7855,7856,7858,7862,7903,7904,7908,7921,8644,7960,7964,8832,8843,8848,7940,7954,7948,7512,7522,7527,8866,8867,8868,8869,8870,8873,8874,8875,7364,8975,8131,7082,7085,7087,3627,4280,4077,9286,9403,9549,312,9873,9962,9963,9964,9965,10036,10040,10042,10066,10089,10163,10181,10192,10194,10200,10201,10203,10204,10211,10215,10234,10235,10237,10240,10248,10249,10255,10265,10267,10269,10271,10272,10273,10275,10276,10277,10278,10287,10289,10291,10292,10293,10296,10297,10298,10300,10303,10305,10307,10308,10312,10315,10317,10319,10320,10322,10323,10324,10325,10326,10327,10334,10335,10341,10351,10356,10358,10364,10371,10372,10373,10381,10382,10383,10386,10390,10391,10396,10398,10399,571,10495,10603,10667]'),(1062,906,129,200,2,'Detective / Spy','[243,1075,413,327,331,332,1727,1825,1843,385,1353,1389,1338,472,479,733,729,11,1658,1684,1705,1671,2253,2397,2409,2679,2691,2714,2712,2728,2556,2628,2548,2605,2825,2859,3027,3036,3033,638,3534,3598,3577,3567,3290,3865,2428,3505,3966,4197,4556,4555,1681,4471,4486,4495,4505,5060,4209,3704,3086,4756,4855,5007,4972,4944,4946,4936,4417,1673,334,2445,5016,2425,4749,2441,2485,2469,2467,2447,2439,6594,7057,5277,6536,6988,5966,5968,5974,5977,5987,5989,5990,5998,6001,6002,6013,6017,6024,6033,6157,6164,6171,6175,6179,6188,6228,6231,6240,6248,6265,6278,6304,6307,6406,6397,6327,6334,6349,6350,6357,6361,6364,6367,6375,6381,5377,7630,7797,5434,5465,5473,8226,8227,8317,8484,8518,7332,7390,7392,7732,7737,7518,9050,9058,8136,7078,6057,5791,5343,3815,4103,4114,4141,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9341,9344,9352,9358,9376,9286,9404,9419,9442,9448,9473,9474,9483,9519,9570,9591,9600,9868,10032,10035,10044,10049,10157,10172,10196,10218,10254,10309,10363,10368,10369,10524]'),(1063,1115,128,58,2,'Sorrow','[1204,3311,566,3288,3287,4451,4414,5010,4950,4940,4930,4929,2491,2431,5681,5676,5272,5278,4724,4741,4705,4696,4694,5274,4722,4699,4686,6041,6155,6198,6202,6220,5049,5361,5364,5370,5384,5376,8065,8189,8309,8397,8510,7743,8858,7723,8927,7688,7697,8103,8058,7854,7941,7954,7509,7512,7522,571]'),(1064,904,129,11,2,'Bollywood','[1850,2252,2228,2229,2230,2242,2724,3287,4966,7432,5410]'),(1065,911,129,0,2,'Musicals',NULL),(1066,910,129,63,2,'Horror','[1650,2646,2662,3974,3975,3977,3996,4973,4938,4928,2419,2468,4733,4727,6146,6285,6300,6330,5380,7796,5466,8424,8451,8459,8539,8558,7932,8632,8615,7084,3815,4114,9357,9358,9406,9416,9417,9418,9556,9567,9608,9995,10167,10179,10210,10227,10259,10264,10268,10278,10299,10302,10304,10310,10322,10331,10345,10359,10360,10378,10385,10392,10746]'),(1067,909,129,40,2,'Historical','[1834,1195,1299,1308,1306,1668,2177,2182,2183,2033,2134,2374,4499,4837,2018,2475,5606,5489,5491,5494,5123,4750,6560,6561,6565,4737,4716,4715,5363,5387,8375,7725,7710,7714,8534,7906,8645,10250,10373,10387]'),(1068,912,129,5,2,'Orchestral / Contemporary Crossover','[2723,3862,4735,9070,9477]'),(1069,914,129,295,2,'Romantic','[1149,1150,1157,1158,1181,1194,416,254,259,308,311,315,323,1724,403,402,1159,1160,1161,1191,1195,1192,1193,1196,1198,1642,1647,1337,476,646,650,658,660,666,657,647,664,726,833,977,927,937,948,954,952,899,903,902,732,1739,549,541,543,544,548,552,562,563,569,570,578,579,580,581,586,588,589,1222,1249,1250,1254,1228,1276,1281,1294,1615,611,620,1689,1134,1136,1821,2187,2185,2181,1125,1123,1114,2206,2213,2238,2236,2257,1116,1118,2159,2249,2235,2153,2262,2307,2726,2760,2818,2860,2752,3037,3039,3074,3070,3068,3058,3044,3250,3268,3270,3325,3327,3035,3552,3736,3737,3452,3522,3982,3983,3985,566,550,3289,4589,4641,4444,4445,4389,4678,4458,4977,4680,2476,2454,2432,2436,2472,2449,5609,5610,5612,5613,5614,5611,5685,5675,5671,5589,5899,1336,2458,6479,6481,6564,6568,4685,4689,4710,4740,4709,4703,6445,5658,6692,6710,6879,6885,6901,7214,6719,6727,6729,6733,6737,6314,7203,7201,7200,7199,7183,7172,7197,5922,5047,5479,5363,5374,3040,5587,7785,7786,7809,7804,7803,7800,5458,8180,8209,8222,8228,8232,8251,8283,8299,8301,8304,2143,8503,7742,7744,7745,7747,7749,7751,8857,7395,7397,8862,7315,7317,7726,7727,7729,7682,7712,8095,8097,8098,8099,8100,8102,8104,8105,7811,7885,7956,7963,7965,8613,8837,8841,8844,8853,7945,8866,8868,8869,8870,8871,8872,8874,8875,7731,5497,5501,4022,9392,9532,9548,9561,9566,9569,312,9998,10003,10025,10029,10046,10239,10241,10249,10256,10274,10297,10311,10312,10320,10325,10326,10337,10343,10388,10395,10397,428,10459,10575,10607]'),(1070,916,129,6,2,'Silent Movies','[1194,1197,1135,3859,7816,7839]'),(1071,917,129,38,2,'Spaghetti Western','[316,325,354,353,352,351,349,348,345,344,343,341,1171,1272,1283,2160,2680,2700,2777,2214,3865,3693,2471,6733,7200,7164,7109,7797,8352,7316,7883,8836,7358,9461,10280,10354,10372,10879]'),(1072,915,129,247,2,'Science Fiction','[1074,158,1182,1183,55,329,337,1830,1824,390,391,395,1178,1185,1190,1628,1184,757,768,934,943,564,1209,1214,1235,1237,1238,1290,1292,1844,605,1648,1707,359,360,362,363,1891,287,283,263,2648,2655,2673,2381,2389,2727,2560,2562,3140,3029,2872,3348,4183,2413,2415,2438,2443,2453,2463,2470,2484,2474,3967,3973,3975,3981,3984,3990,3997,4198,4199,4603,4642,3295,4466,3115,4773,4809,4852,4873,4909,4962,2429,2450,2457,2489,2460,2452,5684,4975,4438,6492,7017,4692,4697,4701,4708,5268,5267,4718,4717,4738,4693,4698,5943,5944,5945,5947,5948,6064,6066,5955,5988,5998,6150,6160,6171,6183,6191,6193,6195,6225,6240,6244,6252,6257,6268,6274,6281,6285,6288,6290,6313,6410,6406,6402,6320,6349,6378,6385,6390,6394,4412,5360,5478,5390,5381,7281,7566,7793,7796,7805,7664,7665,5409,5413,5416,5430,5431,5441,5444,5445,5447,5460,5464,5466,5467,5468,5470,5471,5472,8182,8242,8273,8274,8297,8319,8360,8400,8410,8443,8452,7323,7328,8865,8655,8113,8648,7687,7707,7378,7382,7391,7393,7733,7741,8048,8049,8050,8054,8060,8535,8610,8611,7865,7958,7960,8668,8669,8670,8672,8612,8619,8620,8621,8627,8846,8847,8849,7937,7952,7951,7950,7526,10055,10059,10104,10160,10177,10179,10181,10188,10199,10210,10214,10217,10226,10259,10276,10277,10290,10340,10384,10392,5438,5941]'),(1073,913,129,230,2,'Rom Com / Family Movies','[1157,249,254,418,313,319,328,1827,402,1161,1152,1198,1806,1389,450,468,473,474,476,487,937,902,562,567,568,569,582,583,588,1276,1279,1280,1281,1610,1669,1692,1709,2201,2163,2197,2307,2327,2406,2658,2669,2674,2677,2678,2682,2687,2701,2726,2571,2544,2786,2792,2805,2808,2851,2818,2821,2837,3037,3039,3074,3073,3072,3071,3070,3068,3066,3064,3062,3060,3058,3056,3054,3044,3042,3235,2862,2863,2864,2866,2867,2870,2871,3268,3270,3328,3329,3538,3540,3601,3600,3582,3332,3334,3335,3338,3339,2094,2103,3400,3425,3430,3432,3433,3435,3444,3727,3731,3732,3488,3509,3512,3533,3982,3983,4195,4196,4589,4444,4446,4450,4558,4550,4541,4535,4528,4637,4955,4956,4957,4981,4983,4989,4990,4993,4994,4996,4455,4458,4500,4507,4519,5012,5014,4942,1700,3340,306,2449,5541,5544,5546,5549,5550,5553,5555,5560,5565,5566,5569,5583,5589,5591,4742,5844,6112,6469,6489,5105,5106,5799,5803,5811,5818,5658,6879,6719,6723,6729,7183,7172,7148,7134,3040,5579,5587,7785,7786,7809,7801,8188,8370,8503,7742,7744,7749,7751,7395,7397,8862,7315,7317,8092,8093,8094,8095,8096,8098,8100,8102,8104,8105,7811,7926,8647,7956,8871,8872,9765,312,10046,10049,10176,10262,10274,10286]'),(1074,918,129,103,2,'Trailers / Promos','[1168,227,296,321,504,510,511,517,522,345,344,338,347,1132,1714,1726,375,376,404,401,396,1143,1187,1144,1638,56,1813,1335,970,849,854,855,791,770,1218,1698,2728,2593,2610,2612,2565,2584,2732,2259,4470,5683,6463,7017,5667,6949,2641,7792,7793,5399,8167,8184,8186,8224,8225,8235,8242,8292,8391,8403,8450,8459,8474,8478,8563,8593,8113,8114,8649,8651,7696,7909,8950,8958,8987,8997,9003,9008,9156,9340,9303,9447,10252,288,10495,10496,10497,10498,10539,10559,10577,10585,10603,10614,10729,10746,10844,10852,10856]'),(1075,921,129,111,2,'Western / Cowboys','[316,325,354,353,352,351,349,348,345,344,343,341,326,402,1171,901,902,1307,552,584,1274,1276,1279,1280,1281,1283,603,609,2211,2250,2160,2649,2651,2653,2656,2667,2671,2680,2684,2687,2700,2387,2764,2777,2799,2851,2214,3540,3617,3731,3734,3735,3736,3533,4195,4196,4608,4541,4535,4637,4639,4458,4479,4510,4513,3693,5610,5675,5671,5543,2471,6594,5810,6729,6733,6737,7200,7183,7172,7164,7134,7120,7109,7197,5042,7769,7797,8352,7316,7883,8836,8851,7358,8137,8123,8118,9408,9420,9516,9644,9646,9648,9650,9662,9701,9855,9857,9858,10080,10279,10354]'),(1076,919,129,90,2,'Vintage','[1157,1194,289,300,315,500,331,1835,1197,1152,1191,1195,1192,1193,1196,1642,1647,1375,1268,1283,597,617,619,1648,1696,2253,2222,2140,2142,2161,2245,2274,2356,2656,2782,3035,3618,3615,3611,3568,3560,3291,3859,3863,3865,4579,4584,4644,4536,4526,1681,4465,4476,4489,4501,3174,3076,4387,6092,6479,6486,6492,6988,6453,7214,590,4433,4431,4436,7630,7785,7786,7809,7804,7803,7801,7800,7798,7335,7671,7675,7672,7839,7849,7961,7962,7963,7965,7947,9985]'),(1077,920,129,74,2,'War','[291,295,513,514,333,395,405,1188,1345,2403,2664,2666,3314,3584,2414,3275,3296,4633,4638,5084,4230,3200,4821,4681,2466,5652,5668,5486,5487,5488,5490,5541,2488,6847,6825,6631,6920,6929,4707,4706,5281,6508,5971,6413,6330,7409,7399,7794,5475,8208,8224,8341,8389,8405,8408,8433,8117,7708,7719,7814,7824,7858,8614,7938,7942,8866,8977,9327,9328,9329,9330,9331,9332,10389]'),(1078,1011,129,9,2,'Chase','[2111,2112,4532,8629,8634,10243,10261,10318,10472]'),(1079,988,129,42,2,'film noir','[1149,1150,1158,416,293,1825,1160,1664,1670,1136,2035,2141,3036,3035,1676,3342,3598,4189,4442,4389,4555,4855,1673,4749,7682,7881,9050,9051,9052,9053,9054,9055,9056,9057,9059,9060,2126,10033,10035,10043,10168,10265]'),(1080,1019,129,108,2,'Romance','[307,313,520,1835,406,1679,1678,1107,1850,1851,1112,1428,1822,2022,2184,1129,2219,2661,3066,3064,3062,3060,3056,3054,2866,2868,2871,3318,3321,3322,3323,3307,3329,3331,3342,3538,3540,3611,3601,3600,3595,3588,3575,3332,3335,3337,3338,4190,3727,3978,3745,2526,2527,4196,4448,4452,4388,4413,4558,4536,4531,4635,4670,4956,4981,4990,4991,4993,4470,4390,4500,4501,4506,4507,3223,5012,5014,5015,4959,4971,4930,4679,5549,5550,5553,5555,5557,5559,5560,5562,5583,5591,4750,4742,6084,6485,6736,5579,2212,8092,10022,10033,10036,10037,10256,10297,10311,10343]'),(1081,1012,129,268,2,'Crime','[1176,326,327,472,479,759,947,958,769,751,11,1304,1235,2047,2051,1658,1684,1650,255,262,260,2038,2264,2347,2409,2662,2673,2691,2692,2718,2717,2714,2383,2618,2621,2635,2638,2644,2556,2567,2530,2557,2586,2531,2591,2602,2606,2607,2625,2626,2628,2637,2552,2563,2529,2588,2592,2617,2548,2555,2587,2594,2599,2605,2614,2629,2584,3239,3135,2203,3033,638,3534,3614,3567,3303,3349,2111,2112,2113,2114,2115,4189,2426,2428,2414,3505,3508,3966,3968,3971,3986,4197,4198,4201,4202,4203,4608,3295,4556,4532,4675,4486,4494,4495,4505,4230,3704,2931,4752,4755,4790,4806,4916,4961,4949,4948,4944,4946,4934,4416,4417,4418,4419,4420,4421,4422,4424,4426,1673,2608,2561,5016,2466,5746,4976,6101,2478,2467,2459,2447,6594,7057,5277,5946,5949,5950,6064,6938,6958,5962,5965,5966,5968,5971,5974,5977,5983,5987,5989,5990,5994,6001,6006,6021,6024,6140,6143,6146,6150,6157,6160,6164,6166,6175,6179,6188,6215,6225,6228,6244,6248,6257,6261,6265,6274,6278,6281,6417,6413,6410,6402,6320,6324,6327,6334,6343,6357,6361,6364,6375,6378,6381,6385,6390,6394,4427,5383,5377,8064,7597,7791,5402,5405,5406,5412,5413,5429,5430,5432,5434,5440,5442,5461,5462,5465,5468,8179,8206,8210,8226,8227,8235,8297,8319,8344,8347,8390,8452,8466,8472,8484,8504,8518,7330,7685,7705,7706,7376,7732,7735,8047,8048,8049,8061,8535,8631,7937,7942,7953,7952,7951,7946,7518,79,10183,5941,5942]'),(1082,1014,129,381,2,'Action/Thriller','[1074,158,1145,243,1075,1101,1102,1103,1104,290,296,304,309,314,513,327,1727,1829,1840,1824,392,393,397,405,1143,1153,1167,1188,34,1345,472,769,11,1304,2043,362,255,263,262,260,1124,2209,2264,2409,2662,2664,2666,2673,2676,2685,2691,2692,2688,2696,2703,2704,2719,2718,2717,2715,2714,2713,2707,2383,2728,2725,2618,2635,2644,2530,2540,2546,2557,2586,2591,2595,2602,2606,2607,2625,2626,2628,2637,2552,2553,2560,2562,2528,2588,2592,2627,2532,2548,2587,2594,2599,2605,2614,2629,2584,2729,3239,3308,3033,638,3567,3290,3299,3305,3347,3348,3349,2111,2112,2113,2114,2115,3638,3855,2414,3966,3971,3977,3986,4197,4198,4199,4201,4202,4203,3295,3296,4633,4638,4494,4505,5060,4230,4209,3086,2931,4773,4795,4809,4821,4873,4909,5007,4978,4961,4966,4968,4972,4973,4949,4948,4944,4946,4937,4936,4934,4416,4417,4419,4420,4421,4422,4423,4424,4425,4426,2561,303,334,2424,2465,5016,5683,5668,5488,5746,4975,4976,1100,2441,2437,2478,2439,2434,6825,7068,4733,4718,5943,5944,5945,5946,5947,5948,5949,5950,6064,6065,6066,6536,6544,6870,6958,5951,5955,5962,5965,5966,5968,5971,5974,5977,5983,5989,5990,5994,5998,6001,6009,6017,6021,6024,6028,6140,6146,6150,6157,6160,6166,6179,6188,6191,6193,6220,6224,6225,6228,6257,6261,6265,6268,6274,6281,6285,6288,6290,6304,6310,6413,6410,6402,6327,6330,6334,6343,6353,6361,6364,6375,6378,6381,6385,6390,6394,2641,5383,5377,7791,7792,7793,7794,7796,5400,5402,5405,5406,5407,5409,5413,5429,5430,5432,5434,5440,5442,5444,5461,5466,8179,8182,8186,8206,8224,8226,8235,8297,8319,8344,8389,8390,8391,8403,8404,8405,8407,8410,8452,8459,8466,8472,8504,7325,7324,7329,7330,8113,8117,8648,8651,7705,7708,7366,7371,7373,7381,7732,7733,7735,7737,7741,8047,8048,8049,8061,8535,7824,7865,8629,8631,8614,7937,7940,7942,7952,7951,7946,79,9558,9563,9568,9691,9870,9875,9977,9979,9980,9982,9983,9992,9993,10034,10073,10170,10215,10227,10252,10299,10309,10348,10349,10376,10385,5438,5941,5942,10524]'),(1083,1089,129,2,2,'Political','[4447,10031]'),(1084,1078,129,95,2,'Action','[317,318,511,332,728,1666,2165,2220,2405,2698,2716,2712,2709,2708,2581,2578,2536,2539,2812,3324,2259,2223,3565,3302,2101,3658,3508,3275,4627,4443,4532,4951,4952,4953,4954,4979,4980,4992,4994,4995,4457,4463,4471,4486,4418,5710,6528,6552,6949,6938,5328,7224,7302,7476,7641,7652,5396,5412,5414,8185,8208,8282,8110,8056,8986,8987,9008,3954,4010,9978,10053,10159,10255,10310,10369,8528,5942,10472,10539,10559,10577,10587,10614,10669,10729,10746,10760,10766,10773,10774,10844,10846,10852,10856,10889]'),(1085,1022,129,195,2,'Fantasy','[1181,1558,993,298,503,509,339,340,330,1724,1829,1833,1824,403,399,1187,1189,1148,1165,1174,34,1352,469,475,646,655,671,684,690,721,728,812,816,977,917,918,930,934,966,972,967,956,910,982,792,906,749,740,1306,1739,1284,1844,1689,274,276,1110,2185,1117,1120,2404,2406,2375,2389,2612,3160,3169,3316,3317,3318,3320,3321,3539,3606,3589,3583,3566,2109,3638,3650,2412,2463,2481,3969,3990,4642,4643,4506,5011,5014,4962,4935,4928,5492,6068,2486,4692,4711,4736,5266,5282,5283,5285,5286,5287,5288,5269,4713,4719,4720,5264,4730,4738,4729,5273,5276,5275,4721,4723,5263,4699,4690,4688,6445,6528,6710,8071,8069,5458,8184,8182,8190,8209,8232,8244,8245,8321,8328,8360,8406,8455,8458,8473,7326,7318,7328,8865,8655,8657,7684,7687,7693,7699,7704,7709,7711,7372,8610,8618,8619,8620,8621,8624,8625,8626,8628,8830,8831,8832,8834,8843,8846,8847,8849,8850,7939,8875,7351,7353,79,10266,10272,10293,10295,10314,10316,10318,10321,10338,10342,10361,10363,10373,10389,10399,10584]'),(1086,1040,129,0,2,'Teaser',NULL),(1087,1054,129,35,2,'Europe','[1146,311,1710,1841,1340,559,585,1428,2219,2221,2231,2239,2130,2133,2149,2162,3568,3452,4536,4470,5899,6562,6563,6564,6565,6566,6568,4740,4737,4728,4709,4703,5674,6453,7214]'),(1088,1179,129,4,2,'Overture/Introduction','[3566,4533,8961,4280]'),(1089,1042,129,200,2,'Thriller/Horror','[1176,1182,296,309,320,338,339,329,337,1721,1823,1825,1826,1843,1839,1838,380,383,384,385,386,387,390,391,395,1185,1190,1184,56,1799,759,958,904,770,758,750,727,1302,1305,561,1204,1847,1849,2047,2051,1651,2038,2023,2174,2029,1111,2398,2647,2655,2621,2567,2563,2555,2729,3145,3029,3634,2482,2474,3967,3968,3973,3984,3997,4415,4755,4790,4806,4821,5008,5013,4932,4424,2419,2424,2429,2444,2450,2435,2456,2457,2460,2461,2452,2466,5684,5683,2459,2423,5268,5267,4739,4735,4734,4712,4691,4684,5945,6065,5645,5960,5981,5987,5988,5994,6002,6009,6013,6016,6028,6033,6036,6143,6164,6171,6175,6183,6191,6195,6198,6208,6216,6231,6234,6240,6244,6278,6295,6307,6417,6401,6320,6324,6353,7619,5432,5443,5462,8210,8308,8347,8395,7325,7320,7324,8650,7680,7681,7683,7685,7692,7701,7703,7704,7707,7715,7716,7720,7741,8059,8060,8617,7953,7949,7526,7730,8136,5786,5789,4115,9355,9557,9564,9986,9991,10189,10209,10228,10229,10242,10253,10264,10265,10268,10276,10302,10310,10322,10331,10348,10349,10359,10378,10385,10878]'),(1090,1135,129,164,2,'Mystery','[572,1658,1705,1671,255,2713,2712,2654,2618,2621,2635,2556,2555,3145,2203,3312,3036,1676,3534,3614,3587,3577,3563,3290,3299,3303,3306,3638,2410,2426,2428,3505,3968,3976,4386,4556,1681,4478,4415,5060,2931,4756,4763,4781,4855,4916,5013,4978,4961,4966,4967,4968,4972,4949,4948,4936,4935,4934,4682,4418,4419,4420,4423,334,2444,2456,2465,2425,2475,2477,2483,5659,5734,4749,2485,6518,5649,6870,6231,961,6234,6248,6252,6261,6304,6307,6310,6417,6401,6397,6350,6357,6367,5049,8064,7597,7619,7791,7792,7807,5402,5405,5407,5423,5442,5462,8206,8227,8308,8344,8347,8375,8390,8395,8410,8451,8466,8484,7750,7330,7724,8648,7685,7705,7706,7715,7716,7721,7390,7392,7733,7737,7739,8051,8061,7865,8631,8645,8625,8833,8848,8849,8854,7953,7518,8867,9364,9481,10032,10042,10158,10168,10172,10177,10187,10214,10218,10228,10254,10344,10345,10359,10363,10370]'),(1091,1151,129,27,2,'Cinematic Logos','[1661,4533,4467,5640,5399,5437,8213,8229,8350,8476,8477,8539,8541,8546,8555,8562,8564,8567,8573,8581,8586,8591,8593,8595,9390,9394,9445]'),(1092,1043,129,8,2,'Thriller/Horror','[1183,304,2704,2447,6006,7319,7735,8632]'),(1093,1189,129,25,2,'Teen Movies','[4955,5544,5546,5549,5562,5565,5569,5591,5579,5587,7803,7801,7800,8093,8096,8097,8098,8100,8102,8104,8871,10011,10022,10104,10895]'),(1094,753,130,12,2,'Exotic','[3864,4545,4544,5699,6718,6735,6736,7667,10058,10279,10350,10394]'),(1095,752,130,132,2,'Cocktail / Lounge / Easy Listening','[1420,1150,416,293,1831,1827,1161,1166,1635,1634,1632,1636,1338,1341,723,975,1624,616,356,2084,2081,1690,1662,1664,1704,1654,2208,2191,2233,2159,2195,2246,2249,2234,2338,2377,2385,2720,2537,2575,2603,2596,2631,2570,3155,2379,1676,3621,3550,3646,3356,3987,4200,4386,4545,4529,4524,4670,4394,4462,4474,4482,4496,3223,2949,4834,4905,5771,5548,6122,2458,6502,6803,6583,5633,6718,6735,7199,7190,7162,5314,5050,4352,5362,5388,5369,7754,7802,5424,5426,8076,8088,7815,7880,7890,7897,8647,7962,8613,8622,8831,8835,8837,8838,8839,8841,8842,8844,8845,8850,8851,8852,8853,7340,7349,4168,10009,10011,10012,10016,10023,10027,10038,10041,10042,10043,10044,10057,10206,10366,10676,10808]'),(1096,754,130,93,2,'Factual Entertainment / Reality','[502,506,515,355,1163,1159,1635,1634,1338,1339,1342,1606,1608,1624,593,1666,1686,1709,1706,2017,2194,2258,2132,2158,2148,2246,2249,2356,2652,2705,2710,2391,2604,2630,2542,2549,2581,2545,2554,2568,2601,2643,2582,2745,3155,3293,3346,4187,4528,4481,2640,2689,5594,5602,5879,6458,6466,6472,6496,6499,5251,7190,4411,4435,7789,7808,5410,5414,5415,5419,508,8250,8264,8268,8287,8293,8324,8393,8413,8442,8481,7694,7369,7371,7384,7385,7386,7387,7871,10009,10169,10512,10712]'),(1097,751,130,26,2,'Background','[994,123,1149,1158,521,1166,456,1286,1697,2256,2124,2145,2724,2537,2254,3745,4634,2476,2472,2449,6768,8376,9428,10025,10026,10031]'),(1098,755,130,147,2,'Holiday / Vacation','[994,1420,259,413,308,1831,1166,1634,1632,1631,896,897,898,1596,1624,591,593,602,614,615,616,620,2078,2190,2208,2191,2232,2241,2255,2257,2258,2127,2130,2136,2138,2166,2298,2686,2596,2570,2821,2739,3072,3052,3313,3328,3329,3535,3542,3595,3576,3570,3550,3301,3337,3339,4190,4194,3356,3528,3978,3987,4546,4545,4544,4534,4670,4392,4475,4482,4488,4496,4501,4509,4514,3223,3187,3095,4905,3340,5602,5636,5675,5699,5137,5181,5856,5866,6465,6462,6461,6458,6486,6496,6501,6502,6503,6505,6506,6583,5633,6718,6735,6736,7199,7162,5050,5388,7574,7630,8250,8267,8268,8346,8393,8419,8437,8442,7385,8105,7815,7851,7897,8852,10009,10010,10013,10038,10051,10055,10212,10286,10355,10366,10375,10437,10447,10483,10513,10514,10607,10618,10636,10658,10662,10727,10862]'),(1099,757,130,11,2,'Lifestyle','[1699,1704,283,1884,4914,1155,8396,10039,10429,10726,10787]'),(1100,756,130,175,2,'Late Night','[108,1558,1160,1635,723,2093,2084,2081,1697,1662,1664,1704,1670,1654,281,280,2035,2247,2237,2233,2141,2161,2195,2164,2144,2145,2146,2668,2683,2393,2537,2541,2550,2622,2609,2577,2582,2533,2534,2615,2616,2636,2566,2572,2585,2613,2856,3265,3125,3130,3164,2254,3331,3342,3621,3598,3587,3294,3344,2106,3646,3654,4190,3745,4200,4386,4555,4636,4394,4454,4462,4474,3717,4752,4834,4866,4916,4941,4937,2689,2464,2436,5866,6084,2467,2458,6789,6583,6435,5839,5658,6970,5314,5308,4411,4297,5362,5388,5369,5367,7754,7784,7802,7666,5426,5428,5433,5435,5441,5448,5450,5451,5452,5457,5473,5476,5477,8076,8088,8652,8654,7682,7721,7673,7365,7366,7369,7371,7373,7376,7377,7378,7380,7381,7383,7384,7385,7386,7387,7388,7390,7392,7815,7868,7880,7890,8646,8668,8613,8622,8625,8830,8831,8835,8837,8838,8839,8841,8842,8844,8845,8850,8851,8852,8853,7731,7340,4171,9377,10011,10015,10054,10058,10282,5404]'),(1101,758,130,52,2,'Sexy','[2035,2026,2226,2237,2164,2338,2543,2590,2569,2589,2609,2534,2598,2615,2631,2636,2639,2566,2572,2585,3130,3309,3621,3611,3551,4189,4200,4540,4636,4394,3717,2640,5548,6122,5839,6970,5578,7754,7669,5428,5435,5436,5452,8248,8249,8431,7388,7881,8830,8835,7731,10041]'),(1102,1162,130,9,2,'Vintage','[3618,3615,4524,4488,3174,6092,4436,7798,7880]'),(1103,830,131,0,2,'Aftermath',NULL),(1104,759,130,223,2,'Travel','[1420,275,507,389,1154,462,473,474,487,494,559,1253,1596,591,616,620,1106,1108,2189,2240,2205,2210,2208,2219,2221,2231,2125,2127,2130,2133,2135,2134,2195,2149,2235,2144,2145,2146,2199,2200,2220,2230,2156,2262,2658,2576,2570,2861,3155,3619,3608,3605,3556,3554,3551,3346,2099,3642,3662,4194,3864,3356,3452,3458,3488,3501,3509,3970,3983,3987,2526,4448,4446,4447,4550,4546,4540,4527,4637,4676,4673,4677,4672,4392,4397,1639,4484,4488,4509,4517,4519,3095,2913,2886,4837,4905,1155,2418,2420,2421,2432,2483,2436,2472,5594,5598,5602,5622,5636,5659,5666,5489,5491,5492,5493,5494,5495,5496,5771,5699,5585,5856,5888,6112,2417,2471,2442,6465,6462,6473,6503,6561,6562,6563,6564,6566,4740,4716,4715,4709,5674,5663,6727,7162,5578,5922,590,4377,4352,4297,3803,5394,5391,5367,8072,7757,7444,7487,7432,8267,8279,8305,8312,8334,8358,8393,8419,8435,8437,8442,8497,8499,8508,8513,8520,8856,7822,7851,7871,7872,7897,7906,8840,10052,10057,10156,10162,10173,10206,10212,10213,10221,10260,10301,10327,10350,10355,10366,10377,10394,10429,10437,10444,10447,10454,10459,10466,10467,10508,10513,10575,10585,10635,10636,10658,10676,10696,10703,10717,10798,10838,10870,10895]'),(1105,760,130,56,2,'Vintage Travel','[308,1642,1632,1631,1219,1220,1268,1622,615,1428,2224,2240,2215,2227,2232,2241,2225,2124,2137,2138,2140,2142,2166,2162,2234,2242,2169,2318,2603,2857,3235,3620,3561,3978,4546,4542,4534,4524,4634,4639,4475,4509,4221,3095,3076,5666,5899,6479,6780,6768,4377,4352,10013,10017,10174,10301]'),(1106,832,131,0,2,'Ancient',NULL),(1107,831,131,0,2,'American Civil War',NULL),(1108,833,131,0,2,'Bagpipe Band',NULL),(1109,834,131,0,2,'Bugle Calls',NULL),(1110,836,131,0,2,'Fife & Drums',NULL),(1111,835,131,0,2,'Cold War',NULL),(1112,838,131,0,2,'Marching Band',NULL),(1113,840,131,0,2,'Military Fanfares',NULL),(1114,841,131,0,2,'Military General',NULL),(1115,837,131,0,2,'Historical',NULL),(1116,842,131,0,2,'Military Percussion',NULL),(1117,843,131,0,2,'Modern Warfare',NULL),(1118,839,131,0,2,'Military Band',NULL),(1119,844,131,0,2,'Naval',NULL),(1120,845,131,0,2,'Salvation Army',NULL),(1121,846,131,0,2,'World War 1',NULL),(1122,847,131,0,2,'World War 2',NULL),(1123,925,132,0,2,'Effects',NULL),(1124,922,132,0,2,'Clocks / Time',NULL),(1125,923,132,0,2,'Comedy',NULL),(1126,924,132,4,2,'Drones / Tones','[1206,1207,1208,10253]'),(1127,926,132,0,2,'Electronic',NULL),(1128,928,132,0,2,'General Musical Effects',NULL),(1129,927,132,1,2,'Fills','[1178]'),(1130,929,132,0,2,'Gramophone / Vintage Recordings',NULL),(1131,930,132,0,2,'Heart Beat',NULL),(1132,931,132,0,2,'Loops',NULL),(1133,932,132,1,2,'Mobile Phone Ring Tones','[8549]'),(1134,933,132,1,2,'Orchestral Effects & Tuning up','[1177]'),(1135,934,132,0,2,'Party Next Door',NULL),(1136,936,132,0,2,'Personal Stereo',NULL),(1137,935,132,0,2,'Percussion Effects',NULL),(1138,937,132,0,2,'Piano Scales',NULL),(1139,940,132,2,2,'Rhythms / Percussion','[2205,2210]'),(1140,938,132,0,2,'Pizzicato Strings',NULL),(1141,939,132,0,2,'Reverse / Backwards effects',NULL),(1142,942,132,0,2,'Swannee Whistle',NULL),(1143,941,132,0,2,'Rises / Swooshes / Hits',NULL),(1144,943,132,1,2,'Swells / Bumpers','[621]'),(1145,944,132,0,2,'Telephones / Electronic / Digital',NULL),(1146,945,132,5,2,'Textures / Light Drones','[1215,1226,1274,613,4717]'),(1147,946,132,0,2,'Trains',NULL),(1148,947,132,0,2,'Vocal effects',NULL),(1149,948,132,0,2,'Water',NULL),(1150,949,132,0,2,'Whales',NULL),(1151,1047,132,1,2,'Guitar','[1205]'),(1152,950,132,0,2,'Wind / Cold',NULL),(1153,761,133,3,2,'Business News','[10162,10207,10236]'),(1154,1086,132,1,2,'Alien war horn','[523]'),(1155,1132,132,0,2,'Claps',NULL),(1156,762,133,16,2,'Hard News','[1727,1828,396,1137,1143,1153,2131,2209,2587,2624,4460,8415,7379,9058,9060,10170]'),(1157,763,133,20,2,'Investigation','[1839,1838,947,1684,2624,2629,4494,4495,5734,2485,2478,2439,2434,7057,5277,7790,8317,8112,7379,10035]'),(1158,764,133,13,2,'Light News','[477,947,1216,1105,2207,4460,4502,6814,6570,8583,8530,7835,10017]'),(1159,768,133,6,2,'Weather Forecast','[1105,8204,8536,10178,10180,10207]'),(1160,767,133,1,2,'Vintage','[4502]'),(1161,765,133,22,2,'Logos / Stings','[523,346,8415,8536,8537,8538,8540,8543,8544,8546,8547,8549,8553,8560,8565,8566,8568,8574,8579,8587,8590,8594]'),(1162,766,133,1,2,'Traffic Bulletin','[10169]'),(1163,848,134,6,2,'Awards / Fanfares','[4547,4537,4461,8240,8460,10466]'),(1164,850,134,34,2,'Daytime TV','[1147,456,1600,2318,2549,2558,4579,4584,4538,4493,4498,4511,4520,2034,5598,6459,6472,6496,6500,6505,6506,7795,8205,8211,8231,8264,8270,8334,8346,8358,8417,8481,10613,10862]'),(1165,849,134,8,2,'Circus','[610,617,619,1656,2217,2150,2151,3568]'),(1166,851,134,61,2,'Fashion','[507,1163,1164,1147,1339,1675,1309,1884,2702,2619,516,3293,4184,4529,4480,4520,4841,4893,2689,2034,6459,5251,6435,7216,5350,5337,5326,4435,4429,7789,7808,5406,5419,5421,508,8202,8248,8249,8270,8652,7691,7365,7376,7377,7381,7383,7384,7387,10016,10018,10039,10043,10206,10282,5404,10429,10437,10512,10613,10726,10808]'),(1167,852,134,17,2,'Funfair','[610,617,619,2240,2221,2225,2231,2239,2238,2125,2133,2135,2156,5629,6560,8240,7864]'),(1168,853,134,37,2,'Glamour','[502,506,507,518,355,1164,2227,2123,2634,3615,3608,3293,4538,4537,4529,4474,4480,4482,4520,6459,6502,6970,7216,5050,7789,7666,7669,5397,8177,8270,8431,8652,7365,7369,7386,7340,7349]'),(1169,854,134,27,2,'Light Entertainment','[494,1602,1106,2132,3608,4538,4511,4914,5369,7766,7795,7669,5450,5451,8277,8293,8417,7380,7349,10012,10018,10454,10613,10635,10727,10820,10830]'),(1170,855,134,23,2,'Links / Stings','[8177,8267,8269,8276,8291,8320,8323,8340,8396,8480,8554,8557,8577,8578,8605,8607,9414,9423,9425,9450,9475,9491,9505]'),(1171,857,134,6,2,'Quiz / Game Shows','[1696,2201,2204,7766,8293,10178]'),(1172,858,134,50,2,'Showbiz / Stage Tunes','[1163,1339,1342,451,456,462,473,494,1600,1602,1675,2683,2694,2710,2543,2549,2581,2601,2745,3346,4187,4841,2473,5598,6499,6435,5350,5326,7808,5415,5418,5419,5420,5421,8173,8202,8240,8250,8264,8268,8287,8324,8363,7691,7366,7962,10015,10034,10053,5404]'),(1173,856,134,0,2,'Play On / Play Off',NULL),(1174,860,134,33,2,'Striptease / Sleaze / Porn','[1831,2226,2237,2164,2338,2590,2598,2636,2639,3309,4636,3717,2949,4834,2640,6122,5839,5578,7784,5426,5428,5435,5448,5451,5452,8429,7721,7673,7388,7881,8622,10010,428]'),(1175,951,135,0,2,'Barmitzvahs',NULL),(1176,859,134,3,2,'Sit Com','[411,450,10126]'),(1177,953,135,30,2,'Christmas','[335,1196,471,917,937,1295,1598,1663,1656,1657,2657,2633,2597,2583,3562,2109,3396,3462,4518,5017,6494,4711,4726,7097,5020,7845,7885,7926,7956,7353]'),(1178,952,135,0,2,'Birthdays',NULL),(1179,954,135,10,2,'Funerals','[1821,2178,3311,4414,4678,5581,4724,8832,7522,571]'),(1180,956,135,5,2,'Hymns / Sacred Music / Religious','[2178,2401,4668,4455,5017]'),(1181,955,135,3,2,'Halloween','[727,3435,6518]'),(1182,957,135,0,2,'New Year',NULL),(1183,958,135,7,2,'Other Special Occasions','[1340,2181,2194,2197,4676,10041,10586]'),(1184,769,136,70,2,'Action','[409,856,1607,2659,2672,2696,2698,2708,2551,2620,2547,2535,2539,2772,3319,3324,3599,3593,3592,3590,3578,3559,3556,3630,3477,3524,4618,4951,4453,4457,4464,4508,4516,5094,4204,3670,2904,4781,5594,5710,2422,6605,6998,7027,5350,4435,4432,4430,4429,4428,7224,7246,7302,7421,7476,7487,7586,7641,7652,7810,8081,8324,8338,8358,8363,8485,7893,8633,10614,10760]'),(1185,959,135,3,2,'Thanksgiving','[4455,5017,6719]'),(1186,960,135,7,2,'Weddings','[2187,4446,8503,8647,10447,10607,10812]'),(1187,770,136,31,2,'Beds / Underscore','[560,2660,2858,3313,3541,3610,4185,4527,4514,4516,2913,2886,4893,5109,5150,5170,5196,5888,6132,2417,6458,6466,6499,5337,8351,8387,8481,8485,8056,8633,8671]'),(1188,1149,135,9,2,'Carnival','[593,602,4544,4481,3187,2420,2421,2261,10466]'),(1189,771,136,0,2,'Equestrian Events',NULL),(1190,773,136,0,2,'Fanfares',NULL),(1191,775,136,23,2,'Leisure / Recreation','[275,2148,2674,2542,3580,3524,4527,5072,4242,6465,6461,6835,5337,5326,3803,5389,7270,7668,5455,8277,8508,8513,10500]'),(1192,779,136,2,2,'Tension','[3630,4471]'),(1193,772,136,68,2,'Extreme Sports','[1101,305,515,519,1711,1342,477,866,1607,1666,2017,2165,2716,2619,2630,2578,3593,3590,3559,3557,3302,3630,3658,3477,4979,4463,5094,4204,3670,2904,4841,4858,303,5757,5196,5571,2422,2437,6605,7027,5319,7246,7302,7498,7487,7586,7652,7810,5412,8338,8363,8110,8056,7818,7893,10282,10347,10362,8528,10418,10500,10539,10587,10668,10669,10729,10737,10760]'),(1194,774,136,5,2,'Football / Sports Chants','[2721,4618,6466,8181,8433]'),(1195,781,136,2,2,'Vintage','[6673,4428]'),(1196,861,137,72,2,'Children\'s TV','[249,470,1288,1663,2190,2670,2600,2642,2583,3052,3539,3564,3553,3298,3368,3375,3377,3385,3386,3402,3403,3404,3405,3406,3408,3420,3426,3857,3463,3519,3529,4594,4551,4543,4523,4468,2440,5687,5212,6484,6489,6494,5106,5796,5797,6723,7773,7554,7799,8284,8288,8296,8506,8511,7698,7861,7955,5341,5107,5108,9362,9368,9482,9554,9565,10129,10130,10147,10148,10483,10644,10718]'),(1197,863,137,139,2,'Daytime TV','[470,1219,1703,1688,1706,1108,2036,1886,2250,2243,2256,2286,2558,2841,2739,3071,3251,3235,3328,3536,3537,3545,3605,3597,3586,3573,3569,3554,3301,3642,3662,3666,3458,3473,3483,3501,3970,3992,4574,4579,4603,4644,4542,4397,4995,4456,4464,4479,4485,4497,4519,4242,3104,3076,2949,4914,1700,3340,2432,2479,5543,5564,5109,5170,5181,5585,3746,6112,2417,6457,6460,6469,6471,6478,6480,6483,6487,6835,6814,6780,6768,5259,6427,6429,6431,6432,7047,7191,7148,5922,4377,3803,5389,5382,5373,7259,7467,7554,7795,7806,8196,8205,8218,8230,8231,8305,8425,7751,7753,7717,9018,9025,9029,8662,8661,5302,3812,9380,9507,9532,9575,9693,9699,9704,9707,9734,9741,10013,10128,10129,10375,10444,10644,10652,10712,10808,10820,10830,10868]'),(1198,777,136,35,2,'Prestige / Achievement','[1168,408,1151,1148,643,874,2396,2400,2711,2722,2559,2611,2829,3310,4618,4547,4539,6076,6468,6493,6701,8079,8085,8167,8181,8190,8192,8418,8433,8485,8520,7331,8114,7877,7943]'),(1199,776,136,8,2,'Links / Stings','[6433,8269,8276,8291,8340,8345,8396,8580]'),(1200,862,137,14,2,'Comedy','[418,2653,2832,2825,3291,4543,5028,7762,8425,5057,9343,9482,10046,10049]'),(1201,778,136,3,2,'Slow Motion','[655,5722,6101]'),(1202,780,136,23,2,'TV Themes','[1630,888,891,2812,3251,3578,3557,3446,4627,4548,4453,4508,2904,6480,6434,7444,8165,8166,8346,7334,8637,7961,10551]'),(1203,864,137,24,2,'Documentary','[1839,2024,2396,2732,3315,3589,3572,3858,4448,4447,2886,2454,2416,5691,6504,5365,7778,5397,5459,5474,7318,7684,9748,10184]'),(1204,865,137,69,2,'Drama','[310,347,1167,650,706,715,722,726,739,822,834,931,938,926,905,794,1679,1678,270,2016,1116,2580,2623,2760,3037,3073,3246,3028,3562,3470,3979,3980,3280,4449,4531,4530,4991,2487,2451,5611,5567,6485,4687,6859,6041,3245,5372,5385,8070,8195,8238,8266,8283,8299,8300,8304,8309,2143,8369,8384,8385,8497,8512,7743,7746,7327,8103,7509,9312]'),(1205,866,137,27,2,'Factual Entertainment','[891,1604,1703,1688,2201,2356,2710,2601,3034,3536,3537,3602,3597,3592,3580,3573,3569,3666,4893,2034,6132,6472,6430,8312,8334,7698,10425]'),(1206,868,137,2,2,'Military','[3239,5652]'),(1207,869,137,29,2,'News & Current Affairs','[1216,1653,1105,2024,2131,2209,2207,2711,2858,3610,4598,4603,4539,4460,4502,5746,5879,6570,7421,7444,5397,8204,8231,7379,10163,10180,10236,10288,10309]'),(1208,867,137,0,2,'Historical',NULL),(1209,870,137,91,2,'Night Screen','[1827,1159,1341,723,356,2084,1670,2026,2247,2226,2246,2274,2718,2550,2591,3125,3294,4454,4462,4752,3609,2469,6803,6789,5251,3030,5314,5308,7784,7802,7666,8429,8431,8654,9020,8973,2126,5937,5787,4317,4322,3815,4022,4023,4074,4082,4083,4114,4167,9156,9322,9341,9351,9352,9378,9381,9308,9415,9441,9462,9471,9710,9713,9776,9779,9782,9786,9789,9792,9809,9813,9832,9833,9834,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9849,9852,9941,9946,9996,428]'),(1210,871,137,0,2,'Police',NULL),(1211,872,137,12,2,'Promos','[1287,1698,3053,3032,3031,3541,3619,3572,4640,3609,6463,8234]'),(1212,874,137,139,2,'Sit Com','[450,567,568,582,583,1286,1604,1610,1618,606,612,1649,2147,2163,2191,2274,2286,2677,2694,3042,3242,2863,2864,2867,2868,2870,3586,3582,3569,3560,3554,3332,3334,3337,3339,2103,3473,3970,550,4612,4558,4552,4550,4543,4541,4535,4634,4639,4952,4953,4954,4955,4957,4980,4989,4996,4485,4491,4517,5544,5546,5550,5553,5555,5560,5562,5565,5566,5569,5572,5573,3746,5844,6475,6648,6427,6428,6429,6430,6431,6432,6433,6426,6434,8370,8411,8423,8550,7742,7744,7395,7397,8092,8093,8096,7959,9018,9020,9023,9024,9025,9029,9032,9035,9041,9407,9457,9458,9697,9712,9716,9724,9726,9730,9731,9736,9737,9738,9740,9752,9754,9757,9760,9966,9967,9968,9969,9970,9971,9972,9973,9974,10000,10001,10134,10135,10142,10149,10286]'),(1213,875,137,55,2,'Sport','[2165,2547,2535,2841,3034,3593,3592,3578,3559,3658,4185,3446,3477,4547,4539,4453,4493,4514,4516,5094,5722,5757,5710,5150,5571,6076,2422,6468,6570,6998,7027,6429,6430,6426,6434,7224,7246,7498,7586,7641,7810,8081,8166,8181,8221,8277,8345,7818,7893,8633,10050,10051,10053,10056,10159]'),(1214,873,137,34,2,'Quiz / Gameshows','[355,1840,1296,1703,1688,1309,2147,2256,2123,2132,2158,2204,2245,2286,2318,2545,2782,2812,3034,3536,3597,3573,3345,3666,4549,4511,3682,3104,2367,8258,8460,9798,9801,10211]'),(1215,877,137,50,2,'Youth','[2531,2551,3319,3599,3557,3302,2094,2099,573,4552,4548,4982,4984,4985,4986,4987,4988,4498,4858,2473,5572,6506,6428,6441,5414,5415,5421,5445,5448,8187,8202,8211,8221,8320,8323,8338,8413,8417,8437,8444,8547,8550,8859,7334,7691,7700,7383,8097,10054,8528]'),(1216,876,137,8,2,'Talk Show','[2194,2147,4549,4493,3609,8429,8557,10251]'),(1217,1066,137,11,2,'Soap Opera','[2068,1679,2169,3601,4840,6453,8180,8188,8212,8385,9036]'),(1218,1098,137,8,2,'Reality Shows','[9796,9797,9799,9800,9803,9804,9805,9815]'),(1219,1192,137,17,2,'Vintage','[4465,4476,4480,4483,4485,4489,4498,3682,3174,3104,6092,4431,7804,8460,7335,10212,5456]'),(1220,1099,137,2,2,'Reality Shows','[1840,9806]'),(1221,1119,137,32,2,'Links/Stings','[6433,7216,8269,8276,8318,8320,8340,8345,8415,8480,8491,8511,8538,8541,8544,8553,8554,8560,8565,8568,8573,8574,8576,8577,8578,8579,8583,8590,8594,8605,8606,8607]'),(1222,961,138,0,2,'Activity',NULL),(1223,1000,999,0,2,'gagga',NULL),(1224,966,138,0,2,'Insect',NULL),(1225,1038,1036,12,2,'Commercial','[108,1168,289,307,347,376,9505,10724,10812,10846,10852,10879]'),(1226,1039,1036,2,2,'Advertising','[994,1022]'),(1227,962,138,0,2,'Chase',NULL),(1228,965,138,0,2,'Flight',NULL),(1229,964,138,1,2,'Drama / Dramatic','[10080]'),(1230,1041,1036,9,2,'teaser/intro','[504,354,353,352,351,349,346,1828,288]'),(1231,963,138,0,2,'Documentary',NULL),(1232,967,138,0,2,'Slow Motion ',NULL),(1233,1037,1036,0,2,'Sports',NULL),(1234,1051,1036,3,2,'Videos','[294,1719,478]'),(1235,1074,1045,27,2,'Fantasy','[298,320,509,340,1712,1718,1735,1830,1833,595,816,918,943,910,749,1215,1271,1667,1685,1694,3160,3169,3555,2413,8273,8274,10181]'),(1236,1073,1045,22,2,'Action/Adventure','[295,314,321,501,514,1301,1606,1707,1653,2408,2707,2223,4199,8208,8504,7944,10766,10774,10787,10794,10856,10895]'),(1237,1072,1045,80,2,'Action/Thriller','[290,304,309,320,1721,1843,970,1235,1238,1849,2043,2093,262,2347,2704,2715,2644,2540,2557,2531,2595,2606,2607,2625,2637,2562,2528,2599,2614,3135,2872,3305,3347,3348,3349,4201,4202,4203,4773,4790,4809,4873,4909,4937,2608,303,2429,2444,4733,5943,5944,5946,5947,5948,5950,6065,6066,5951,5955,5960,5965,5981,5983,6013,6017,6166,6215,6288,6290,6343,5383,5461,8179,8308,8389,8391,8472,7720,10175,10844]'),(1238,1090,1045,75,2,'Horror','[338,329,337,1823,380,383,384,385,386,1190,904,750,727,1302,1305,2047,2051,1651,2038,2023,2029,2646,2647,2655,3029,2474,3967,3973,3974,3975,3977,3984,3996,3997,4755,4806,4938,2419,2424,2450,2456,2457,2468,5684,2459,2423,4739,4734,4727,5988,6009,6028,6033,6036,6143,6195,6300,6401,6324,6353,8210,8424,8558,7319,7320,8650,7692,7701,7703,7932,8615,7949,7526,10179,10878]'),(1239,1070,1045,17,2,'Trailers/Promos','[510,517,1132,1714,1726,396,1188,1199,1200,1218,1698,8165,8403,8539,8591,8593,288]'),(1240,1097,1045,9,2,'Thematic','[1834,966,1251,1253,1270,1279,1280,2078,2185]'),(1241,1125,1045,5,2,'Mystery','[479,768,910,1242,1671]'),(1242,1150,1045,8,2,'Vintage/Retro','[597,359,360,362,363,4221,361,5454]'),(1243,1207,1206,0,2,'Musical',NULL),(1244,475,49,8,2,'Rock & Roll','[2017,2286,2679,4464,2904,6486,7798,8635]'),(1245,342,36,0,2,'Belgium',NULL),(1246,508,101,61,2,'Intimate','[1281,2197,2206,2752,3068,3064,3062,3056,3054,3044,2861,2864,2866,3268,3620,3601,3588,3338,3400,3431,3444,3727,3736,3737,3982,4196,2454,2432,2449,5546,5549,5553,5555,5565,6892,7183,7172,8180,8188,8212,8218,8222,8228,8230,8251,8283,8296,8299,8304,8318,8370,8385,8477,7742,7395,7397,7712,8095,8102,8104,5501]'),(1247,379,36,0,2,'Switzerland',NULL),(1248,1127,94,34,2,'Static','[856,1275,1285,1291,1296,613,1659,1684,1707,1136,2205,2131,2650,2550,2531,2859,2858,3150,3164,2872,3344,2410,2415,2426,4201,4202,4855,6248,5402,5423,5450,5470,8518,8594]'),(1249,450,37,0,2,'Hungary',NULL),(1250,458,37,0,2,'Poland',NULL),(1251,455,37,0,2,'National Anthems General',NULL),(1252,454,37,0,2,'Mexico',NULL),(1253,452,37,0,2,'Italy',NULL),(1254,451,37,0,2,'Ireland',NULL),(1255,449,37,0,2,'Greece',NULL),(1256,453,37,0,2,'Japan',NULL),(1257,457,37,0,2,'Norway',NULL),(1258,506,101,38,2,'Ballads','[580,581,586,589,1850,1851,2181,2661,2860,3066,3060,3031,3737,566,3281,4641,4445,5012,4930,2472,5609,5610,5613,5611,5685,5671,4685,4689,4709,5658,6885,6453,7197,5922,7803,8503,7747,8098]'),(1259,183,11,43,2,'20th Century / Late Romantic','[254,311,1191,1192,1337,1335,2032,1821,3588,5611,5017,4750,1336,9359,9380,9389,9392,9393,9394,9398,9403,9404,9405,9406,9419,9440,9470,9482,9484,9500,9549,9548,9561,9692,9799,9873,9962,9963,9964,9965,9998,10003,10004]'),(1260,459,37,0,2,'Portugal',NULL); +/*!40000 ALTER TABLE `categories` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `cms_pages` +-- + +DROP TABLE IF EXISTS `cms_pages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cms_pages` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `uuid` varchar(255) DEFAULT NULL, + `active` int(11) DEFAULT 0, + `order` int(11) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `subtitle` varchar(255) DEFAULT NULL, + `icon` varchar(255) DEFAULT 'info', + `html` longtext DEFAULT NULL, + `css` longtext NOT NULL, + `deleted_at` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `cms_pages` +-- + +LOCK TABLES `cms_pages` WRITE; +/*!40000 ALTER TABLE `cms_pages` DISABLE KEYS */; +INSERT INTO `cms_pages` VALUES (1,'e17a2650-da5b-11eb-aa37-eb38129b67f6',0,NULL,'Test','Welcome','Welcome','info','','body {\n margin: 0;\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.hero-image {\n background-image: url(\"/w3images/photographer.jpg\");\n background-color: #cccccc;\n height: 500px;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n position: relative;\n}\n\n.hero-text {\n text-align: center;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: white;\n}',NULL,'2021-06-30 23:02:52','2024-01-14 21:03:44'),(2,'6b809540-ef16-11eb-b84c-413b9b4b1257',0,NULL,'Pricing',NULL,NULL,'info','','','2021-09-20 21:13:33','2021-07-27 18:08:33','2021-09-20 21:13:33'); +/*!40000 ALTER TABLE `cms_pages` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `commissions` +-- + +DROP TABLE IF EXISTS `commissions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `commissions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `partner_id` int(11) NOT NULL, + `bill_id` int(11) DEFAULT NULL, + `currency` varchar(100) DEFAULT NULL, + `rate` decimal(10,2) NOT NULL DEFAULT 0.00, + `value` decimal(10,2) NOT NULL DEFAULT 0.00, + `created_at` datetime DEFAULT current_timestamp(), + UNIQUE KEY `wallet_id_IDX` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `commissions` +-- + +LOCK TABLES `commissions` WRITE; +/*!40000 ALTER TABLE `commissions` DISABLE KEYS */; +/*!40000 ALTER TABLE `commissions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `corporate_details` +-- + +DROP TABLE IF EXISTS `corporate_details`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `corporate_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `user_id` int(10) unsigned DEFAULT NULL, + `title` varchar(100) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `address_1` varchar(255) DEFAULT NULL, + `address_2` varchar(255) DEFAULT NULL, + `city` varchar(255) DEFAULT NULL, + `zipcode` varchar(255) DEFAULT NULL, + `country` varchar(255) DEFAULT NULL, + `phone` varchar(255) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `uuid` varchar(100) DEFAULT NULL, + `email` varchar(100) DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `corporate_details` +-- + +LOCK TABLES `corporate_details` WRITE; +/*!40000 ALTER TABLE `corporate_details` DISABLE KEYS */; +/*!40000 ALTER TABLE `corporate_details` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `document_templates` +-- + +DROP TABLE IF EXISTS `document_templates`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `document_templates` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `system` int(11) DEFAULT NULL, + `uuid` varchar(255) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `text` longtext DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `document_templates` +-- + +LOCK TABLES `document_templates` WRITE; +/*!40000 ALTER TABLE `document_templates` DISABLE KEYS */; +INSERT INTO `document_templates` VALUES (1,0,'69e0b950-77b2-11e9-bc6f-5799d4e02ab8','test','

prova


##table##

','2019-05-16 08:46:14','2019-05-16 00:12:57','2019-05-16 08:46:14'),(2,1,'cc6d6ca0-77b5-11e9-bc6f-5799d4e02ab8','Cue Sheet','

Cue Sheet


##table##



',NULL,'2019-05-16 06:37:11','2019-05-16 08:37:34'); +/*!40000 ALTER TABLE `document_templates` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `downloads` +-- + +DROP TABLE IF EXISTS `downloads`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `downloads` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `user_id` int(10) unsigned DEFAULT NULL, + `track_id` int(10) unsigned DEFAULT NULL, + `type` varchar(100) DEFAULT NULL, + `suisa_registred` tinyint(1) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1218 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `downloads` +-- + +LOCK TABLES `downloads` WRITE; +/*!40000 ALTER TABLE `downloads` DISABLE KEYS */; +INSERT INTO `downloads` VALUES (1,2,5814,'wav',NULL,'2023-01-13 11:35:29',NULL),(2,2,5814,'mp3',NULL,'2023-01-13 11:35:40',NULL),(3,2,4735,'wav',NULL,'2023-01-13 11:36:49',NULL),(4,2,4735,'mp3',NULL,'2023-01-13 11:36:57',NULL),(5,2,5814,'mp3',NULL,'2023-01-13 12:00:16',NULL),(6,2,5814,'wav',NULL,'2023-01-13 12:01:55',NULL),(7,2,352,'wav',NULL,'2023-01-13 17:13:47',NULL),(8,2,4741,'mp3',NULL,'2023-01-13 18:46:38',NULL),(9,2,3410,'wav',NULL,'2023-01-13 18:46:56',NULL),(10,231,2672,'mp3',NULL,'2023-01-16 14:50:52',NULL),(11,1,4479,'wav',NULL,'2023-01-16 15:01:32',NULL),(12,231,1667,'wav',NULL,'2023-01-17 15:53:04',NULL),(13,231,4516,'wav',NULL,'2023-01-18 09:41:34',NULL),(14,231,4516,'mp3',NULL,'2023-01-18 09:41:39',NULL),(15,1,8560,'wav',NULL,'2023-01-27 16:23:13',NULL),(16,1,7946,'wav',NULL,'2023-02-02 13:35:26',NULL),(17,1,7939,'wav',NULL,'2023-02-03 13:16:41',NULL),(18,1,4727,'wav',NULL,'2023-02-03 13:26:39',NULL),(19,1,4459,'wav',NULL,'2023-02-03 13:27:15',NULL),(20,1,750,'wav',NULL,'2023-02-03 14:23:06',NULL),(21,1,4657,'wav',NULL,'2023-02-03 14:31:59',NULL),(22,1,859,'wav',NULL,'2023-02-03 14:34:28',NULL),(23,1,4657,'wav',NULL,'2023-02-03 14:36:26',NULL),(24,1,4657,'wav',NULL,'2023-02-03 14:36:38',NULL),(25,1,56,'wav',NULL,'2023-02-03 14:42:38',NULL),(26,1,693,'wav',NULL,'2023-02-03 14:49:13',NULL),(27,1,8586,'wav',NULL,'2023-02-03 14:51:35',NULL),(28,1,8586,'wav',NULL,'2023-02-03 14:53:10',NULL),(29,1,5381,'wav',NULL,'2023-02-03 15:09:47',NULL),(30,1,5422,'wav',NULL,'2023-02-03 15:44:02',NULL),(31,1,3337,'wav',NULL,'2023-02-03 15:52:26',NULL),(32,1,4945,'wav',NULL,'2023-02-03 16:13:28',NULL),(33,1,7318,'wav',NULL,'2023-02-03 16:14:08',NULL),(34,1,8484,'wav',NULL,'2023-02-03 16:17:03',NULL),(35,1,8830,'wav',NULL,'2023-02-03 16:20:49',NULL),(36,1,8830,'wav',NULL,'2023-02-03 16:23:05',NULL),(37,1,8830,'wav',NULL,'2023-02-03 16:24:54',NULL),(38,1,4556,'wav',NULL,'2023-02-03 16:28:58',NULL),(39,1,292,'wav',NULL,'2023-02-03 17:57:09',NULL),(40,1,3239,'wav',NULL,'2023-02-03 17:57:56',NULL),(41,1,4486,'wav',NULL,'2023-02-06 12:07:55',NULL),(42,1,1163,'wav',NULL,'2023-02-06 12:58:19',NULL),(43,1,6504,'wav',NULL,'2023-02-06 17:28:49',NULL),(44,235,2238,'wav',NULL,'2023-02-07 07:42:41',NULL),(45,235,6814,'wav',NULL,'2023-02-07 12:27:39',NULL),(46,236,6406,'wav',NULL,'2023-02-15 08:01:38',NULL),(47,236,7954,'wav',NULL,'2023-02-15 08:04:04',NULL),(48,236,2451,'wav',NULL,'2023-02-15 08:07:10',NULL),(49,236,5272,'wav',NULL,'2023-02-15 08:11:31',NULL),(50,236,4696,'wav',NULL,'2023-02-15 08:13:40',NULL),(51,236,4722,'wav',NULL,'2023-02-15 08:22:12',NULL),(52,236,7338,'wav',NULL,'2023-02-15 08:23:54',NULL),(53,236,812,'wav',NULL,'2023-02-15 08:25:24',NULL),(54,236,666,'wav',NULL,'2023-02-15 08:26:25',NULL),(55,236,642,'wav',NULL,'2023-02-15 08:28:02',NULL),(56,236,828,'wav',NULL,'2023-02-15 08:32:00',NULL),(57,236,595,'wav',NULL,'2023-02-15 08:33:13',NULL),(58,236,8063,'wav',NULL,'2023-02-15 08:37:02',NULL),(59,236,8368,'wav',NULL,'2023-02-15 08:39:08',NULL),(60,236,5271,'wav',NULL,'2023-02-15 08:40:10',NULL),(61,236,694,'wav',NULL,'2023-02-15 08:42:23',NULL),(62,236,2681,'wav',NULL,'2023-02-15 08:45:49',NULL),(63,236,769,'wav',NULL,'2023-02-15 19:28:24',NULL),(64,236,758,'wav',NULL,'2023-02-15 19:36:05',NULL),(65,231,4516,'wav',NULL,'2023-02-16 15:07:33',NULL),(66,236,4563,'wav',NULL,'2023-02-16 15:11:05',NULL),(67,236,8239,'wav',NULL,'2023-02-16 16:00:58',NULL),(68,1,2642,'wav',NULL,'2023-02-16 18:22:16',NULL),(69,1,1694,'wav',NULL,'2023-02-16 18:23:18',NULL),(70,1,5820,'wav',NULL,'2023-02-16 18:23:43',NULL),(71,1,5801,'wav',NULL,'2023-02-16 18:27:05',NULL),(72,1,3414,'wav',NULL,'2023-02-16 18:27:49',NULL),(73,1,7946,'wav',NULL,'2023-02-16 18:28:20',NULL),(74,1,5805,'wav',NULL,'2023-02-16 18:28:48',NULL),(75,1,5518,'wav',NULL,'2023-02-16 18:37:46',NULL),(76,1,1845,'wav',NULL,'2023-02-16 18:45:34',NULL),(77,236,2134,'wav',NULL,'2023-03-01 07:23:33',NULL),(78,236,5666,'wav',NULL,'2023-03-01 07:26:41',NULL),(79,236,2203,'wav',NULL,'2023-03-01 07:30:20',NULL),(80,236,2220,'wav',NULL,'2023-03-01 07:31:22',NULL),(81,236,2483,'wav',NULL,'2023-03-01 07:32:48',NULL),(82,236,2483,'wav',NULL,'2023-03-01 07:34:44',NULL),(83,236,2594,'wav',NULL,'2023-03-01 07:37:48',NULL),(84,236,8613,'wav',NULL,'2023-03-01 07:41:40',NULL),(85,236,646,'wav',NULL,'2023-03-01 07:46:39',NULL),(86,236,6041,'wav',NULL,'2023-03-01 20:20:46',NULL),(87,236,7904,'wav',NULL,'2023-03-01 20:29:50',NULL),(88,236,8383,'wav',NULL,'2023-03-01 20:31:24',NULL),(89,236,2431,'wav',NULL,'2023-03-01 20:40:25',NULL),(90,236,2431,'wav',NULL,'2023-03-01 20:41:11',NULL),(91,236,931,'wav',NULL,'2023-03-02 09:32:27',NULL),(92,236,4683,'wav',NULL,'2023-03-02 09:41:32',NULL),(93,236,4947,'wav',NULL,'2023-03-02 13:22:03',NULL),(94,236,7690,'wav',NULL,'2023-03-03 13:07:51',NULL),(95,236,7379,'wav',NULL,'2023-03-03 13:37:28',NULL),(96,236,7332,'wav',NULL,'2023-03-03 13:38:35',NULL),(97,236,4980,'wav',NULL,'2023-03-09 10:02:23',NULL),(98,236,2467,'wav',NULL,'2023-03-09 10:12:15',NULL),(99,236,7795,'wav',NULL,'2023-03-09 10:14:58',NULL),(100,236,55,'wav',NULL,'2023-03-09 16:07:12',NULL),(101,236,2375,'wav',NULL,'2023-03-09 16:07:39',NULL),(102,236,3470,'wav',NULL,'2023-03-09 16:08:51',NULL),(103,236,2624,'wav',NULL,'2023-03-09 16:09:21',NULL),(104,236,7216,'wav',NULL,'2023-03-09 16:09:41',NULL),(105,236,8317,'wav',NULL,'2023-03-09 16:10:02',NULL),(106,236,7746,'wav',NULL,'2023-03-09 16:10:23',NULL),(107,236,8112,'wav',NULL,'2023-03-09 16:10:52',NULL),(108,236,5734,'wav',NULL,'2023-03-09 16:11:17',NULL),(109,236,7790,'wav',NULL,'2023-03-09 16:11:36',NULL),(110,236,2247,'wav',NULL,'2023-03-09 16:11:59',NULL),(111,236,947,'wav',NULL,'2023-03-09 16:12:19',NULL),(112,236,2439,'wav',NULL,'2023-03-09 16:13:52',NULL),(113,236,1352,'wav',NULL,'2023-03-09 17:03:03',NULL),(114,236,707,'wav',NULL,'2023-03-09 17:03:36',NULL),(115,236,960,'wav',NULL,'2023-03-09 17:05:11',NULL),(116,236,275,'wav',NULL,'2023-03-10 10:42:05',NULL),(117,236,1558,'wav',NULL,'2023-03-10 10:43:50',NULL),(118,236,1735,'wav',NULL,'2023-03-10 10:45:46',NULL),(119,236,1154,'wav',NULL,'2023-03-10 10:51:06',NULL),(120,1,301,'wav',NULL,'2023-03-13 10:48:48',NULL),(121,236,6171,'wav',NULL,'2023-03-15 16:24:24',NULL),(122,236,4495,'wav',NULL,'2023-03-15 16:28:55',NULL),(123,236,7391,'wav',NULL,'2023-03-15 17:31:12',NULL),(124,236,1689,'wav',NULL,'2023-03-15 17:33:13',NULL),(125,235,8595,'wav',NULL,'2023-03-16 14:01:02',NULL),(126,288,647,'wav',NULL,'2023-03-16 14:59:48',NULL),(127,288,4699,'wav',NULL,'2023-03-16 15:01:28',NULL),(128,288,8065,'wav',NULL,'2023-03-16 15:01:50',NULL),(129,288,6300,'wav',NULL,'2023-03-16 15:36:02',NULL),(130,286,2559,'wav',NULL,'2023-03-17 07:32:30',NULL),(131,286,2626,'wav',NULL,'2023-03-17 07:33:52',NULL),(132,286,2532,'wav',NULL,'2023-03-23 14:05:53',NULL),(133,286,2532,'wav',NULL,'2023-03-23 14:07:51',NULL),(134,286,1714,'wav',NULL,'2023-03-23 14:29:37',NULL),(135,286,4687,'wav',NULL,'2023-03-23 16:11:33',NULL),(136,288,108,'wav',NULL,'2023-03-23 17:16:47',NULL),(137,288,377,'wav',NULL,'2023-03-23 17:41:09',NULL),(138,288,2859,'wav',NULL,'2023-03-23 17:57:34',NULL),(139,288,657,'wav',NULL,'2023-03-23 18:07:34',NULL),(140,286,4834,'wav',NULL,'2023-03-29 09:20:42',NULL),(141,286,2574,'wav',NULL,'2023-03-29 09:22:51',NULL),(142,286,853,'wav',NULL,'2023-03-29 09:28:28',NULL),(143,286,4536,'wav',NULL,'2023-03-29 09:38:23',NULL),(144,286,4352,'wav',NULL,'2023-03-29 13:18:32',NULL),(145,236,7036,'wav',NULL,'2023-03-29 16:09:50',NULL),(146,286,6803,'wav',NULL,'2023-03-29 19:03:14',NULL),(147,286,5671,'wav',NULL,'2023-03-30 08:06:49',NULL),(148,286,4450,'wav',NULL,'2023-03-30 08:20:07',NULL),(149,288,3316,'wav',NULL,'2023-03-30 15:59:00',NULL),(150,288,7281,'wav',NULL,'2023-03-30 16:00:17',NULL),(151,288,537,'wav',NULL,'2023-03-30 16:03:48',NULL),(152,231,898,'wav',NULL,'2023-03-31 14:03:22',NULL),(153,286,1673,'wav',NULL,'2023-04-03 09:28:30',NULL),(154,286,4556,'wav',NULL,'2023-04-03 09:31:03',NULL),(155,286,4495,'wav',NULL,'2023-04-03 09:35:42',NULL),(156,286,4682,'wav',NULL,'2023-04-03 09:37:53',NULL),(157,286,2556,'wav',NULL,'2023-04-03 09:38:37',NULL),(158,286,2556,'wav',NULL,'2023-04-03 09:41:48',NULL),(159,236,6920,'wav',NULL,'2023-04-04 15:04:01',NULL),(160,288,5746,'wav',NULL,'2023-04-07 12:31:34',NULL),(161,288,2140,'wav',NULL,'2023-04-07 12:33:01',NULL),(162,288,2137,'wav',NULL,'2023-04-07 12:34:51',NULL),(163,286,2490,'wav',NULL,'2023-04-19 08:02:10',NULL),(164,286,1272,'wav',NULL,'2023-04-19 08:09:13',NULL),(165,286,2555,'wav',NULL,'2023-04-19 10:28:26',NULL),(166,286,5377,'wav',NULL,'2023-04-19 10:32:46',NULL),(167,286,6304,'wav',NULL,'2023-04-19 10:36:24',NULL),(168,286,2626,'wav',NULL,'2023-04-19 11:32:52',NULL),(169,286,6350,'wav',NULL,'2023-04-19 11:44:37',NULL),(170,286,715,'wav',NULL,'2023-04-19 13:02:04',NULL),(171,286,7344,'wav',NULL,'2023-04-19 13:38:12',NULL),(172,288,7880,'wav',NULL,'2023-04-20 12:51:29',NULL),(173,288,2203,'wav',NULL,'2023-04-20 12:53:33',NULL),(174,288,7722,'wav',NULL,'2023-04-20 12:54:34',NULL),(175,288,8375,'wav',NULL,'2023-04-20 13:03:43',NULL),(176,288,7890,'wav',NULL,'2023-04-21 07:23:01',NULL),(177,288,1253,'wav',NULL,'2023-04-21 07:24:35',NULL),(178,288,2477,'wav',NULL,'2023-04-21 07:25:31',NULL),(179,288,2477,'wav',NULL,'2023-04-21 07:27:58',NULL),(180,286,8909,'wav',NULL,'2023-04-25 19:15:44',NULL),(181,286,5367,'wav',NULL,'2023-04-25 19:16:35',NULL),(182,286,6021,'wav',NULL,'2023-04-25 19:23:46',NULL),(183,286,479,'wav',NULL,'2023-04-25 19:57:52',NULL),(184,286,1075,'wav',NULL,'2023-04-25 20:03:51',NULL),(185,286,2426,'wav',NULL,'2023-04-26 07:05:41',NULL),(186,286,7362,'wav',NULL,'2023-04-26 07:12:20',NULL),(187,286,5361,'wav',NULL,'2023-04-26 07:13:00',NULL),(188,286,2635,'wav',NULL,'2023-04-26 08:06:15',NULL),(189,286,2622,'wav',NULL,'2023-04-26 12:46:17',NULL),(190,288,2626,'wav',NULL,'2023-04-27 13:43:58',NULL),(191,288,715,'wav',NULL,'2023-04-27 14:18:02',NULL),(192,286,7690,'wav',NULL,'2023-05-03 09:21:19',NULL),(193,286,2251,'wav',NULL,'2023-05-03 09:27:00',NULL),(194,286,2251,'wav',NULL,'2023-05-04 08:01:19',NULL),(195,286,3976,'wav',NULL,'2023-05-04 08:10:40',NULL),(196,286,1834,'wav',NULL,'2023-05-04 08:11:04',NULL),(197,286,2425,'wav',NULL,'2023-05-04 09:01:47',NULL),(198,286,2425,'wav',NULL,'2023-05-04 09:05:41',NULL),(199,286,1834,'wav',NULL,'2023-05-04 09:06:13',NULL),(200,286,7815,'wav',NULL,'2023-05-04 09:11:45',NULL),(201,288,5367,'wav',NULL,'2023-05-04 12:09:52',NULL),(202,288,3976,'wav',NULL,'2023-05-04 12:10:17',NULL),(203,288,7815,'wav',NULL,'2023-05-04 12:10:46',NULL),(204,288,2251,'wav',NULL,'2023-05-04 12:12:29',NULL),(205,288,7379,'wav',NULL,'2023-05-04 16:01:22',NULL),(206,288,658,'wav',NULL,'2023-05-04 16:19:44',NULL),(207,288,690,'wav',NULL,'2023-05-04 16:35:23',NULL),(208,288,647,'wav',NULL,'2023-05-04 16:38:54',NULL),(209,286,785,'wav',NULL,'2023-05-10 12:03:24',NULL),(210,286,684,'wav',NULL,'2023-05-10 12:12:05',NULL),(211,286,6485,'wav',NULL,'2023-05-10 14:02:38',NULL),(212,286,6789,'wav',NULL,'2023-05-10 14:43:45',NULL),(213,286,2462,'wav',NULL,'2023-05-10 20:08:03',NULL),(214,286,2580,'wav',NULL,'2023-05-10 20:10:59',NULL),(215,286,2580,'wav',NULL,'2023-05-10 20:12:48',NULL),(216,286,2580,'wav',NULL,'2023-05-10 20:17:02',NULL),(217,286,5302,'wav',NULL,'2023-05-23 06:49:28',NULL),(218,286,5440,'wav',NULL,'2023-05-23 06:51:32',NULL),(219,286,5413,'wav',NULL,'2023-05-23 07:55:39',NULL),(220,286,707,'wav',NULL,'2023-05-23 08:03:38',NULL),(221,286,2430,'wav',NULL,'2023-05-23 08:06:05',NULL),(222,286,2529,'wav',NULL,'2023-05-23 08:09:42',NULL),(223,286,2532,'wav',NULL,'2023-05-23 08:10:25',NULL),(224,286,2538,'wav',NULL,'2023-05-23 08:11:13',NULL),(225,286,2608,'wav',NULL,'2023-05-23 15:41:27',NULL),(226,286,4687,'wav',NULL,'2023-05-23 16:11:12',NULL),(227,286,2618,'wav',NULL,'2023-05-25 18:25:12',NULL),(228,286,2474,'wav',NULL,'2023-05-25 18:32:12',NULL),(229,288,739,'wav',NULL,'2023-05-26 07:51:20',NULL),(230,288,2347,'wav',NULL,'2023-05-26 07:52:29',NULL),(231,286,2858,'wav',NULL,'2023-05-31 19:16:05',NULL),(232,286,6470,'wav',NULL,'2023-05-31 19:21:38',NULL),(233,286,2617,'wav',NULL,'2023-05-31 19:24:43',NULL),(234,286,9142,'wav',NULL,'2023-06-01 10:26:29',NULL),(235,286,5951,'wav',NULL,'2023-06-01 10:29:20',NULL),(236,288,384,'wav',NULL,'2023-06-01 16:14:26',NULL),(237,288,7695,'wav',NULL,'2023-06-01 16:22:02',NULL),(238,288,7702,'wav',NULL,'2023-06-01 17:02:24',NULL),(239,288,7695,'wav',NULL,'2023-06-01 17:09:46',NULL),(240,288,8057,'wav',NULL,'2023-06-01 17:15:25',NULL),(241,288,8909,'wav',NULL,'2023-06-02 10:05:30',NULL),(242,286,5272,'wav',NULL,'2023-06-06 10:56:53',NULL),(243,286,4411,'wav',NULL,'2023-06-06 10:57:41',NULL),(244,286,2529,'wav',NULL,'2023-06-06 11:02:38',NULL),(245,235,1652,'wav',NULL,'2023-06-06 12:28:30',NULL),(246,286,8485,'wav',NULL,'2023-06-06 18:23:31',NULL),(247,286,8908,'wav',NULL,'2023-06-06 18:25:39',NULL),(248,286,2565,'wav',NULL,'2023-06-06 18:26:48',NULL),(249,286,8899,'wav',NULL,'2023-06-06 18:31:23',NULL),(250,286,8167,'wav',NULL,'2023-06-06 20:33:26',NULL),(251,286,2474,'wav',NULL,'2023-06-08 13:06:56',NULL),(252,286,7686,'wav',NULL,'2023-06-08 13:09:12',NULL),(253,286,5453,'wav',NULL,'2023-06-08 13:10:48',NULL),(254,286,5409,'wav',NULL,'2023-06-08 13:11:38',NULL),(255,286,2624,'wav',NULL,'2023-06-08 13:25:42',NULL),(256,286,2553,'wav',NULL,'2023-06-08 13:29:30',NULL),(257,288,5272,'wav',NULL,'2023-06-09 07:18:02',NULL),(258,288,2553,'wav',NULL,'2023-06-09 07:19:05',NULL),(259,286,2532,'wav',NULL,'2023-06-09 12:44:48',NULL),(260,244,589,'wav',NULL,'2023-06-10 07:58:04',NULL),(261,286,7349,'wav',NULL,'2023-06-12 08:54:51',NULL),(262,286,5270,'wav',NULL,'2023-06-12 14:10:11',NULL),(263,286,4689,'wav',NULL,'2023-06-12 14:11:33',NULL),(264,286,6566,'wav',NULL,'2023-06-14 14:54:06',NULL),(265,286,2235,'wav',NULL,'2023-06-14 14:54:54',NULL),(266,286,2620,'wav',NULL,'2023-06-14 14:55:56',NULL),(267,245,1228,'wav',NULL,'2023-06-19 13:08:16',NULL),(268,245,2177,'wav',NULL,'2023-06-19 13:08:44',NULL),(269,245,5606,'wav',NULL,'2023-06-19 13:10:39',NULL),(270,286,6041,'wav',NULL,'2023-06-20 08:51:22',NULL),(271,286,5613,'wav',NULL,'2023-06-20 09:30:06',NULL),(272,286,834,'wav',NULL,'2023-06-20 09:33:21',NULL),(273,245,2182,'wav',NULL,'2023-06-20 12:50:37',NULL),(274,245,4448,'wav',NULL,'2023-06-20 12:52:23',NULL),(275,245,7354,'wav',NULL,'2023-06-20 12:55:06',NULL),(276,245,7341,'wav',NULL,'2023-06-20 12:56:16',NULL),(277,245,2665,'wav',NULL,'2023-06-20 12:59:29',NULL),(278,286,3326,'wav',NULL,'2023-06-20 17:40:18',NULL),(279,247,1175,'wav',NULL,'2023-06-21 09:00:42',NULL),(280,286,8379,'wav',NULL,'2023-06-21 12:48:24',NULL),(281,286,6299,'wav',NULL,'2023-06-21 12:48:59',NULL),(282,244,2558,'wav',NULL,'2023-06-27 09:07:46',NULL),(283,244,5109,'wav',NULL,'2023-06-27 09:25:45',NULL),(284,288,377,'wav',NULL,'2023-06-29 14:42:37',NULL),(285,288,384,'wav',NULL,'2023-06-29 14:48:58',NULL),(286,288,1628,'wav',NULL,'2023-06-29 14:49:28',NULL),(287,288,685,'wav',NULL,'2023-06-29 14:56:46',NULL),(288,288,690,'wav',NULL,'2023-06-29 14:57:22',NULL),(289,288,828,'wav',NULL,'2023-06-29 15:52:56',NULL),(290,288,2411,'wav',NULL,'2023-06-29 15:54:30',NULL),(291,288,2411,'wav',NULL,'2023-06-29 15:55:28',NULL),(292,288,2410,'wav',NULL,'2023-06-29 15:55:55',NULL),(293,288,2416,'wav',NULL,'2023-06-29 15:57:11',NULL),(294,244,2430,'wav',NULL,'2023-07-12 11:35:36',NULL),(295,244,2431,'wav',NULL,'2023-07-12 11:36:20',NULL),(296,244,2448,'wav',NULL,'2023-07-12 11:36:54',NULL),(297,244,2451,'wav',NULL,'2023-07-12 11:37:26',NULL),(298,244,2451,'wav',NULL,'2023-07-12 11:38:50',NULL),(299,244,2451,'wav',NULL,'2023-07-12 11:41:09',NULL),(300,244,2451,'wav',NULL,'2023-07-12 11:42:44',NULL),(301,244,352,'wav',NULL,'2023-07-15 13:02:01',NULL),(302,244,642,'wav',NULL,'2023-07-15 13:03:27',NULL),(303,244,6733,'wav',NULL,'2023-07-15 13:08:00',NULL),(304,244,7183,'wav',NULL,'2023-07-16 12:52:48',NULL),(305,289,5790,'wav',NULL,'2023-08-16 12:59:03',NULL),(306,289,3981,'wav',NULL,'2023-08-16 13:00:25',NULL),(307,289,7909,'wav',NULL,'2023-08-16 13:00:49',NULL),(308,289,1189,'wav',NULL,'2023-08-16 13:01:55',NULL),(309,289,2649,'wav',NULL,'2023-08-16 13:02:25',NULL),(310,289,7047,'wav',NULL,'2023-08-16 13:03:26',NULL),(311,289,2651,'wav',NULL,'2023-08-16 13:05:21',NULL),(312,289,2684,'wav',NULL,'2023-08-16 13:05:49',NULL),(313,289,502,'wav',NULL,'2023-08-16 13:06:20',NULL),(314,289,2886,'wav',NULL,'2023-08-16 13:07:12',NULL),(315,289,4547,'wav',NULL,'2023-08-16 13:07:49',NULL),(316,289,5578,'wav',NULL,'2023-08-16 13:08:27',NULL),(317,289,4639,'wav',NULL,'2023-08-16 13:08:54',NULL),(318,289,7804,'wav',NULL,'2023-08-16 13:09:59',NULL),(319,289,7652,'wav',NULL,'2023-08-16 13:12:06',NULL),(320,289,8867,'wav',NULL,'2023-08-16 13:13:32',NULL),(321,289,2698,'wav',NULL,'2023-08-16 13:14:42',NULL),(322,289,8181,'wav',NULL,'2023-08-16 13:15:28',NULL),(323,289,2949,'wav',NULL,'2023-08-16 13:18:31',NULL),(324,289,3592,'wav',NULL,'2023-08-16 13:21:42',NULL),(325,289,2904,'wav',NULL,'2023-08-16 13:22:26',NULL),(326,247,249,'wav',NULL,'2023-08-23 09:34:30',NULL),(327,247,4612,'wav',NULL,'2023-08-25 08:23:03',NULL),(328,244,1107,'wav',NULL,'2023-08-26 12:57:34',NULL),(329,286,3858,'wav',NULL,'2023-08-31 06:40:30',NULL),(330,286,4670,'wav',NULL,'2023-08-31 06:41:43',NULL),(331,286,8845,'wav',NULL,'2023-08-31 07:14:19',NULL),(332,286,8301,'wav',NULL,'2023-08-31 14:15:56',NULL),(333,288,8955,'wav',NULL,'2023-08-31 14:56:57',NULL),(334,288,2610,'wav',NULL,'2023-08-31 14:59:16',NULL),(335,288,8955,'wav',NULL,'2023-09-04 15:21:18',NULL),(336,288,4670,'wav',NULL,'2023-09-04 15:28:56',NULL),(337,286,1835,'wav',NULL,'2023-09-06 12:40:17',NULL),(338,286,1122,'wav',NULL,'2023-09-06 12:41:21',NULL),(339,286,7814,'wav',NULL,'2023-09-07 06:33:22',NULL),(340,286,2591,'wav',NULL,'2023-09-07 06:34:15',NULL),(341,286,9061,'wav',NULL,'2023-09-07 06:46:35',NULL),(342,288,2248,'wav',NULL,'2023-09-07 12:43:52',NULL),(343,288,3326,'wav',NULL,'2023-09-07 12:46:23',NULL),(344,288,4395,'wav',NULL,'2023-09-07 12:48:00',NULL),(345,288,9006,'wav',NULL,'2023-09-07 12:49:23',NULL),(346,288,108,'wav',NULL,'2023-09-07 12:53:02',NULL),(347,288,521,'wav',NULL,'2023-09-07 12:55:33',NULL),(348,288,276,'wav',NULL,'2023-09-07 12:56:13',NULL),(349,288,2556,'wav',NULL,'2023-09-07 15:47:43',NULL),(350,286,1832,'wav',NULL,'2023-09-12 17:44:04',NULL),(351,286,5344,'wav',NULL,'2023-09-13 14:41:58',NULL),(352,286,1131,'wav',NULL,'2023-09-13 14:44:20',NULL),(353,286,4950,'wav',NULL,'2023-09-14 06:42:17',NULL),(354,286,5278,'wav',NULL,'2023-09-21 08:46:15',NULL),(355,288,2193,'wav',NULL,'2023-09-21 11:53:18',NULL),(356,288,7512,'wav',NULL,'2023-09-21 11:54:21',NULL),(357,288,324,'wav',NULL,'2023-09-21 11:55:24',NULL),(358,288,5392,'wav',NULL,'2023-09-21 11:56:33',NULL),(359,288,8103,'wav',NULL,'2023-09-21 11:58:45',NULL),(360,288,1131,'wav',NULL,'2023-09-21 11:59:57',NULL),(361,288,3044,'wav',NULL,'2023-09-23 13:45:49',NULL),(362,288,6063,'wav',NULL,'2023-09-23 13:46:21',NULL),(363,288,6503,'wav',NULL,'2023-09-23 13:46:39',NULL),(364,286,6327,'wav',NULL,'2023-09-27 17:47:48',NULL),(365,286,2713,'wav',NULL,'2023-09-27 18:34:51',NULL),(366,286,3986,'wav',NULL,'2023-09-28 07:46:54',NULL),(367,286,260,'wav',NULL,'2023-09-28 08:13:44',NULL),(368,286,2567,'wav',NULL,'2023-09-28 08:26:27',NULL),(369,286,2562,'wav',NULL,'2023-09-28 08:51:55',NULL),(370,286,4505,'wav',NULL,'2023-09-28 08:52:34',NULL),(371,286,9448,'wav',NULL,'2023-09-28 08:53:54',NULL),(372,288,9448,'wav',NULL,'2023-09-28 13:29:22',NULL),(373,286,4670,'wav',NULL,'2023-10-03 09:25:55',NULL),(374,286,3145,'wav',NULL,'2023-10-03 11:15:33',NULL),(375,286,9360,'wav',NULL,'2023-10-04 19:02:44',NULL),(376,286,2538,'wav',NULL,'2023-10-04 19:55:42',NULL),(377,286,595,'wav',NULL,'2023-10-05 08:04:00',NULL),(378,286,702,'wav',NULL,'2023-10-05 08:05:21',NULL),(379,288,3145,'wav',NULL,'2023-10-05 10:15:44',NULL),(380,286,2638,'wav',NULL,'2023-10-11 15:54:45',NULL),(381,286,9560,'wav',NULL,'2023-10-11 16:26:45',NULL),(382,286,8113,'wav',NULL,'2023-10-12 10:31:10',NULL),(383,286,391,'wav',NULL,'2023-10-12 13:18:26',NULL),(384,286,9053,'wav',NULL,'2023-10-12 13:55:39',NULL),(385,288,1253,'wav',NULL,'2023-10-18 15:22:27',NULL),(386,288,2230,'wav',NULL,'2023-10-18 15:22:50',NULL),(387,288,2477,'wav',NULL,'2023-10-18 15:23:30',NULL),(388,288,7906,'wav',NULL,'2023-10-18 15:24:38',NULL),(389,288,4968,'wav',NULL,'2023-10-18 15:25:10',NULL),(390,288,4968,'wav',NULL,'2023-10-18 15:25:29',NULL),(391,286,7083,'wav',NULL,'2023-10-19 08:32:40',NULL),(392,286,8375,'wav',NULL,'2023-10-19 08:53:01',NULL),(393,286,9299,'wav',NULL,'2023-10-19 11:53:33',NULL),(394,288,2477,'wav',NULL,'2023-10-19 14:44:39',NULL),(395,289,2626,'wav',NULL,'2023-10-20 11:33:20',NULL),(396,289,2591,'wav',NULL,'2023-10-20 11:33:55',NULL),(397,289,515,'wav',NULL,'2023-10-20 11:34:54',NULL),(398,289,2931,'wav',NULL,'2023-10-20 11:35:18',NULL),(399,289,8184,'wav',NULL,'2023-10-20 11:36:56',NULL),(400,289,2635,'wav',NULL,'2023-10-20 11:37:24',NULL),(401,289,3571,'wav',NULL,'2023-10-20 11:38:00',NULL),(402,289,1703,'wav',NULL,'2023-10-20 11:38:26',NULL),(403,289,1700,'wav',NULL,'2023-10-20 11:39:29',NULL),(404,289,3115,'wav',NULL,'2023-10-20 11:39:53',NULL),(405,289,2123,'wav',NULL,'2023-10-20 11:40:22',NULL),(406,289,4492,'wav',NULL,'2023-10-20 11:41:13',NULL),(407,289,4538,'wav',NULL,'2023-10-20 11:41:55',NULL),(408,289,8429,'wav',NULL,'2023-10-20 11:42:32',NULL),(409,289,7762,'wav',NULL,'2023-10-20 11:42:49',NULL),(410,289,521,'wav',NULL,'2023-10-20 11:43:33',NULL),(411,289,9425,'wav',NULL,'2023-10-20 11:46:02',NULL),(412,289,9491,'wav',NULL,'2023-10-20 11:46:21',NULL),(413,289,9414,'wav',NULL,'2023-10-20 11:46:34',NULL),(414,289,8318,'wav',NULL,'2023-10-20 11:46:59',NULL),(415,289,2204,'wav',NULL,'2023-10-20 11:50:32',NULL),(416,289,7766,'wav',NULL,'2023-10-20 11:51:01',NULL),(417,289,1160,'wav',NULL,'2023-10-20 11:51:43',NULL),(418,289,8647,'wav',NULL,'2023-10-20 11:52:03',NULL),(419,289,2246,'wav',NULL,'2023-10-20 11:52:50',NULL),(420,289,4866,'wav',NULL,'2023-10-20 11:56:54',NULL),(421,289,9413,'wav',NULL,'2023-10-20 12:12:01',NULL),(422,289,2158,'wav',NULL,'2023-10-20 12:12:18',NULL),(423,289,413,'wav',NULL,'2023-10-20 12:12:44',NULL),(424,289,1157,'wav',NULL,'2023-10-20 12:13:36',NULL),(425,289,1149,'wav',NULL,'2023-10-20 12:14:28',NULL),(426,289,1197,'wav',NULL,'2023-10-20 12:14:50',NULL),(427,289,1827,'wav',NULL,'2023-10-20 12:17:03',NULL),(428,289,1827,'wav',NULL,'2023-10-20 12:17:46',NULL),(429,289,2141,'wav',NULL,'2023-10-20 12:19:54',NULL),(430,289,2209,'wav',NULL,'2023-10-20 12:23:21',NULL),(431,289,4494,'wav',NULL,'2023-10-20 12:24:12',NULL),(432,289,389,'wav',NULL,'2023-10-20 12:26:05',NULL),(433,289,1650,'wav',NULL,'2023-10-20 12:26:36',NULL),(434,289,7793,'wav',NULL,'2023-10-20 12:28:04',NULL),(435,286,8438,'wav',NULL,'2023-10-25 15:22:04',NULL),(436,286,8910,'wav',NULL,'2023-10-25 15:26:21',NULL),(437,286,889,'wav',NULL,'2023-10-25 18:50:11',NULL),(438,286,4242,'wav',NULL,'2023-10-26 08:08:15',NULL),(439,286,9680,'wav',NULL,'2023-10-26 09:20:27',NULL),(440,289,2123,'wav',NULL,'2023-11-06 13:43:55',NULL),(441,289,7672,'wav',NULL,'2023-11-08 08:23:00',NULL),(442,289,5594,'wav',NULL,'2023-11-08 08:23:33',NULL),(443,289,5594,'wav',NULL,'2023-11-08 08:26:51',NULL),(444,289,9138,'wav',NULL,'2023-11-08 08:27:09',NULL),(445,289,5602,'wav',NULL,'2023-11-08 08:27:40',NULL),(446,289,6499,'wav',NULL,'2023-11-08 08:28:09',NULL),(447,286,6001,'wav',NULL,'2023-11-15 10:38:08',NULL),(448,288,9431,'wav',NULL,'2023-11-16 09:42:09',NULL),(449,286,8327,'wav',NULL,'2023-11-21 10:33:38',NULL),(450,286,2447,'wav',NULL,'2023-11-22 10:22:18',NULL),(451,286,5277,'wav',NULL,'2023-11-22 13:18:56',NULL),(452,286,2602,'wav',NULL,'2023-11-22 13:24:25',NULL),(453,292,1145,'wav',NULL,'2023-11-23 16:54:16',NULL),(454,292,1168,'wav',NULL,'2023-11-23 16:54:51',NULL),(455,292,243,'wav',NULL,'2023-11-23 16:55:41',NULL),(456,292,295,'wav',NULL,'2023-11-23 16:56:35',NULL),(457,292,514,'wav',NULL,'2023-11-23 16:57:38',NULL),(458,292,1144,'wav',NULL,'2023-11-23 17:00:29',NULL),(459,292,1813,'wav',NULL,'2023-11-23 17:01:06',NULL),(460,292,2685,'wav',NULL,'2023-11-23 17:03:07',NULL),(461,292,2707,'wav',NULL,'2023-11-23 17:03:58',NULL),(462,292,2259,'wav',NULL,'2023-11-23 17:04:44',NULL),(463,292,3275,'wav',NULL,'2023-11-23 17:06:07',NULL),(464,235,7865,'wav',NULL,'2023-11-28 12:32:25',NULL),(465,288,3320,'wav',NULL,'2023-11-29 13:31:02',NULL),(466,288,4699,'wav',NULL,'2023-11-29 13:31:43',NULL),(467,288,5581,'wav',NULL,'2023-11-29 13:32:56',NULL),(468,286,2031,'wav',NULL,'2023-11-29 13:56:22',NULL),(469,286,2490,'wav',NULL,'2023-11-29 14:01:15',NULL),(470,286,3288,'wav',NULL,'2023-11-29 14:05:00',NULL),(471,286,7512,'wav',NULL,'2023-11-29 15:40:08',NULL),(472,292,335,'wav',NULL,'2023-11-30 17:46:42',NULL),(473,292,9031,'wav',NULL,'2023-11-30 17:48:24',NULL),(474,292,9070,'wav',NULL,'2023-11-30 17:49:08',NULL),(475,292,1191,'wav',NULL,'2023-11-30 17:54:35',NULL),(476,292,1192,'wav',NULL,'2023-11-30 17:56:07',NULL),(477,286,8877,'wav',NULL,'2023-12-06 07:52:25',NULL),(478,286,5419,'wav',NULL,'2023-12-06 08:25:13',NULL),(479,286,5454,'wav',NULL,'2023-12-06 13:51:11',NULL),(480,286,4752,'wav',NULL,'2023-12-06 14:08:07',NULL),(481,286,2598,'wav',NULL,'2023-12-06 15:27:25',NULL),(482,289,1345,'wav',NULL,'2023-12-11 13:12:54',NULL),(483,289,8874,'wav',NULL,'2023-12-11 13:13:20',NULL),(484,289,9303,'wav',NULL,'2023-12-11 13:16:38',NULL),(485,308,1179,'wav',NULL,'2023-12-13 09:53:44',NULL),(486,308,646,'wav',NULL,'2023-12-13 09:54:45',NULL),(487,308,636,'wav',NULL,'2023-12-13 09:55:07',NULL),(488,308,4482,'wav',NULL,'2023-12-13 09:56:08',NULL),(489,308,2553,'wav',NULL,'2023-12-13 09:57:56',NULL),(490,308,4395,'wav',NULL,'2023-12-13 09:59:26',NULL),(491,308,1682,'wav',NULL,'2023-12-13 10:00:05',NULL),(492,286,559,'wav',NULL,'2023-12-13 13:28:39',NULL),(493,286,1129,'wav',NULL,'2023-12-13 13:30:15',NULL),(494,286,9496,'wav',NULL,'2023-12-13 13:30:39',NULL),(495,286,8393,'wav',NULL,'2023-12-13 13:33:31',NULL),(496,286,4723,'wav',NULL,'2023-12-13 16:46:14',NULL),(497,286,3812,'wav',NULL,'2023-12-13 19:43:13',NULL),(498,286,5012,'wav',NULL,'2023-12-13 19:47:27',NULL),(499,286,9174,'wav',NULL,'2023-12-13 20:02:49',NULL),(500,286,451,'wav',NULL,'2023-12-13 20:57:31',NULL),(501,286,5011,'wav',NULL,'2023-12-14 08:38:54',NULL),(502,286,2171,'wav',NULL,'2023-12-14 08:41:51',NULL),(503,286,379,'wav',NULL,'2023-12-14 08:49:47',NULL),(504,286,1118,'wav',NULL,'2023-12-14 09:02:43',NULL),(505,286,1121,'wav',NULL,'2023-12-20 12:40:56',NULL),(506,286,5659,'wav',NULL,'2023-12-20 16:11:29',NULL),(507,286,2716,'wav',NULL,'2024-01-03 10:45:10',NULL),(508,286,2709,'wav',NULL,'2024-01-03 10:52:43',NULL),(509,286,2549,'wav',NULL,'2024-01-03 11:08:41',NULL),(510,286,2021,'wav',NULL,'2024-01-03 11:30:13',NULL),(511,286,7344,'wav',NULL,'2024-01-04 11:09:03',NULL),(512,308,1300,'wav',NULL,'2024-01-08 09:06:42',NULL),(513,308,4398,'wav',NULL,'2024-01-08 09:09:36',NULL),(514,308,4393,'wav',NULL,'2024-01-08 09:09:58',NULL),(515,286,7890,'wav',NULL,'2024-01-24 08:41:25',NULL),(516,286,2452,'wav',NULL,'2024-01-24 08:44:01',NULL),(517,286,7955,'wav',NULL,'2024-01-24 09:14:55',NULL),(518,286,981,'wav',NULL,'2024-01-24 10:38:45',NULL),(519,286,5987,'wav',NULL,'2024-01-24 12:02:56',NULL),(520,286,7664,'wav',NULL,'2024-01-24 12:17:48',NULL),(521,288,7664,'wav',NULL,'2024-01-25 10:55:10',NULL),(522,306,9399,'wav',NULL,'2024-01-26 13:04:27',NULL),(523,290,9691,'wav',NULL,'2024-01-29 10:37:41',NULL),(524,290,3735,'wav',NULL,'2024-01-29 11:18:10',NULL),(525,290,5497,'wav',NULL,'2024-01-29 11:26:27',NULL),(526,290,167,'wav',NULL,'2024-01-29 11:27:16',NULL),(527,290,8987,'wav',NULL,'2024-01-29 11:42:12',NULL),(528,290,392,'wav',NULL,'2024-01-29 11:52:22',NULL),(529,290,9816,'wav',NULL,'2024-01-29 12:01:36',NULL),(530,290,9818,'wav',NULL,'2024-01-29 12:02:10',NULL),(531,286,3863,'wav',NULL,'2024-01-31 15:54:20',NULL),(532,286,8882,'wav',NULL,'2024-02-01 07:57:13',NULL),(533,286,9315,'wav',NULL,'2024-02-01 10:36:39',NULL),(534,286,2589,'wav',NULL,'2024-02-01 14:39:17',NULL),(535,286,1118,'wav',NULL,'2024-02-07 16:46:04',NULL),(536,286,7872,'wav',NULL,'2024-02-08 10:27:03',NULL),(537,286,8534,'wav',NULL,'2024-02-08 11:45:29',NULL),(538,288,4103,'wav',NULL,'2024-02-14 10:24:20',NULL),(539,288,7906,'wav',NULL,'2024-02-15 13:53:47',NULL),(540,288,5494,'wav',NULL,'2024-02-15 13:54:42',NULL),(541,288,8534,'wav',NULL,'2024-02-15 13:58:45',NULL),(542,288,5491,'wav',NULL,'2024-02-15 13:59:14',NULL),(543,288,8534,'wav',NULL,'2024-02-15 14:12:51',NULL),(544,286,614,'wav',NULL,'2024-02-20 14:56:00',NULL),(545,286,6736,'wav',NULL,'2024-02-20 15:48:43',NULL),(546,286,2627,'wav',NULL,'2024-02-21 10:12:59',NULL),(547,286,2627,'wav',NULL,'2024-02-21 10:14:30',NULL),(548,286,2448,'wav',NULL,'2024-02-21 10:24:26',NULL),(549,286,2431,'wav',NULL,'2024-02-21 10:24:54',NULL),(550,288,6718,'wav',NULL,'2024-02-22 11:56:35',NULL),(551,288,7162,'wav',NULL,'2024-02-22 11:57:10',NULL),(552,290,2627,'wav',NULL,'2024-02-22 12:30:46',NULL),(553,244,4535,'wav',NULL,'2024-02-23 13:34:45',NULL),(554,286,2552,'wav',NULL,'2024-03-06 06:52:57',NULL),(555,286,857,'wav',NULL,'2024-03-06 07:15:06',NULL),(556,286,2467,'wav',NULL,'2024-03-06 07:16:03',NULL),(557,286,2467,'wav',NULL,'2024-03-06 07:18:32',NULL),(558,286,6183,'wav',NULL,'2024-03-06 11:07:28',NULL),(559,286,6028,'wav',NULL,'2024-03-06 12:10:54',NULL),(560,290,1107,'wav',NULL,'2024-03-11 11:42:25',NULL),(561,288,5454,'wav',NULL,'2024-03-13 12:48:54',NULL),(562,286,9343,'wav',NULL,'2024-03-13 16:31:03',NULL),(563,286,1420,'wav',NULL,'2024-03-13 16:44:32',NULL),(564,286,2442,'wav',NULL,'2024-03-14 09:57:42',NULL),(565,286,2442,'wav',NULL,'2024-03-14 09:58:52',NULL),(566,286,9798,'wav',NULL,'2024-03-14 10:06:23',NULL),(567,286,9858,'wav',NULL,'2024-03-19 12:16:56',NULL),(568,286,9857,'wav',NULL,'2024-03-19 12:18:58',NULL),(569,286,3586,'wav',NULL,'2024-03-19 12:45:54',NULL),(570,286,7197,'wav',NULL,'2024-03-19 14:37:36',NULL),(571,286,8975,'wav',NULL,'2024-03-20 12:00:06',NULL),(572,286,6739,'wav',NULL,'2024-03-20 15:02:05',NULL),(573,288,472,'wav',NULL,'2024-03-20 16:13:10',NULL),(574,288,9858,'wav',NULL,'2024-03-22 07:59:52',NULL),(575,286,1578,'wav',NULL,'2024-03-25 12:18:53',NULL),(576,288,2467,'wav',NULL,'2024-03-27 15:08:51',NULL),(577,288,6789,'wav',NULL,'2024-03-27 15:09:39',NULL),(578,290,2627,'wav',NULL,'2024-03-28 09:55:34',NULL),(579,290,2467,'wav',NULL,'2024-03-28 09:57:37',NULL),(580,290,8579,'wav',NULL,'2024-03-28 09:57:59',NULL),(581,290,9349,'wav',NULL,'2024-03-28 09:58:29',NULL),(582,290,8871,'wav',NULL,'2024-03-28 09:58:46',NULL),(583,290,8623,'wav',NULL,'2024-03-28 09:59:02',NULL),(584,290,2710,'wav',NULL,'2024-03-28 10:01:18',NULL),(585,290,1112,'wav',NULL,'2024-03-28 10:01:37',NULL),(586,290,4203,'wav',NULL,'2024-03-28 10:01:52',NULL),(587,290,3803,'wav',NULL,'2024-03-28 10:02:09',NULL),(588,290,2148,'wav',NULL,'2024-03-28 10:02:26',NULL),(589,290,1288,'wav',NULL,'2024-03-28 10:02:36',NULL),(590,290,4186,'wav',NULL,'2024-03-28 10:02:48',NULL),(591,290,7750,'wav',NULL,'2024-03-28 10:03:13',NULL),(592,290,2444,'wav',NULL,'2024-03-28 10:04:12',NULL),(593,290,2422,'wav',NULL,'2024-03-28 10:04:21',NULL),(594,290,1828,'wav',NULL,'2024-03-28 10:04:32',NULL),(595,290,2439,'wav',NULL,'2024-03-28 10:04:44',NULL),(596,290,1831,'wav',NULL,'2024-03-28 10:05:10',NULL),(597,290,2416,'wav',NULL,'2024-03-28 10:05:25',NULL),(598,290,2479,'wav',NULL,'2024-03-28 10:05:37',NULL),(599,286,2258,'wav',NULL,'2024-04-02 12:04:41',NULL),(600,286,2255,'wav',NULL,'2024-04-02 12:43:50',NULL),(601,286,6736,'wav',NULL,'2024-04-02 13:41:56',NULL),(602,286,672,'wav',NULL,'2024-04-04 09:59:25',NULL),(603,244,9519,'wav',NULL,'2024-04-09 10:13:14',NULL),(604,286,8536,'wav',NULL,'2024-04-10 14:43:15',NULL),(605,286,8889,'wav',NULL,'2024-04-10 14:46:38',NULL),(606,286,895,'wav',NULL,'2024-04-11 08:37:55',NULL),(607,286,4444,'wav',NULL,'2024-04-11 08:38:33',NULL),(608,286,5263,'wav',NULL,'2024-04-11 08:41:04',NULL),(609,286,6491,'wav',NULL,'2024-04-11 08:52:50',NULL),(610,244,9519,'wav',NULL,'2024-04-12 12:40:47',NULL),(611,286,324,'wav',NULL,'2024-04-16 11:54:25',NULL),(612,286,6348,'wav',NULL,'2024-04-16 12:10:50',NULL),(613,286,2615,'wav',NULL,'2024-04-16 16:59:38',NULL),(614,244,10019,'wav',NULL,'2024-04-19 14:23:56',NULL),(615,244,10019,'wav',NULL,'2024-04-19 14:26:23',NULL),(616,244,9960,'wav',NULL,'2024-04-19 14:27:09',NULL),(617,244,10019,'wav',NULL,'2024-04-19 14:29:58',NULL),(618,244,382,'wav',NULL,'2024-04-26 09:52:49',NULL),(619,244,861,'wav',NULL,'2024-04-26 09:54:48',NULL),(620,244,2653,'wav',NULL,'2024-04-26 09:56:18',NULL),(621,244,2583,'wav',NULL,'2024-04-26 09:57:23',NULL),(622,244,7821,'wav',NULL,'2024-04-26 12:53:34',NULL),(623,286,651,'wav',NULL,'2024-04-30 14:02:43',NULL),(624,286,5397,'wav',NULL,'2024-04-30 14:04:40',NULL),(625,286,2550,'wav',NULL,'2024-04-30 15:52:32',NULL),(626,286,2592,'wav',NULL,'2024-05-07 08:44:25',NULL),(627,286,518,'wav',NULL,'2024-05-08 09:13:48',NULL),(628,286,6457,'wav',NULL,'2024-05-08 13:38:30',NULL),(629,286,5472,'wav',NULL,'2024-05-08 18:49:00',NULL),(630,286,806,'wav',NULL,'2024-05-15 08:19:53',NULL),(631,286,2590,'wav',NULL,'2024-05-15 08:34:25',NULL),(632,286,4311,'wav',NULL,'2024-05-15 09:29:51',NULL),(633,286,10861,'wav',NULL,'2024-05-21 13:38:11',NULL),(634,244,10309,'wav',NULL,'2024-05-22 07:42:00',NULL),(635,244,6252,'wav',NULL,'2024-05-22 07:46:20',NULL),(636,286,2216,'wav',NULL,'2024-05-22 08:35:04',NULL),(637,286,1841,'wav',NULL,'2024-05-22 09:19:34',NULL),(638,286,2541,'wav',NULL,'2024-05-22 09:25:51',NULL),(639,244,6504,'wav',NULL,'2024-05-22 13:53:43',NULL),(640,286,8228,'wav',NULL,'2024-05-22 13:59:37',NULL),(641,234,3442,'wav',NULL,'2024-05-23 09:55:43',NULL),(642,237,5363,'wav',NULL,'2024-05-23 13:35:41',NULL),(643,237,55,'wav',NULL,'2024-05-23 13:37:21',NULL),(644,237,1830,'wav',NULL,'2024-05-23 13:41:01',NULL),(645,244,2258,'wav',NULL,'2024-05-24 12:17:26',NULL),(646,286,7432,'wav',NULL,'2024-05-29 07:31:18',NULL),(647,286,7710,'wav',NULL,'2024-05-29 07:32:22',NULL),(648,286,10165,'wav',NULL,'2024-05-29 07:33:22',NULL),(649,286,4756,'wav',NULL,'2024-05-29 11:43:06',NULL),(650,286,10437,'wav',NULL,'2024-05-29 12:10:04',NULL),(651,286,10726,'wav',NULL,'2024-05-29 14:07:55',NULL),(652,244,947,'wav',NULL,'2024-06-03 08:56:13',NULL),(653,244,8317,'wav',NULL,'2024-06-03 08:58:13',NULL),(654,286,1167,'wav',NULL,'2024-06-04 14:42:01',NULL),(655,286,9128,'wav',NULL,'2024-06-05 09:32:22',NULL),(656,286,1558,'wav',NULL,'2024-06-05 12:08:48',NULL),(657,286,9962,'wav',NULL,'2024-06-05 13:46:00',NULL),(658,286,10667,'wav',NULL,'2024-06-05 13:56:20',NULL),(659,286,1719,'wav',NULL,'2024-06-06 09:44:06',NULL),(660,286,806,'wav',NULL,'2024-06-07 16:03:54',NULL),(661,286,4635,'wav',NULL,'2024-06-07 18:07:21',NULL),(662,286,933,'wav',NULL,'2024-06-08 10:14:20',NULL),(663,244,5489,'wav',NULL,'2024-06-13 14:57:11',NULL),(664,244,5491,'wav',NULL,'2024-06-13 14:58:01',NULL),(665,244,5496,'wav',NULL,'2024-06-13 14:59:13',NULL),(666,288,5843,'wav',NULL,'2024-06-14 13:42:28',NULL),(667,288,2416,'wav',NULL,'2024-06-14 13:43:07',NULL),(668,288,10230,'wav',NULL,'2024-06-14 13:45:33',NULL),(669,288,10230,'wav',NULL,'2024-06-14 13:46:26',NULL),(670,288,3282,'wav',NULL,'2024-06-18 16:48:04',NULL),(671,288,1109,'wav',NULL,'2024-06-18 16:49:01',NULL),(672,286,8375,'wav',NULL,'2024-06-25 08:12:16',NULL),(673,286,5989,'wav',NULL,'2024-06-25 12:23:54',NULL),(674,286,1550,'wav',NULL,'2024-06-25 12:47:24',NULL),(675,290,9519,'wav',NULL,'2024-08-26 12:24:42',NULL),(676,286,10372,'wav',NULL,'2024-09-03 15:48:36',NULL),(677,286,2375,'wav',NULL,'2024-09-03 16:28:13',NULL),(678,286,10856,'wav',NULL,'2024-09-04 10:58:04',NULL),(679,286,2430,'wav',NULL,'2024-09-04 13:44:34',NULL),(680,286,2661,'wav',NULL,'2024-09-04 15:14:49',NULL),(681,286,2650,'wav',NULL,'2024-09-04 15:26:04',NULL),(682,244,10169,'wav',NULL,'2024-09-23 12:29:07',NULL),(683,244,10169,'wav',NULL,'2024-09-23 12:38:25',NULL),(684,286,6215,'wav',NULL,'2024-09-25 16:59:54',NULL),(685,286,7382,'wav',NULL,'2024-10-02 07:34:20',NULL),(686,286,9370,'wav',NULL,'2024-10-02 07:36:22',NULL),(687,286,10178,'wav',NULL,'2024-10-02 08:39:59',NULL),(688,286,6367,'wav',NULL,'2024-10-02 08:50:55',NULL),(689,286,6859,'wav',NULL,'2024-10-02 09:14:55',NULL),(690,288,10372,'wav',NULL,'2024-10-03 08:43:33',NULL),(691,247,4968,'wav',NULL,'2024-10-07 09:30:42',NULL),(692,286,9748,'wav',NULL,'2024-10-15 18:31:25',NULL),(693,286,4608,'wav',NULL,'2024-10-15 18:40:51',NULL),(694,286,10500,'wav',NULL,'2024-10-15 18:44:06',NULL),(695,286,8465,'wav',NULL,'2024-10-16 09:13:18',NULL),(696,286,1129,'wav',NULL,'2024-10-16 10:27:15',NULL),(697,286,10508,'wav',NULL,'2024-10-16 10:40:16',NULL),(698,286,10194,'wav',NULL,'2024-10-16 11:04:15',NULL),(699,303,2032,'wav',NULL,'2024-10-17 17:22:01',NULL),(700,286,324,'wav',NULL,'2024-10-18 14:50:46',NULL),(701,286,8131,'wav',NULL,'2024-10-18 14:52:13',NULL),(702,286,313,'wav',NULL,'2024-10-18 14:53:33',NULL),(703,286,1883,'wav',NULL,'2024-10-22 18:58:49',NULL),(704,286,10344,'wav',NULL,'2024-10-22 18:59:23',NULL),(705,286,4715,'wav',NULL,'2024-10-22 18:59:56',NULL),(706,286,1716,'wav',NULL,'2024-10-22 19:01:40',NULL),(707,286,2841,'wav',NULL,'2024-10-29 10:48:53',NULL),(708,286,6501,'wav',NULL,'2024-11-05 14:36:59',NULL),(709,286,1276,'wav',NULL,'2024-11-05 14:37:38',NULL),(710,286,5844,'wav',NULL,'2024-11-07 15:57:28',NULL),(711,286,3569,'wav',NULL,'2024-11-07 15:58:24',NULL),(712,286,5543,'wav',NULL,'2024-11-07 15:59:27',NULL),(713,286,3704,'wav',NULL,'2024-11-07 16:00:32',NULL),(714,286,8167,'wav',NULL,'2024-11-13 08:10:16',NULL),(715,286,8222,'wav',NULL,'2024-11-13 08:12:09',NULL),(716,286,8214,'wav',NULL,'2024-11-13 08:12:28',NULL),(717,286,10175,'wav',NULL,'2024-11-13 08:13:49',NULL),(718,286,9814,'wav',NULL,'2024-11-13 08:14:55',NULL),(719,286,2825,'wav',NULL,'2024-11-13 09:26:02',NULL),(720,286,6495,'wav',NULL,'2024-11-13 09:26:42',NULL),(721,286,6500,'wav',NULL,'2024-11-13 14:48:04',NULL),(722,286,10295,'wav',NULL,'2024-11-13 14:58:54',NULL),(723,303,10244,'wav',NULL,'2024-11-15 18:31:15',NULL),(724,303,8069,'wav',NULL,'2024-11-15 18:34:39',NULL),(725,303,1119,'wav',NULL,'2024-11-15 18:36:22',NULL),(726,303,2051,'wav',NULL,'2024-11-15 18:37:43',NULL),(727,303,7320,'wav',NULL,'2024-11-15 18:39:01',NULL),(728,303,2443,'wav',NULL,'2024-11-15 18:40:10',NULL),(729,303,9828,'wav',NULL,'2024-11-15 18:42:41',NULL),(730,303,10345,'wav',NULL,'2024-11-15 18:45:10',NULL),(731,303,10364,'wav',NULL,'2024-11-15 18:47:43',NULL),(732,303,4736,'wav',NULL,'2024-11-15 18:50:57',NULL),(733,303,4736,'wav',NULL,'2024-11-15 18:51:51',NULL),(734,303,3505,'wav',NULL,'2024-11-15 18:54:50',NULL),(735,303,4708,'wav',NULL,'2024-11-15 18:55:26',NULL),(736,303,10308,'wav',NULL,'2024-11-15 18:56:50',NULL),(737,303,4695,'wav',NULL,'2024-11-15 18:58:53',NULL),(738,303,7084,'wav',NULL,'2024-11-15 18:59:59',NULL),(739,303,6401,'wav',NULL,'2024-11-15 19:02:03',NULL),(740,303,9348,'wav',NULL,'2024-11-15 19:03:22',NULL),(741,303,926,'wav',NULL,'2024-11-15 19:04:10',NULL),(742,303,7536,'wav',NULL,'2024-11-15 19:05:16',NULL),(743,303,1275,'wav',NULL,'2024-11-15 19:08:46',NULL),(744,303,690,'wav',NULL,'2024-11-15 19:18:37',NULL),(745,303,9569,'wav',NULL,'2024-11-15 19:20:11',NULL),(746,303,2434,'wav',NULL,'2024-11-15 20:57:12',NULL),(747,303,9365,'wav',NULL,'2024-11-15 21:01:13',NULL),(748,303,732,'wav',NULL,'2024-11-15 21:02:48',NULL),(749,303,10265,'wav',NULL,'2024-11-15 21:03:53',NULL),(750,303,6299,'wav',NULL,'2024-11-15 21:07:57',NULL),(751,303,9555,'wav',NULL,'2024-11-15 21:09:22',NULL),(752,303,468,'wav',NULL,'2024-11-15 21:11:08',NULL),(753,303,6338,'wav',NULL,'2024-11-15 21:12:39',NULL),(754,303,8067,'wav',NULL,'2024-11-15 21:14:59',NULL),(755,303,673,'wav',NULL,'2024-11-15 21:22:03',NULL),(756,303,694,'wav',NULL,'2024-11-15 21:23:33',NULL),(757,303,2206,'wav',NULL,'2024-11-15 21:47:26',NULL),(758,303,1109,'wav',NULL,'2024-11-15 21:48:49',NULL),(759,303,1881,'wav',NULL,'2024-11-15 21:50:09',NULL),(760,286,2532,'wav',NULL,'2024-11-20 13:35:42',NULL),(761,331,1696,'wav',NULL,'2024-11-25 08:31:11',NULL),(762,331,2123,'wav',NULL,'2024-11-25 08:32:42',NULL),(763,328,1159,'wav',NULL,'2024-11-25 17:05:36',NULL),(764,286,7945,'wav',NULL,'2024-11-26 15:39:10',NULL),(765,286,9435,'wav',NULL,'2024-11-26 15:40:17',NULL),(766,286,8061,'wav',NULL,'2024-12-03 15:17:38',NULL),(767,286,7148,'wav',NULL,'2024-12-03 15:20:00',NULL),(768,286,10347,'wav',NULL,'2024-12-03 19:51:09',NULL),(769,377,679,'wav',NULL,'2024-12-09 14:55:09',NULL),(770,377,55,'wav',NULL,'2024-12-09 14:55:38',NULL),(771,377,690,'wav',NULL,'2024-12-09 14:58:38',NULL),(772,377,1714,'wav',NULL,'2024-12-09 15:09:02',NULL),(773,377,757,'wav',NULL,'2024-12-09 15:10:36',NULL),(774,377,1209,'wav',NULL,'2024-12-09 15:11:46',NULL),(775,377,2375,'wav',NULL,'2024-12-09 15:12:18',NULL),(776,377,2385,'wav',NULL,'2024-12-09 15:12:55',NULL),(777,286,2477,'wav',NULL,'2024-12-11 08:45:12',NULL),(778,286,5361,'wav',NULL,'2024-12-11 08:46:47',NULL),(779,286,5659,'wav',NULL,'2024-12-11 08:47:43',NULL),(780,286,9808,'wav',NULL,'2024-12-11 16:24:09',NULL),(781,286,7724,'wav',NULL,'2024-12-17 15:03:50',NULL),(782,286,904,'wav',NULL,'2024-12-17 15:04:49',NULL),(783,286,1682,'wav',NULL,'2024-12-17 15:06:00',NULL),(784,286,918,'wav',NULL,'2024-12-17 15:07:24',NULL),(785,286,9864,'wav',NULL,'2024-12-17 15:13:11',NULL),(786,286,1301,'wav',NULL,'2025-01-08 10:51:53',NULL),(787,286,3470,'wav',NULL,'2025-01-08 10:52:55',NULL),(788,286,4752,'wav',NULL,'2025-01-08 10:56:21',NULL),(789,286,324,'wav',NULL,'2025-01-08 20:09:21',NULL),(790,377,5469,'wav',NULL,'2025-01-09 12:22:29',NULL),(791,377,9396,'wav',NULL,'2025-01-09 12:24:26',NULL),(792,377,10178,'wav',NULL,'2025-01-09 12:25:27',NULL),(793,377,10234,'wav',NULL,'2025-01-09 12:26:20',NULL),(794,377,1216,'wav',NULL,'2025-01-09 12:26:53',NULL),(795,377,1232,'wav',NULL,'2025-01-09 12:27:48',NULL),(796,377,4941,'wav',NULL,'2025-01-09 12:28:58',NULL),(797,377,5411,'wav',NULL,'2025-01-09 12:29:22',NULL),(798,377,5476,'wav',NULL,'2025-01-09 12:30:31',NULL),(799,377,10177,'wav',NULL,'2025-01-09 12:33:44',NULL),(800,377,1148,'wav',NULL,'2025-01-09 12:36:27',NULL),(801,377,638,'wav',NULL,'2025-01-09 12:40:20',NULL),(802,377,4466,'wav',NULL,'2025-01-09 12:42:21',NULL),(803,377,518,'wav',NULL,'2025-01-14 17:01:43',NULL),(804,377,472,'wav',NULL,'2025-01-14 17:19:30',NULL),(805,377,2859,'wav',NULL,'2025-01-14 17:21:45',NULL),(806,377,4598,'wav',NULL,'2025-01-14 17:23:20',NULL),(807,377,4411,'wav',NULL,'2025-01-14 17:32:15',NULL),(808,377,7783,'wav',NULL,'2025-01-14 17:33:19',NULL),(809,377,7790,'wav',NULL,'2025-01-14 17:33:34',NULL),(810,377,7808,'wav',NULL,'2025-01-14 17:34:09',NULL),(811,377,5415,'wav',NULL,'2025-01-14 17:35:03',NULL),(812,286,1398,'wav',NULL,'2025-01-15 17:08:30',NULL),(813,286,740,'wav',NULL,'2025-01-15 17:10:52',NULL),(814,286,3326,'wav',NULL,'2025-01-15 17:11:37',NULL),(815,286,8379,'wav',NULL,'2025-01-15 17:12:28',NULL),(816,286,7697,'wav',NULL,'2025-01-15 17:14:16',NULL),(817,286,1126,'wav',NULL,'2025-01-15 17:15:23',NULL),(818,286,10004,'wav',NULL,'2025-01-15 18:06:32',NULL),(819,286,10559,'wav',NULL,'2025-01-15 18:07:47',NULL),(820,286,10059,'wav',NULL,'2025-01-15 18:38:07',NULL),(821,286,2410,'wav',NULL,'2025-01-15 18:52:30',NULL),(822,286,6314,'wav',NULL,'2025-01-15 18:57:07',NULL),(823,286,822,'wav',NULL,'2025-01-17 20:10:26',NULL),(824,286,479,'wav',NULL,'2025-01-21 16:37:16',NULL),(825,328,1841,'wav',NULL,'2025-01-27 12:24:00',NULL),(826,328,310,'wav',NULL,'2025-01-27 12:24:20',NULL),(827,328,1841,'wav',NULL,'2025-01-27 12:26:20',NULL),(828,328,1337,'wav',NULL,'2025-01-27 12:27:57',NULL),(829,328,647,'wav',NULL,'2025-01-27 12:28:35',NULL),(830,328,692,'wav',NULL,'2025-01-27 12:29:11',NULL),(831,328,706,'wav',NULL,'2025-01-27 12:29:57',NULL),(832,328,1127,'wav',NULL,'2025-01-27 12:31:21',NULL),(833,328,377,'wav',NULL,'2025-01-27 12:37:22',NULL),(834,377,8669,'wav',NULL,'2025-01-28 09:22:13',NULL),(835,377,8668,'wav',NULL,'2025-01-28 09:24:15',NULL),(836,377,9358,'wav',NULL,'2025-01-28 09:28:25',NULL),(837,377,8670,'wav',NULL,'2025-01-28 09:29:37',NULL),(838,377,8671,'wav',NULL,'2025-01-28 09:30:37',NULL),(839,286,1253,'wav',NULL,'2025-01-29 14:25:08',NULL),(840,286,2713,'wav',NULL,'2025-01-29 14:29:35',NULL),(841,286,3505,'wav',NULL,'2025-01-29 14:30:46',NULL),(842,377,5361,'wav',NULL,'2025-01-29 17:00:14',NULL),(843,377,10283,'wav',NULL,'2025-01-29 17:01:17',NULL),(844,289,507,'wav',NULL,'2025-01-31 15:26:43',NULL),(845,289,7369,'wav',NULL,'2025-01-31 15:27:26',NULL),(846,289,3618,'wav',NULL,'2025-01-31 15:27:42',NULL),(847,289,10794,'wav',NULL,'2025-01-31 15:28:30',NULL),(848,289,8973,'wav',NULL,'2025-01-31 15:28:58',NULL),(849,289,10794,'wav',NULL,'2025-02-03 08:44:09',NULL),(850,289,502,'wav',NULL,'2025-02-03 13:48:51',NULL),(851,289,6505,'wav',NULL,'2025-02-03 13:50:06',NULL),(852,289,512,'wav',NULL,'2025-02-03 13:50:50',NULL),(853,289,3313,'wav',NULL,'2025-02-03 13:51:22',NULL),(854,289,3580,'wav',NULL,'2025-02-03 13:52:22',NULL),(855,289,5602,'wav',NULL,'2025-02-03 13:52:38',NULL),(856,289,8442,'wav',NULL,'2025-02-03 13:53:36',NULL),(857,289,9960,'wav',NULL,'2025-02-03 13:53:51',NULL),(858,289,9928,'wav',NULL,'2025-02-03 13:54:06',NULL),(859,289,10635,'wav',NULL,'2025-02-03 13:54:23',NULL),(860,289,4519,'wav',NULL,'2025-02-03 13:55:07',NULL),(861,289,1884,'wav',NULL,'2025-02-03 13:56:23',NULL),(862,289,2298,'wav',NULL,'2025-02-03 13:57:01',NULL),(863,289,9936,'wav',NULL,'2025-02-03 13:57:26',NULL),(864,289,5622,'wav',NULL,'2025-02-03 13:57:53',NULL),(865,289,10712,'wav',NULL,'2025-02-03 13:58:00',NULL),(866,289,5598,'wav',NULL,'2025-02-03 13:59:04',NULL),(867,289,6496,'wav',NULL,'2025-02-03 13:59:37',NULL),(868,289,8508,'wav',NULL,'2025-02-03 14:00:05',NULL),(869,289,2603,'wav',NULL,'2025-02-03 14:00:25',NULL),(870,289,8437,'wav',NULL,'2025-02-03 14:01:10',NULL),(871,289,6499,'wav',NULL,'2025-02-03 14:19:51',NULL),(872,289,7380,'wav',NULL,'2025-02-03 14:21:16',NULL),(873,331,10370,'wav',NULL,'2025-02-04 09:31:09',NULL),(874,289,4984,'wav',NULL,'2025-02-04 09:33:30',NULL),(875,289,7630,'wav',NULL,'2025-02-04 09:34:38',NULL),(876,331,316,'wav',NULL,'2025-02-04 10:40:34',NULL),(877,324,1845,'wav',NULL,'2025-02-04 13:42:58',NULL),(878,286,706,'wav',NULL,'2025-02-05 09:09:38',NULL),(879,286,270,'wav',NULL,'2025-02-05 09:10:53',NULL),(880,286,3288,'wav',NULL,'2025-02-05 09:18:13',NULL),(881,286,4449,'wav',NULL,'2025-02-05 10:20:21',NULL),(882,286,10240,'wav',NULL,'2025-02-05 12:29:11',NULL),(883,286,7727,'wav',NULL,'2025-02-05 14:30:09',NULL),(884,286,6202,'wav',NULL,'2025-02-05 14:32:33',NULL),(885,314,4942,'wav',NULL,'2025-02-07 20:06:20',NULL),(886,314,9405,'wav',NULL,'2025-02-07 20:07:19',NULL),(887,324,270,'wav',NULL,'2025-02-10 12:00:25',NULL),(888,286,10618,'wav',NULL,'2025-02-12 13:49:09',NULL),(889,286,6970,'wav',NULL,'2025-02-12 13:50:02',NULL),(890,286,9950,'wav',NULL,'2025-02-12 13:51:34',NULL),(891,286,10437,'wav',NULL,'2025-02-12 14:59:57',NULL),(892,286,6814,'wav',NULL,'2025-02-12 15:00:26',NULL),(893,328,2248,'wav',NULL,'2025-02-16 18:43:07',NULL),(894,328,335,'wav',NULL,'2025-02-16 18:44:40',NULL),(895,328,1841,'wav',NULL,'2025-02-16 18:45:52',NULL),(896,328,1841,'wav',NULL,'2025-02-16 18:47:21',NULL),(897,323,4415,'wav',NULL,'2025-02-18 16:22:35',NULL),(898,244,1166,'wav',NULL,'2025-02-19 14:40:45',NULL),(899,244,1212,'wav',NULL,'2025-02-19 14:43:37',NULL),(900,244,1699,'wav',NULL,'2025-02-19 14:44:00',NULL),(901,244,3160,'wav',NULL,'2025-02-19 14:45:01',NULL),(902,244,515,'wav',NULL,'2025-02-19 14:58:58',NULL),(903,286,7372,'wav',NULL,'2025-02-25 14:14:18',NULL),(904,286,787,'wav',NULL,'2025-02-25 15:48:43',NULL),(905,244,4576,'wav',NULL,'2025-02-27 14:31:30',NULL),(906,286,8917,'wav',NULL,'2025-03-05 17:24:34',NULL),(907,286,2534,'wav',NULL,'2025-03-06 10:22:15',NULL),(908,286,4710,'wav',NULL,'2025-03-06 10:23:44',NULL),(909,286,1826,'wav',NULL,'2025-03-26 16:47:18',NULL),(910,286,2666,'wav',NULL,'2025-03-26 16:49:57',NULL),(911,286,6002,'wav',NULL,'2025-03-26 16:56:37',NULL),(912,286,6685,'wav',NULL,'2025-03-26 18:39:15',NULL),(913,286,693,'wav',NULL,'2025-03-26 19:10:57',NULL),(914,286,817,'wav',NULL,'2025-03-26 19:30:31',NULL),(915,286,931,'wav',NULL,'2025-03-26 19:32:33',NULL),(916,289,10051,'wav',NULL,'2025-03-28 13:01:22',NULL),(917,289,9575,'wav',NULL,'2025-03-28 13:02:18',NULL),(918,289,9947,'wav',NULL,'2025-03-28 13:02:42',NULL),(919,286,9053,'wav',NULL,'2025-03-31 19:34:22',NULL),(920,286,10172,'wav',NULL,'2025-03-31 19:35:00',NULL),(921,286,863,'wav',NULL,'2025-04-01 19:18:06',NULL),(922,377,10614,'wav',NULL,'2025-04-02 08:53:22',NULL),(923,377,9510,'wav',NULL,'2025-04-02 08:53:37',NULL),(924,286,2640,'wav',NULL,'2025-04-09 18:13:27',NULL),(925,286,899,'wav',NULL,'2025-04-09 18:17:25',NULL),(926,286,4503,'wav',NULL,'2025-04-10 07:13:13',NULL),(927,286,7821,'wav',NULL,'2025-04-24 06:30:19',NULL),(928,286,1835,'wav',NULL,'2025-04-24 06:31:40',NULL),(929,286,9098,'wav',NULL,'2025-04-24 06:36:33',NULL),(930,286,5606,'wav',NULL,'2025-04-24 06:36:58',NULL),(931,286,1228,'wav',NULL,'2025-04-24 08:52:28',NULL),(932,286,4409,'wav',NULL,'2025-04-29 15:26:56',NULL),(933,286,7872,'wav',NULL,'2025-04-30 09:50:54',NULL),(934,286,5277,'wav',NULL,'2025-04-30 11:08:46',NULL),(935,286,2393,'wav',NULL,'2025-04-30 13:57:49',NULL),(936,286,3864,'wav',NULL,'2025-04-30 14:02:03',NULL),(937,286,9376,'wav',NULL,'2025-04-30 15:23:09',NULL),(938,286,9914,'wav',NULL,'2025-05-06 08:58:14',NULL),(939,286,9852,'wav',NULL,'2025-05-06 09:00:57',NULL),(940,286,2670,'wav',NULL,'2025-05-07 18:07:45',NULL),(941,286,897,'wav',NULL,'2025-05-07 18:08:52',NULL),(942,286,799,'wav',NULL,'2025-05-09 13:08:32',NULL),(943,286,5060,'wav',NULL,'2025-05-13 09:26:13',NULL),(944,286,7432,'wav',NULL,'2025-05-13 11:57:08',NULL),(945,286,10165,'wav',NULL,'2025-05-13 11:57:41',NULL),(946,286,7710,'wav',NULL,'2025-05-13 11:58:15',NULL),(947,286,2664,'wav',NULL,'2025-05-14 11:32:36',NULL),(948,286,10316,'wav',NULL,'2025-05-14 12:35:16',NULL),(949,286,10180,'wav',NULL,'2025-05-14 15:11:25',NULL),(950,286,2726,'wav',NULL,'2025-05-20 15:54:39',NULL),(951,286,9731,'wav',NULL,'2025-05-21 07:21:31',NULL),(952,286,2078,'wav',NULL,'2025-05-21 07:25:08',NULL),(953,328,8418,'wav',NULL,'2025-05-21 14:57:40',NULL),(954,286,10232,'wav',NULL,'2025-05-21 15:14:12',NULL),(955,286,4438,'wav',NULL,'2025-05-21 15:29:07',NULL),(956,323,9677,'wav',NULL,'2025-05-21 15:31:55',NULL),(957,323,9679,'wav',NULL,'2025-05-21 15:32:08',NULL),(958,323,5626,'wav',NULL,'2025-05-21 15:32:54',NULL),(959,323,2825,'wav',NULL,'2025-05-21 16:04:59',NULL),(960,286,8060,'wav',NULL,'2025-05-21 16:08:27',NULL),(961,286,2685,'wav',NULL,'2025-05-28 06:41:23',NULL),(962,286,8512,'wav',NULL,'2025-05-28 15:21:28',NULL),(963,286,2729,'wav',NULL,'2025-05-28 16:45:10',NULL),(964,286,9350,'wav',NULL,'2025-05-29 10:53:24',NULL),(965,286,2538,'wav',NULL,'2025-06-04 10:19:19',NULL),(966,286,3613,'wav',NULL,'2025-06-04 10:41:57',NULL),(967,328,1208,'wav',NULL,'2025-06-10 07:47:39',NULL),(968,328,1226,'wav',NULL,'2025-06-10 07:48:36',NULL),(969,328,308,'wav',NULL,'2025-06-10 07:54:52',NULL),(970,328,1835,'wav',NULL,'2025-06-10 07:56:52',NULL),(971,328,403,'wav',NULL,'2025-06-10 07:57:11',NULL),(972,328,580,'wav',NULL,'2025-06-10 07:58:09',NULL),(973,328,581,'wav',NULL,'2025-06-10 08:02:34',NULL),(974,286,707,'wav',NULL,'2025-06-11 12:23:11',NULL),(975,286,834,'wav',NULL,'2025-06-17 15:47:16',NULL),(976,323,8269,'wav',NULL,'2025-06-18 08:04:20',NULL),(977,323,4400,'wav',NULL,'2025-06-18 08:11:08',NULL),(978,328,2630,'wav',NULL,'2025-06-18 08:39:35',NULL),(979,286,10614,'wav',NULL,'2025-06-25 08:10:24',NULL),(980,286,3524,'wav',NULL,'2025-06-25 17:11:47',NULL),(981,286,3250,'wav',NULL,'2025-06-25 19:28:02',NULL),(982,286,4204,'wav',NULL,'2025-06-26 09:17:05',NULL),(983,286,2650,'wav',NULL,'2025-06-26 09:19:17',NULL),(984,244,8423,'wav',NULL,'2025-07-05 14:50:00',NULL),(985,377,4446,'wav',NULL,'2025-07-15 17:07:53',NULL),(986,377,4447,'wav',NULL,'2025-07-15 17:08:13',NULL),(987,377,3323,'wav',NULL,'2025-07-15 17:10:43',NULL),(988,377,1187,'wav',NULL,'2025-07-15 17:13:56',NULL),(989,377,456,'wav',NULL,'2025-07-15 17:14:41',NULL),(990,377,494,'wav',NULL,'2025-07-15 17:15:06',NULL),(991,377,864,'wav',NULL,'2025-07-15 17:15:37',NULL),(992,377,1249,'wav',NULL,'2025-07-15 17:16:03',NULL),(993,377,1268,'wav',NULL,'2025-07-15 17:16:28',NULL),(994,377,1660,'wav',NULL,'2025-07-15 17:16:55',NULL),(995,290,7079,'wav',NULL,'2025-07-23 09:13:54',NULL),(996,290,5790,'wav',NULL,'2025-07-23 13:38:48',NULL),(997,290,509,'wav',NULL,'2025-07-23 15:48:43',NULL),(998,290,1700,'wav',NULL,'2025-07-24 12:48:59',NULL),(999,244,8188,'wav',NULL,'2025-07-25 14:56:51',NULL),(1000,377,2192,'wav',NULL,'2025-08-12 09:37:02',NULL),(1001,377,6564,'wav',NULL,'2025-08-26 10:14:13',NULL),(1002,377,6566,'wav',NULL,'2025-08-26 10:15:15',NULL),(1003,377,10860,'wav',NULL,'2025-08-28 13:25:06',NULL),(1004,286,411,'wav',NULL,'2025-09-03 07:23:39',NULL),(1005,286,651,'wav',NULL,'2025-09-03 07:26:39',NULL),(1006,286,302,'wav',NULL,'2025-09-03 07:27:23',NULL),(1007,286,479,'wav',NULL,'2025-09-03 07:33:35',NULL),(1008,286,3054,'wav',NULL,'2025-09-03 07:38:04',NULL),(1009,286,5722,'wav',NULL,'2025-09-03 07:49:54',NULL),(1010,286,5746,'wav',NULL,'2025-09-03 07:51:46',NULL),(1011,286,2387,'wav',NULL,'2025-09-03 09:07:26',NULL),(1012,286,2541,'wav',NULL,'2025-09-03 12:14:55',NULL),(1013,286,1296,'wav',NULL,'2025-09-10 09:37:22',NULL),(1014,286,10181,'wav',NULL,'2025-09-10 09:40:33',NULL),(1015,286,769,'wav',NULL,'2025-09-10 10:01:20',NULL),(1016,286,270,'wav',NULL,'2025-09-10 16:20:05',NULL),(1017,286,2578,'wav',NULL,'2025-09-17 15:34:22',NULL),(1018,286,9067,'wav',NULL,'2025-09-17 17:49:29',NULL),(1019,286,5675,'wav',NULL,'2025-09-18 09:34:20',NULL),(1020,286,10158,'wav',NULL,'2025-09-23 11:24:21',NULL),(1021,286,9304,'wav',NULL,'2025-09-23 11:27:42',NULL),(1022,286,2206,'wav',NULL,'2025-09-23 11:49:35',NULL),(1023,286,7664,'wav',NULL,'2025-09-24 06:42:41',NULL),(1024,286,10232,'wav',NULL,'2025-09-24 06:44:56',NULL),(1025,286,6718,'wav',NULL,'2025-09-24 07:05:50',NULL),(1026,377,5371,'wav',NULL,'2025-09-24 09:16:16',NULL),(1027,377,5389,'wav',NULL,'2025-09-24 09:18:26',NULL),(1028,286,7162,'wav',NULL,'2025-09-24 12:59:50',NULL),(1029,286,6252,'wav',NULL,'2025-09-25 07:42:21',NULL),(1030,286,4752,'wav',NULL,'2025-10-03 14:39:18',NULL),(1031,286,3985,'wav',NULL,'2025-10-08 13:51:20',NULL),(1032,286,3978,'wav',NULL,'2025-10-08 14:21:56',NULL),(1033,286,8889,'wav',NULL,'2025-10-08 14:26:00',NULL),(1034,377,8086,'wav',NULL,'2025-10-21 08:54:32',NULL),(1035,377,8620,'wav',NULL,'2025-10-21 08:58:00',NULL),(1036,377,2542,'wav',NULL,'2025-10-21 08:59:32',NULL),(1037,377,881,'wav',NULL,'2025-10-21 09:05:35',NULL),(1038,377,8661,'wav',NULL,'2025-10-21 09:11:31',NULL),(1039,377,4636,'wav',NULL,'2025-10-21 09:11:53',NULL),(1040,377,8662,'wav',NULL,'2025-10-21 09:12:51',NULL),(1041,377,6472,'wav',NULL,'2025-10-21 09:15:09',NULL),(1042,377,6472,'wav',NULL,'2025-10-21 09:15:40',NULL),(1043,377,516,'wav',NULL,'2025-10-21 09:18:02',NULL),(1044,286,10288,'wav',NULL,'2025-10-22 13:36:50',NULL),(1045,286,8346,'wav',NULL,'2025-10-22 13:37:44',NULL),(1046,286,10338,'wav',NULL,'2025-10-22 13:47:35',NULL),(1047,286,7017,'wav',NULL,'2025-10-22 13:50:38',NULL),(1048,286,6330,'wav',NULL,'2025-10-22 13:51:40',NULL),(1049,286,8128,'wav',NULL,'2025-10-29 17:29:07',NULL),(1050,286,9097,'wav',NULL,'2025-10-29 17:32:59',NULL),(1051,286,2307,'wav',NULL,'2025-10-29 19:57:30',NULL),(1052,286,4683,'wav',NULL,'2025-10-29 20:50:39',NULL),(1053,286,4697,'wav',NULL,'2025-10-30 08:54:23',NULL),(1054,286,7456,'wav',NULL,'2025-10-30 09:19:35',NULL),(1055,244,895,'wav',NULL,'2025-11-03 14:02:04',NULL),(1056,244,895,'wav',NULL,'2025-11-03 14:03:19',NULL),(1057,286,9360,'wav',NULL,'2025-11-12 14:43:22',NULL),(1058,286,4670,'wav',NULL,'2025-11-12 14:45:29',NULL),(1059,286,3858,'wav',NULL,'2025-11-12 14:56:57',NULL),(1060,286,1075,'wav',NULL,'2025-11-12 16:49:19',NULL),(1061,286,5367,'wav',NULL,'2025-11-13 10:44:43',NULL),(1062,331,3615,'wav',NULL,'2025-11-18 15:37:44',NULL),(1063,286,324,'wav',NULL,'2025-11-19 17:30:07',NULL),(1064,286,2347,'wav',NULL,'2025-11-19 17:37:18',NULL),(1065,286,313,'wav',NULL,'2025-11-19 18:04:34',NULL),(1066,286,6485,'wav',NULL,'2025-11-19 18:06:19',NULL),(1067,286,1074,'wav',NULL,'2025-11-19 19:24:57',NULL),(1068,286,1340,'wav',NULL,'2025-11-25 17:38:27',NULL),(1069,286,9490,'wav',NULL,'2025-11-25 19:16:07',NULL),(1070,286,10357,'wav',NULL,'2025-11-25 19:18:17',NULL),(1071,286,7392,'wav',NULL,'2025-11-25 19:19:14',NULL),(1072,286,2143,'wav',NULL,'2025-11-26 15:16:33',NULL),(1073,318,2475,'wav',NULL,'2025-11-28 08:51:28',NULL),(1074,286,3971,'wav',NULL,'2025-12-02 20:41:13',NULL),(1075,286,4946,'wav',NULL,'2025-12-02 20:43:07',NULL),(1076,286,768,'wav',NULL,'2025-12-03 08:40:27',NULL),(1077,286,263,'wav',NULL,'2025-12-03 08:42:06',NULL),(1078,286,9707,'wav',NULL,'2025-12-03 17:11:03',NULL),(1079,286,108,'wav',NULL,'2025-12-03 17:16:47',NULL),(1080,286,2931,'wav',NULL,'2025-12-10 16:29:18',NULL),(1081,286,287,'wav',NULL,'2025-12-10 16:31:07',NULL),(1082,286,2462,'wav',NULL,'2025-12-10 16:49:42',NULL),(1083,286,10225,'wav',NULL,'2025-12-10 16:51:13',NULL),(1084,286,7795,'wav',NULL,'2025-12-18 10:24:18',NULL),(1085,286,6198,'wav',NULL,'2026-01-07 21:26:32',NULL),(1086,286,8379,'wav',NULL,'2026-01-07 22:15:09',NULL),(1087,290,7334,'wav',NULL,'2026-01-11 21:47:59',NULL),(1088,290,8276,'wav',NULL,'2026-01-11 21:49:02',NULL),(1089,290,9414,'wav',NULL,'2026-01-11 21:49:21',NULL),(1090,290,9390,'wav',NULL,'2026-01-11 21:49:45',NULL),(1091,290,8166,'wav',NULL,'2026-01-11 21:50:04',NULL),(1092,290,10724,'wav',NULL,'2026-01-11 21:50:29',NULL),(1093,290,8318,'wav',NULL,'2026-01-11 21:50:58',NULL),(1094,290,8594,'wav',NULL,'2026-01-11 22:09:51',NULL),(1095,290,9505,'wav',NULL,'2026-01-11 22:10:26',NULL),(1096,290,8557,'wav',NULL,'2026-01-11 22:10:48',NULL),(1097,290,9517,'wav',NULL,'2026-01-11 22:11:02',NULL),(1098,290,8565,'wav',NULL,'2026-01-11 22:11:33',NULL),(1099,290,8577,'wav',NULL,'2026-01-11 22:11:55',NULL),(1100,290,8570,'wav',NULL,'2026-01-11 22:12:09',NULL),(1101,290,8477,'wav',NULL,'2026-01-11 22:12:34',NULL),(1102,290,8583,'wav',NULL,'2026-01-11 22:13:19',NULL),(1103,290,8213,'wav',NULL,'2026-01-11 22:14:09',NULL),(1104,290,8568,'wav',NULL,'2026-01-11 22:15:19',NULL),(1105,290,346,'wav',NULL,'2026-01-11 22:16:31',NULL),(1106,290,8578,'wav',NULL,'2026-01-11 22:16:45',NULL),(1107,286,5974,'wav',NULL,'2026-01-13 15:06:49',NULL),(1108,286,2257,'wav',NULL,'2026-01-14 09:31:39',NULL),(1109,286,10377,'wav',NULL,'2026-01-14 10:20:53',NULL),(1110,286,10372,'wav',NULL,'2026-01-14 10:22:21',NULL),(1111,286,2198,'wav',NULL,'2026-01-14 12:37:33',NULL),(1112,286,6216,'wav',NULL,'2026-01-14 13:13:54',NULL),(1113,286,5609,'wav',NULL,'2026-01-14 14:44:48',NULL),(1114,286,5613,'wav',NULL,'2026-01-14 16:10:11',NULL),(1115,290,9354,'wav',NULL,'2026-01-15 10:52:10',NULL),(1116,290,9361,'wav',NULL,'2026-01-15 11:03:00',NULL),(1117,290,8190,'wav',NULL,'2026-01-15 11:14:11',NULL),(1118,290,310,'wav',NULL,'2026-01-15 11:18:23',NULL),(1119,290,6477,'wav',NULL,'2026-01-15 11:19:22',NULL),(1120,290,8208,'wav',NULL,'2026-01-15 11:31:46',NULL),(1121,286,9377,'wav',NULL,'2026-01-20 15:36:07',NULL),(1122,286,406,'wav',NULL,'2026-01-20 15:43:53',NULL),(1123,286,1253,'wav',NULL,'2026-01-20 18:47:51',NULL),(1124,286,1272,'wav',NULL,'2026-01-20 18:49:50',NULL),(1125,286,8383,'wav',NULL,'2026-01-21 19:39:01',NULL),(1126,286,2626,'wav',NULL,'2026-01-28 10:26:03',NULL),(1127,286,4478,'wav',NULL,'2026-01-28 10:27:58',NULL),(1128,286,666,'wav',NULL,'2026-01-28 12:45:02',NULL),(1129,286,7362,'wav',NULL,'2026-01-28 13:08:53',NULL),(1130,286,5367,'wav',NULL,'2026-01-28 14:28:16',NULL),(1131,286,834,'wav',NULL,'2026-01-28 14:52:13',NULL),(1132,286,952,'wav',NULL,'2026-02-04 13:28:02',NULL),(1133,286,6753,'wav',NULL,'2026-02-04 18:41:44',NULL),(1134,286,6501,'wav',NULL,'2026-02-04 19:38:03',NULL),(1135,286,8310,'wav',NULL,'2026-02-18 09:24:15',NULL),(1136,286,2668,'wav',NULL,'2026-02-18 09:26:58',NULL),(1137,286,8993,'wav',NULL,'2026-02-18 09:29:44',NULL),(1138,286,1281,'wav',NULL,'2026-02-18 09:32:18',NULL),(1139,286,8173,'wav',NULL,'2026-02-18 09:38:25',NULL),(1140,286,1125,'wav',NULL,'2026-02-24 20:55:19',NULL),(1141,286,391,'wav',NULL,'2026-02-24 20:58:47',NULL),(1142,286,10298,'wav',NULL,'2026-02-25 13:20:54',NULL),(1143,286,692,'wav',NULL,'2026-02-25 19:41:12',NULL),(1144,286,6870,'wav',NULL,'2026-03-04 13:11:21',NULL),(1145,377,2072,'wav',NULL,'2026-03-04 14:34:09',NULL),(1146,377,5469,'wav',NULL,'2026-03-04 14:34:38',NULL),(1147,377,509,'wav',NULL,'2026-03-04 15:10:37',NULL),(1148,377,1335,'wav',NULL,'2026-03-04 15:11:25',NULL),(1149,377,1216,'wav',NULL,'2026-03-04 15:12:17',NULL),(1150,377,1295,'wav',NULL,'2026-03-04 15:12:56',NULL),(1151,377,4969,'wav',NULL,'2026-03-04 15:14:57',NULL),(1152,377,7318,'wav',NULL,'2026-03-04 15:16:23',NULL),(1153,286,8843,'wav',NULL,'2026-03-04 16:52:04',NULL),(1154,286,10256,'wav',NULL,'2026-03-17 12:08:10',NULL),(1155,286,10274,'wav',NULL,'2026-03-17 12:15:53',NULL),(1156,286,10329,'wav',NULL,'2026-03-17 12:16:52',NULL),(1157,286,1835,'wav',NULL,'2026-03-17 12:18:22',NULL),(1158,286,5475,'wav',NULL,'2026-03-25 08:49:33',NULL),(1159,286,10275,'wav',NULL,'2026-03-25 08:50:47',NULL),(1160,286,9067,'wav',NULL,'2026-03-25 10:40:24',NULL),(1161,286,2410,'wav',NULL,'2026-03-25 15:14:59',NULL),(1162,286,1558,'wav',NULL,'2026-03-31 16:46:03',NULL),(1163,286,5614,'wav',NULL,'2026-03-31 16:48:27',NULL),(1164,286,5771,'wav',NULL,'2026-04-01 12:08:55',NULL),(1165,286,7795,'wav',NULL,'2026-04-01 12:13:33',NULL),(1166,286,9570,'wav',NULL,'2026-04-01 12:45:06',NULL),(1167,286,10053,'wav',NULL,'2026-04-01 13:05:20',NULL),(1168,286,8218,'wav',NULL,'2026-04-01 13:43:34',NULL),(1169,286,10353,'wav',NULL,'2026-04-08 07:33:17',NULL),(1170,286,9485,'wav',NULL,'2026-04-08 07:34:42',NULL),(1171,286,10233,'wav',NULL,'2026-04-08 07:36:05',NULL),(1172,286,3864,'wav',NULL,'2026-04-15 17:10:03',NULL),(1173,286,5734,'wav',NULL,'2026-04-15 17:21:21',NULL),(1174,286,7872,'wav',NULL,'2026-04-15 18:05:18',NULL),(1175,286,4959,'wav',NULL,'2026-04-16 08:00:29',NULL),(1176,286,1684,'wav',NULL,'2026-04-16 08:02:39',NULL),(1177,286,2022,'wav',NULL,'2026-04-16 08:04:54',NULL),(1178,286,2018,'wav',NULL,'2026-04-16 08:09:07',NULL),(1179,286,1822,'wav',NULL,'2026-04-16 08:57:17',NULL),(1180,286,10040,'wav',NULL,'2026-04-16 09:44:45',NULL),(1181,286,5279,'wav',NULL,'2026-04-16 09:47:34',NULL),(1182,286,10198,'wav',NULL,'2026-04-22 06:55:28',NULL),(1183,286,10428,'wav',NULL,'2026-04-22 06:55:48',NULL),(1184,286,3548,'wav',NULL,'2026-04-22 06:56:24',NULL),(1185,286,6491,'wav',NULL,'2026-04-28 08:13:55',NULL),(1186,286,520,'wav',NULL,'2026-04-28 08:24:06',NULL),(1187,286,1691,'wav',NULL,'2026-04-28 08:28:00',NULL),(1188,286,6478,'wav',NULL,'2026-04-28 11:04:43',NULL),(1189,286,10225,'wav',NULL,'2026-04-28 11:16:24',NULL),(1190,286,7539,'wav',NULL,'2026-05-07 09:47:13',NULL),(1191,286,2865,'wav',NULL,'2026-05-13 07:29:35',NULL),(1192,286,2865,'wav',NULL,'2026-05-13 07:35:36',NULL),(1193,286,2867,'wav',NULL,'2026-05-13 07:52:43',NULL),(1194,286,7318,'wav',NULL,'2026-05-13 17:43:25',NULL),(1195,286,646,'wav',NULL,'2026-05-13 17:44:53',NULL),(1196,286,693,'wav',NULL,'2026-05-13 17:45:47',NULL),(1197,286,1292,'wav',NULL,'2026-05-19 12:30:03',NULL),(1198,286,478,'wav',NULL,'2026-05-19 13:31:44',NULL),(1199,286,6021,'wav',NULL,'2026-05-19 13:33:59',NULL),(1200,286,10603,'wav',NULL,'2026-05-19 13:34:33',NULL),(1201,286,10167,'wav',NULL,'2026-05-20 06:59:50',NULL),(1202,286,8534,'wav',NULL,'2026-05-20 07:00:27',NULL),(1203,286,10681,'wav',NULL,'2026-05-20 07:00:39',NULL),(1204,286,2732,'wav',NULL,'2026-05-20 07:07:34',NULL),(1205,286,8419,'wav',NULL,'2026-05-20 07:39:43',NULL),(1206,286,9801,'wav',NULL,'2026-05-26 13:02:31',NULL),(1207,286,9360,'wav',NULL,'2026-05-26 13:42:47',NULL),(1208,286,3589,'wav',NULL,'2026-05-26 15:10:11',NULL),(1209,286,7807,'wav',NULL,'2026-05-27 11:56:27',NULL),(1210,286,6231,'wav',NULL,'2026-05-27 12:02:25',NULL),(1211,286,7917,'wav',NULL,'2026-05-29 13:41:06',NULL),(1212,286,8833,'wav',NULL,'2026-06-17 08:27:24',NULL),(1213,286,2640,'wav',NULL,'2026-06-17 09:06:17',NULL),(1214,286,4358,'wav',NULL,'2026-06-17 13:08:01',NULL),(1215,286,6461,'wav',NULL,'2026-06-17 13:28:52',NULL),(1216,286,8503,'wav',NULL,'2026-06-17 13:54:58',NULL),(1217,286,2643,'wav',NULL,'2026-06-17 13:56:54',NULL); +/*!40000 ALTER TABLE `downloads` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `help_templates` +-- + +DROP TABLE IF EXISTS `help_templates`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `help_templates` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `uuid` varchar(255) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `html` longtext DEFAULT NULL, + `css` longtext NOT NULL, + `deleted_at` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `help_templates` +-- + +LOCK TABLES `help_templates` WRITE; +/*!40000 ALTER TABLE `help_templates` DISABLE KEYS */; +INSERT INTO `help_templates` VALUES (1,'a82bcf20-e334-11eb-b84c-413b9b4b1257','Welcome','
\n
\n

\n

\n
','body {\n margin: 0;\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.hero-image {\n background-image: url(\"https://library.pastellemusic.com/pastelle.svg\");\n background-color: #cccccc;\n height: 100vh;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n position: relative;\n}\n\n.hero-text {\n text-align: center;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: white;\n }',NULL,'2021-07-10 17:14:46','2024-02-26 16:09:20'),(2,'06789630-e335-11eb-b84c-413b9b4b1257','Welcome-guest','
\n
\n

\n

\n
','body {\n margin: 0;\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.hero-image {\n background-image: url(\"https://library.pastellemusic.com/pastelle.svg\");\n background-color: #cccccc;\n height: 100vh;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n position: relative;\n}\n\n.hero-text {\n text-align: center;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: white;\n }',NULL,'2021-07-11 05:17:24','2024-02-26 17:13:24'),(3,'29ee5870-e335-11eb-b84c-413b9b4b1257','Welcome-prj-novideo','
Welcome
no video selected
','* { box-sizing: border-box; } body {margin: 0;}.row{display:flex;justify-content:flex-start;align-items:stretch;flex-wrap:nowrap;padding:10px;}.cell{min-height:75px;flex-grow:1;flex-basis:100%;}#i5yg{padding:10px;font-family:Verdana, Geneva, sans-serif;font-size:14px;text-align:center;}@media (max-width: 768px){.row{flex-wrap:wrap;}}',NULL,'2021-07-12 15:18:24','2021-07-12 17:19:09'); +/*!40000 ALTER TABLE `help_templates` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `knex_migrations` +-- + +DROP TABLE IF EXISTS `knex_migrations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `knex_migrations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `batch` int(11) DEFAULT NULL, + `migration_time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `knex_migrations` +-- + +LOCK TABLES `knex_migrations` WRITE; +/*!40000 ALTER TABLE `knex_migrations` DISABLE KEYS */; +INSERT INTO `knex_migrations` VALUES (1,'2018_04_13_1114_users.js',1,'2018-05-11 13:17:45'),(2,'2018_05_31_0001_templates.js',2,'2018-05-31 14:52:55'); +/*!40000 ALTER TABLE `knex_migrations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `knex_migrations_lock` +-- + +DROP TABLE IF EXISTS `knex_migrations_lock`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `knex_migrations_lock` ( + `is_locked` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `knex_migrations_lock` +-- + +LOCK TABLES `knex_migrations_lock` WRITE; +/*!40000 ALTER TABLE `knex_migrations_lock` DISABLE KEYS */; +INSERT INTO `knex_migrations_lock` VALUES (0); +/*!40000 ALTER TABLE `knex_migrations_lock` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `licenses` +-- + +DROP TABLE IF EXISTS `licenses`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `licenses` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `uuid` varchar(100) DEFAULT NULL, + `user_id` int(11) DEFAULT NULL, + `affiliate_id` varchar(64) DEFAULT NULL, + `bill_nr` int(11) NOT NULL, + `data` text DEFAULT NULL, + `text` text DEFAULT NULL, + `pdf` mediumblob NOT NULL, + `seconds` double DEFAULT 0, + `single` tinyint(1) DEFAULT NULL, + `consume` tinyint(1) DEFAULT 0, + `price` double DEFAULT NULL, + `payed` int(11) DEFAULT 0, + `created_at` datetime DEFAULT NULL, + `currency` varchar(100) DEFAULT NULL, + `discount` decimal(10,2) DEFAULT NULL, + `code` varchar(100) DEFAULT NULL, + `master` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; diff --git a/profiles/avatars.go b/profiles/avatars.go new file mode 100644 index 0000000..1464498 --- /dev/null +++ b/profiles/avatars.go @@ -0,0 +1,54 @@ +package profiles + +import ( + "encoding/json" + "io" + "net/http" + + "encore.dev/beta/errs" + "encore.dev/storage/objects" + "encore.dev/types/uuid" +) + +// avatars stores user avatar images. It is public so the returned URLs can be +// rendered directly by browsers without authentication. +var avatars = objects.NewBucket("avatars", objects.BucketConfig{ + Public: true, +}) + +type uploadAvatarResponse struct { + URL string `json:"url"` +} + +// UploadAvatar stores the request body as a new avatar image and returns its +// public URL. The caller is expected to persist the URL via the profile +// endpoints. Each upload gets a fresh key, so re-uploading never overwrites. +// +//encore:api auth raw method=POST path=/profiles/avatar +func UploadAvatar(w http.ResponseWriter, req *http.Request) { + key, err := uuid.NewV4() + if err != nil { + errs.HTTPError(w, errs.WrapCode(err, errs.Internal, "failed to generate avatar key")) + return + } + + contentType := req.Header.Get("Content-Type") + if contentType == "" { + contentType = "application/octet-stream" + } + + writer := avatars.Upload(req.Context(), key.String(), + objects.WithUploadAttrs(objects.UploadAttrs{ContentType: contentType})) + if _, err := io.Copy(writer, req.Body); err != nil { + writer.Abort(err) + errs.HTTPError(w, errs.WrapCode(err, errs.Internal, "failed to upload avatar")) + return + } + if err := writer.Close(); err != nil { + errs.HTTPError(w, errs.WrapCode(err, errs.Internal, "failed to store avatar")) + return + } + + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(uploadAvatarResponse{URL: avatars.PublicURL(key.String()).String()}) +} diff --git a/profiles/login.go b/profiles/login.go new file mode 100644 index 0000000..045b3fb --- /dev/null +++ b/profiles/login.go @@ -0,0 +1,132 @@ +package profiles + +import ( + "context" + "errors" + "sync" + "time" + + "encore.app/auth" + "encore.dev/beta/errs" + "encore.dev/pubsub" + "encore.dev/storage/sqldb" + "encore.dev/types/uuid" +) + +const loginTimeout = 10 * time.Second + +type LoginParams struct { + UserEmail string `json:"user_email"` + Password string `json:"password" encore:"sensitive"` +} + +type LoginResponse struct { + Token uuid.UUID `json:"token"` + ExpiresAt time.Time `json:"expires_at"` +} + +var loginRequests = pubsub.TopicRef[pubsub.Publisher[*auth.LoginRequested]](auth.LoginRequests) + +// Login is the public entry point for authenticating a user. It first +// resolves the given email to a user ID via the local profiles database. +// The actual credential check lives in the auth service; rather than calling +// it directly, this hands the request off over Pub/Sub (publishing to +// auth.LoginRequests) and waits for the matching auth.LoginCompleted reply +// on auth.LoginResults before responding to the caller. +// +// NOTE: the wait is implemented with an in-process registry keyed by request +// ID, so the instance that publishes the request must be the one that +// receives the reply. That holds for local development (a single instance) +// but not for a horizontally scaled deployment, which would need a shared +// mechanism instead (e.g. a results table polled with retry_until). +// +//encore:api public method=POST path=/auth/login +func Login(ctx context.Context, p *LoginParams) (*LoginResponse, error) { + var userID uuid.UUID + err := db.QueryRow(ctx, ` + SELECT user_id FROM user_profiles WHERE email = $1 + `, p.UserEmail).Scan(&userID) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.Unauthenticated, Message: "invalid credentials"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to look up user") + } + + requestID, err := uuid.NewV4() + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to generate request id") + } + + wait := loginWaiters.register(requestID) + defer loginWaiters.cancel(requestID) + + if _, err := loginRequests.Publish(ctx, &auth.LoginRequested{ + RequestID: requestID, + UserID: userID, + Password: p.Password, + }); err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to publish login request") + } + + select { + case result := <-wait: + if !result.OK { + return nil, &errs.Error{Code: errs.Unauthenticated, Message: "invalid credentials"} + } + return &LoginResponse{Token: result.Token, ExpiresAt: result.ExpiresAt}, nil + case <-time.After(loginTimeout): + return nil, &errs.Error{Code: errs.DeadlineExceeded, Message: "login timed out"} + case <-ctx.Done(): + return nil, ctx.Err() + } +} + +var _ = pubsub.NewSubscription( + auth.LoginResults, "deliver-to-waiting-login", + pubsub.SubscriptionConfig[*auth.LoginCompleted]{ + Handler: func(ctx context.Context, ev *auth.LoginCompleted) error { + loginWaiters.deliver(ev) + return nil + }, + }, +) + +// loginWaiters lets the synchronous Login handler above wait for the +// asynchronous LoginCompleted reply that matches its RequestID. +var loginWaiters = newWaiterRegistry() + +type waiterRegistry struct { + mu sync.Mutex + waiting map[uuid.UUID]chan *auth.LoginCompleted +} + +func newWaiterRegistry() *waiterRegistry { + return &waiterRegistry{waiting: make(map[uuid.UUID]chan *auth.LoginCompleted)} +} + +func (r *waiterRegistry) register(id uuid.UUID) <-chan *auth.LoginCompleted { + ch := make(chan *auth.LoginCompleted, 1) + r.mu.Lock() + r.waiting[id] = ch + r.mu.Unlock() + return ch +} + +func (r *waiterRegistry) cancel(id uuid.UUID) { + r.mu.Lock() + delete(r.waiting, id) + r.mu.Unlock() +} + +func (r *waiterRegistry) deliver(ev *auth.LoginCompleted) { + r.mu.Lock() + ch, ok := r.waiting[ev.RequestID] + if ok { + delete(r.waiting, ev.RequestID) + } + r.mu.Unlock() + if ok { + ch <- ev + } +} diff --git a/profiles/me.go b/profiles/me.go new file mode 100644 index 0000000..da9f54f --- /dev/null +++ b/profiles/me.go @@ -0,0 +1,13 @@ +package profiles + +import ( + "context" +) + +// Me returns the profile of the currently authenticated caller, or nil if +// the request is not authenticated. +// +//encore:api public method=GET path=/auth/me +func Me(ctx context.Context) (*Profile, error) { + return Get(ctx) +} diff --git a/profiles/migrations/1_create_user_profiles.up.sql b/profiles/migrations/1_create_user_profiles.up.sql new file mode 100644 index 0000000..88ad6f4 --- /dev/null +++ b/profiles/migrations/1_create_user_profiles.up.sql @@ -0,0 +1,8 @@ +CREATE TABLE user_profiles ( + user_id TEXT PRIMARY KEY, + display_name TEXT NOT NULL, + bio TEXT NOT NULL DEFAULT '', + avatar_url TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); diff --git a/profiles/migrations/2_user_id_uuid.up.sql b/profiles/migrations/2_user_id_uuid.up.sql new file mode 100644 index 0000000..2756ad7 --- /dev/null +++ b/profiles/migrations/2_user_id_uuid.up.sql @@ -0,0 +1,10 @@ +DROP TABLE user_profiles; + +CREATE TABLE user_profiles ( + user_id UUID PRIMARY KEY, + display_name TEXT NOT NULL, + bio TEXT NOT NULL DEFAULT '', + avatar_url TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); diff --git a/profiles/migrations/3_add_auth.up.sql b/profiles/migrations/3_add_auth.up.sql new file mode 100644 index 0000000..52f6b6f --- /dev/null +++ b/profiles/migrations/3_add_auth.up.sql @@ -0,0 +1,10 @@ +ALTER TABLE user_profiles ADD COLUMN password_hash TEXT NOT NULL DEFAULT ''; + +CREATE TABLE sessions ( + token UUID PRIMARY KEY, + user_id UUID NOT NULL REFERENCES user_profiles(user_id) ON DELETE CASCADE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + expires_at TIMESTAMPTZ NOT NULL +); + +CREATE INDEX sessions_user_id_idx ON sessions (user_id); diff --git a/profiles/migrations/4_drop_auth_tables.up.sql b/profiles/migrations/4_drop_auth_tables.up.sql new file mode 100644 index 0000000..e34e23c --- /dev/null +++ b/profiles/migrations/4_drop_auth_tables.up.sql @@ -0,0 +1,3 @@ +DROP TABLE sessions; + +ALTER TABLE user_profiles DROP COLUMN password_hash; diff --git a/profiles/migrations/5_add_email.up.sql b/profiles/migrations/5_add_email.up.sql new file mode 100644 index 0000000..4f51e91 --- /dev/null +++ b/profiles/migrations/5_add_email.up.sql @@ -0,0 +1,7 @@ +ALTER TABLE user_profiles ADD COLUMN email TEXT NOT NULL DEFAULT ''; + +-- Existing rows predate the email column; give each a unique placeholder +-- derived from its user ID so the uniqueness constraint below can apply. +UPDATE user_profiles SET email = user_id || '@example.invalid' WHERE email = ''; + +CREATE UNIQUE INDEX user_profiles_email_idx ON user_profiles (email); diff --git a/profiles/migrations/6_add_role.up.sql b/profiles/migrations/6_add_role.up.sql new file mode 100644 index 0000000..aeb1be0 --- /dev/null +++ b/profiles/migrations/6_add_role.up.sql @@ -0,0 +1 @@ +ALTER TABLE user_profiles ADD COLUMN role TEXT NOT NULL DEFAULT 'user'; diff --git a/profiles/migrations/7_add_status.up.sql b/profiles/migrations/7_add_status.up.sql new file mode 100644 index 0000000..70ffb83 --- /dev/null +++ b/profiles/migrations/7_add_status.up.sql @@ -0,0 +1 @@ +ALTER TABLE user_profiles ADD COLUMN status SMALLINT NOT NULL DEFAULT 0; diff --git a/profiles/migrations/8_artist_profile.up.sql b/profiles/migrations/8_artist_profile.up.sql new file mode 100644 index 0000000..ff7699c --- /dev/null +++ b/profiles/migrations/8_artist_profile.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE user_profiles DROP COLUMN bio; +ALTER TABLE user_profiles ADD COLUMN is_artist BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/profiles/migrations/9_personal_data.up.sql b/profiles/migrations/9_personal_data.up.sql new file mode 100644 index 0000000..d0cdeb1 --- /dev/null +++ b/profiles/migrations/9_personal_data.up.sql @@ -0,0 +1,10 @@ +CREATE TABLE personal_data ( + user_id UUID PRIMARY KEY REFERENCES user_profiles (user_id) ON DELETE CASCADE, + first_name TEXT NOT NULL DEFAULT '', + last_name TEXT NOT NULL DEFAULT '', + address TEXT NOT NULL DEFAULT '', + city TEXT NOT NULL DEFAULT '', + country TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); diff --git a/profiles/personal_data.go b/profiles/personal_data.go new file mode 100644 index 0000000..935bd82 --- /dev/null +++ b/profiles/personal_data.go @@ -0,0 +1,112 @@ +package profiles + +import ( + "context" + "errors" + "time" + + "encore.dev/beta/auth" + "encore.dev/beta/errs" + "encore.dev/storage/sqldb" + "encore.dev/types/uuid" + "github.com/jackc/pgx/v5/pgconn" +) + +// PersonalData holds the personal details linked one-to-one to a user profile. +type PersonalData struct { + UserID uuid.UUID `json:"user_id"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Address string `json:"address"` + City string `json:"city"` + Country string `json:"country"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// PersonalDataParams are the editable fields of a user's personal data. +type PersonalDataParams struct { + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Address string `json:"address"` + City string `json:"city"` + Country string `json:"country"` +} + +// GetPersonalData returns the authenticated user's own personal data. +// +//encore:api auth method=GET path=/profiles/personal-data +func GetPersonalData(ctx context.Context) (*PersonalData, error) { + userID, err := authedUserID() + if err != nil { + return nil, err + } + pd := PersonalData{UserID: userID} + err = db.QueryRow(ctx, ` + SELECT first_name, last_name, address, city, country, created_at, updated_at + FROM personal_data WHERE user_id = $1 + `, userID).Scan(&pd.FirstName, &pd.LastName, &pd.Address, &pd.City, &pd.Country, &pd.CreatedAt, &pd.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "personal data not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to fetch personal data") + } + return &pd, nil +} + +// UpsertPersonalData creates or replaces the authenticated user's own personal data. +// +//encore:api auth method=PUT path=/profiles/personal-data +func UpsertPersonalData(ctx context.Context, p *PersonalDataParams) (*PersonalData, error) { + userID, err := authedUserID() + if err != nil { + return nil, err + } + pd := PersonalData{ + UserID: userID, + FirstName: p.FirstName, + LastName: p.LastName, + Address: p.Address, + City: p.City, + Country: p.Country, + } + err = db.QueryRow(ctx, ` + INSERT INTO personal_data (user_id, first_name, last_name, address, city, country) + VALUES ($1, $2, $3, $4, $5, $6) + ON CONFLICT (user_id) DO UPDATE + SET first_name = EXCLUDED.first_name, + last_name = EXCLUDED.last_name, + address = EXCLUDED.address, + city = EXCLUDED.city, + country = EXCLUDED.country, + updated_at = NOW() + RETURNING created_at, updated_at + `, userID, p.FirstName, p.LastName, p.Address, p.City, p.Country).Scan(&pd.CreatedAt, &pd.UpdatedAt) + if isForeignKeyViolation(err) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to save personal data") + } + return &pd, nil +} + +// authedUserID returns the UUID of the authenticated caller. +func authedUserID() (uuid.UUID, error) { + uid, ok := auth.UserID() + if !ok { + return uuid.Nil, &errs.Error{Code: errs.Unauthenticated, Message: "authentication required"} + } + userID, err := uuid.FromString(string(uid)) + if err != nil { + return uuid.Nil, errs.WrapCode(err, errs.Internal, "invalid user id") + } + return userID, nil +} + +// isForeignKeyViolation reports whether err is a Postgres foreign key constraint violation. +func isForeignKeyViolation(err error) bool { + var pgErr *pgconn.PgError + return errors.As(err, &pgErr) && pgErr.Code == "23503" +} diff --git a/profiles/profiles.go b/profiles/profiles.go new file mode 100644 index 0000000..b7cb852 --- /dev/null +++ b/profiles/profiles.go @@ -0,0 +1,168 @@ +// Service profiles stores and serves user profile information. +package profiles + +import ( + "context" + "errors" + "time" + + authsvc "encore.app/auth" + "encore.dev/beta/auth" + "encore.dev/beta/errs" + "encore.dev/storage/sqldb" + "encore.dev/types/uuid" + "github.com/jackc/pgx/v5/pgconn" +) + +var db = sqldb.NewDatabase("profiles", sqldb.DatabaseConfig{ + Migrations: "./migrations", +}) + +type Profile struct { + UserID uuid.UUID `json:"user_id"` + Email string `json:"email"` + DisplayName string `json:"display_name"` + AvatarURL string `json:"avatar_url"` + IsArtist bool `json:"is_artist"` + Role string `json:"role"` + Status Status `json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type ProfileParams struct { + DisplayName string `json:"display_name"` + AvatarURL string `json:"avatar_url"` +} + +type RegisterParams struct { + Email string `json:"email"` + DisplayName string `json:"display_name"` + AvatarURL string `json:"avatar_url"` + Password string `json:"password" encore:"sensitive"` +} + +// Insert registers a new profile with a server-generated UUID v4, delegating +// credential setup to the auth service. +// +//encore:api public method=POST path=/profiles +func Insert(ctx context.Context, p *RegisterParams) (*Profile, error) { + userID, err := uuid.NewV4() + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to generate profile id") + } + profile := Profile{UserID: userID, Email: p.Email, DisplayName: p.DisplayName, AvatarURL: p.AvatarURL} + err = db.QueryRow(ctx, ` + INSERT INTO user_profiles (user_id, email, display_name, avatar_url) + VALUES ($1, $2, $3, $4) + RETURNING role, status, is_artist, created_at, updated_at + `, userID, p.Email, p.DisplayName, p.AvatarURL).Scan(&profile.Role, &profile.Status, &profile.IsArtist, &profile.CreatedAt, &profile.UpdatedAt) + if isUniqueViolation(err) { + return nil, &errs.Error{Code: errs.AlreadyExists, Message: "email already registered"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to create profile") + } + if err := authsvc.Register(ctx, &authsvc.RegisterParams{UserID: userID, Password: p.Password}); err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to register credentials") + } + return &profile, nil +} + +// Update replaces the data of the authenticated user's own profile. +// +//encore:api auth method=PUT path=/profiles +func Update(ctx context.Context, p *ProfileParams) (*Profile, error) { + uid, ok := auth.UserID() + if !ok { + return nil, &errs.Error{Code: errs.PermissionDenied, Message: "cannot act on another user's profile"} + } + userID, err := uuid.FromString(string(uid)) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "invalid user id") + } + if err := requireSelf(userID); err != nil { + return nil, err + } + profile := Profile{UserID: userID, DisplayName: p.DisplayName, AvatarURL: p.AvatarURL} + err = db.QueryRow(ctx, ` + UPDATE user_profiles + SET display_name = $2, avatar_url = $3, updated_at = NOW() + WHERE user_id = $1 + RETURNING email, role, status, is_artist, created_at, updated_at + `, userID, p.DisplayName, p.AvatarURL).Scan(&profile.Email, &profile.Role, &profile.Status, &profile.IsArtist, &profile.CreatedAt, &profile.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to update profile") + } + return &profile, nil +} + +// Get returns the profile for the given user. For the caller's own profile +// (including when not authenticated), see MyProfile. +// +//encore:api public method=GET path=/profiles/profile +func Get(ctx context.Context) (*Profile, error) { + uid, ok := auth.UserID() + if !ok { + return nil, nil + } + userID, err := uuid.FromString(string(uid)) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "invalid user id") + } + p := Profile{UserID: userID} + err = db.QueryRow(ctx, ` + SELECT email, display_name, avatar_url, role, status, is_artist, created_at, updated_at FROM user_profiles WHERE user_id = $1 + `, userID).Scan(&p.Email, &p.DisplayName, &p.AvatarURL, &p.Role, &p.Status, &p.IsArtist, &p.CreatedAt, &p.UpdatedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to fetch profile") + } + return &p, nil +} + +// Delete removes the authenticated user's own profile. +// +//encore:api auth method=DELETE path=/profiles +func Delete(ctx context.Context) error { + uid, ok := auth.UserID() + if !ok { + return &errs.Error{Code: errs.PermissionDenied, Message: "cannot act on another user's profile"} + } + userID, err := uuid.FromString(string(uid)) + if err != nil { + return errs.WrapCode(err, errs.Internal, "invalid user id") + } + if err := requireSelf(userID); err != nil { + return err + } + res, err := db.Exec(ctx, ` + DELETE FROM user_profiles WHERE user_id = $1 + `, userID) + if err != nil { + return errs.WrapCode(err, errs.Internal, "failed to delete profile") + } + if res.RowsAffected() == 0 { + return &errs.Error{Code: errs.NotFound, Message: "profile not found"} + } + return nil +} + +// requireSelf returns an error unless the authenticated caller is the user identified by userID. +func requireSelf(userID uuid.UUID) error { + if uid, ok := auth.UserID(); !ok || uid != auth.UID(userID.String()) { + return &errs.Error{Code: errs.PermissionDenied, Message: "cannot act on another user's profile"} + } + return nil +} + +// isUniqueViolation reports whether err is a Postgres unique constraint violation. +func isUniqueViolation(err error) bool { + var pgErr *pgconn.PgError + return errors.As(err, &pgErr) && pgErr.Code == "23505" +} diff --git a/profiles/status.go b/profiles/status.go new file mode 100644 index 0000000..d888bf8 --- /dev/null +++ b/profiles/status.go @@ -0,0 +1,38 @@ +package profiles + +type Status int + +const ( + StatusActive Status = iota + StatusInactive + StatusSuspended + StatusDeleted + StatusPending + StatusWaitingDeletion + StatusBanned +) + +// StatusOption describes a valid profile status for display in admin UIs. +type StatusOption struct { + Name string `json:"name"` + Value Status `json:"value"` + Updatable bool `json:"updatable"` +} + +// Statuses returns every valid profile status with a display name and its underlying value. +func Statuses() []StatusOption { + return []StatusOption{ + {Name: "Active", Value: StatusActive, Updatable: true}, + {Name: "Inactive", Value: StatusInactive, Updatable: true}, + {Name: "Suspended", Value: StatusSuspended, Updatable: true}, + {Name: "Deleted", Value: StatusDeleted, Updatable: false}, + {Name: "Pending", Value: StatusPending, Updatable: true}, + {Name: "Waiting deletion", Value: StatusWaitingDeletion, Updatable: false}, + {Name: "Banned", Value: StatusBanned, Updatable: true}, + } +} + +// IsValid reports whether s is one of the defined Status values. +func (s Status) IsValid() bool { + return s >= StatusActive && s <= StatusBanned +} diff --git a/registration/mails/welcome_html.tmpl b/registration/mails/welcome_html.tmpl new file mode 100644 index 0000000..75a52f3 --- /dev/null +++ b/registration/mails/welcome_html.tmpl @@ -0,0 +1,12 @@ + + + +

Hello {{.Name}},

+

Your account has been created successfully.

+

+ Confirm your email address by opening this link: +
+ {{.WelcomeURL}} +

+ + diff --git a/registration/mails/welcome_subject.tmpl b/registration/mails/welcome_subject.tmpl new file mode 100644 index 0000000..df18bf3 --- /dev/null +++ b/registration/mails/welcome_subject.tmpl @@ -0,0 +1 @@ +Welcome to Encore diff --git a/registration/mails/welcome_text.tmpl b/registration/mails/welcome_text.tmpl new file mode 100644 index 0000000..2133bff --- /dev/null +++ b/registration/mails/welcome_text.tmpl @@ -0,0 +1,6 @@ +Hello {{.Name}}, + +Your account has been created successfully. + +Confirm your email address by opening this link: +{{.WelcomeURL}} diff --git a/registration/migrations/1_create_welcome_tokens.up.sql b/registration/migrations/1_create_welcome_tokens.up.sql new file mode 100644 index 0000000..a3198fe --- /dev/null +++ b/registration/migrations/1_create_welcome_tokens.up.sql @@ -0,0 +1,11 @@ +CREATE TABLE welcome_tokens ( + token UUID PRIMARY KEY, + user_id UUID NOT NULL, + email TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + expires_at TIMESTAMPTZ NOT NULL, + used_at TIMESTAMPTZ +); + +CREATE INDEX welcome_tokens_user_id_idx ON welcome_tokens (user_id); +CREATE INDEX welcome_tokens_email_idx ON welcome_tokens (email); diff --git a/registration/registration.go b/registration/registration.go new file mode 100644 index 0000000..fe38881 --- /dev/null +++ b/registration/registration.go @@ -0,0 +1,259 @@ +// Service registration orchestrates new user registration. +package registration + +import ( + "bytes" + "context" + "embed" + "errors" + htmltemplate "html/template" + "net" + "net/mail" + "strings" + texttemplate "text/template" + "time" + + mailssvc "encore.app/mails" + profilessvc "encore.app/profiles" + "encore.dev/beta/errs" + "encore.dev/storage/sqldb" + "encore.dev/types/uuid" +) + +//go:embed mails/*.tmpl +var mailTemplates embed.FS + +var db = sqldb.NewDatabase("registration", sqldb.DatabaseConfig{ + Migrations: "./migrations", +}) + +var profilesDB = sqldb.Named("profiles") + +const ( + welcomeTokenTTL = 24 * time.Hour + frontendBaseURL = "http://localhost:9000/#" +) + +type RegisterParams struct { + Email string `json:"email"` + DisplayName string `json:"display_name"` + AvatarURL string `json:"avatar_url"` + Password string `json:"password" encore:"sensitive"` +} + +type RegisterResponse struct { + Profile *profilessvc.Profile `json:"profile"` +} + +type WelcomeResponse struct { + Email string `json:"email"` + Confirmed bool `json:"confirmed"` + UsedAt time.Time `json:"used_at"` +} + +type EmailAvailabilityResponse struct { + Email string `json:"email"` + Available bool `json:"available"` + MXValid bool `json:"mx_valid"` +} + +// CheckEmail reports whether an email can be used for a new registration. +// +//encore:api public method=GET path=/registration/email/:email +func CheckEmail(ctx context.Context, email string) (*EmailAvailabilityResponse, error) { + email = strings.TrimSpace(email) + if email == "" { + return nil, &errs.Error{Code: errs.InvalidArgument, Message: "email is required"} + } + parsed, err := mail.ParseAddress(email) + if err != nil { + return nil, &errs.Error{Code: errs.InvalidArgument, Message: "invalid email"} + } + email = parsed.Address + + domain, ok := emailDomain(email) + if !ok { + return nil, &errs.Error{Code: errs.InvalidArgument, Message: "invalid email domain"} + } + mxValid, err := hasValidMX(domain) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to check email domain") + } + + var exists bool + err = profilesDB.QueryRow(ctx, ` + SELECT EXISTS(SELECT 1 FROM user_profiles WHERE email = $1) + `, email).Scan(&exists) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to check email") + } + + return &EmailAvailabilityResponse{Email: email, Available: !exists, MXValid: mxValid}, nil +} + +// Register creates a new user and records the welcome transactional email. +// +//encore:api public method=POST path=/registration +func Register(ctx context.Context, p *RegisterParams) (*RegisterResponse, error) { + profile, err := profilessvc.Insert(ctx, &profilessvc.RegisterParams{ + Email: p.Email, + DisplayName: p.DisplayName, + AvatarURL: p.AvatarURL, + Password: p.Password, + }) + if err != nil { + return nil, err + } + + token, err := createWelcomeToken(ctx, profile) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to create welcome token") + } + + mail, err := welcomeMail(profile, token) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to render welcome email") + } + if _, err := mailssvc.SendTransactional(ctx, mail); err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to queue welcome email") + } + + return &RegisterResponse{Profile: profile}, nil +} + +// ConfirmWelcome validates the welcome email token. +// +//encore:api public method=POST path=/registration/welcome/:token +func ConfirmWelcome(ctx context.Context, token uuid.UUID) (*WelcomeResponse, error) { + var email string + var expiresAt time.Time + var usedAt *time.Time + err := db.QueryRow(ctx, ` + SELECT email, expires_at, used_at FROM welcome_tokens WHERE token = $1 + `, token).Scan(&email, &expiresAt, &usedAt) + if errors.Is(err, sqldb.ErrNoRows) { + return nil, &errs.Error{Code: errs.NotFound, Message: "welcome token not found"} + } + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to load welcome token") + } + if usedAt != nil { + return &WelcomeResponse{Email: email, Confirmed: true, UsedAt: *usedAt}, nil + } + if time.Now().After(expiresAt) { + return nil, &errs.Error{Code: errs.InvalidArgument, Message: "welcome token has expired"} + } + + var confirmedAt time.Time + err = db.QueryRow(ctx, ` + UPDATE welcome_tokens SET used_at = NOW() WHERE token = $1 + RETURNING used_at + `, token).Scan(&confirmedAt) + if err != nil { + return nil, errs.WrapCode(err, errs.Internal, "failed to confirm welcome token") + } + return &WelcomeResponse{Email: email, Confirmed: true, UsedAt: confirmedAt}, nil +} + +func createWelcomeToken(ctx context.Context, profile *profilessvc.Profile) (uuid.UUID, error) { + token, err := uuid.NewV4() + if err != nil { + return uuid.Nil, err + } + _, err = db.Exec(ctx, ` + INSERT INTO welcome_tokens (token, user_id, email, expires_at) + VALUES ($1, $2, $3, $4) + `, token, profile.UserID, profile.Email, time.Now().Add(welcomeTokenTTL)) + return token, err +} + +func emailDomain(email string) (string, bool) { + _, domain, ok := strings.Cut(email, "@") + domain = strings.TrimSpace(strings.TrimSuffix(domain, ".")) + return domain, ok && domain != "" +} + +func hasValidMX(domain string) (bool, error) { + records, err := net.LookupMX(domain) + if err != nil { + if dnsErr, ok := err.(*net.DNSError); ok && dnsErr.IsNotFound { + return false, nil + } + return false, err + } + for _, record := range records { + if strings.TrimSpace(record.Host) != "." { + return true, nil + } + } + return false, nil +} + +func welcomeMail(profile *profilessvc.Profile, token uuid.UUID) (*mailssvc.TransactionalMailParams, error) { + name := profile.DisplayName + if name == "" { + name = profile.Email + } + + data := welcomeMailData{ + Name: name, + Email: profile.Email, + UserID: profile.UserID.String(), + WelcomeURL: frontendBaseURL + "/welcome?token=" + token.String(), + } + + subject, err := renderTextTemplate("mails/welcome_subject.tmpl", data) + if err != nil { + return nil, err + } + textBody, err := renderTextTemplate("mails/welcome_text.tmpl", data) + if err != nil { + return nil, err + } + htmlBody, err := renderHTMLTemplate("mails/welcome_html.tmpl", data) + if err != nil { + return nil, err + } + + return &mailssvc.TransactionalMailParams{ + To: profile.Email, + Subject: subject, + TextBody: textBody, + HTMLBody: htmlBody, + Metadata: map[string]string{ + "kind": "welcome", + "user_id": profile.UserID.String(), + }, + }, nil +} + +type welcomeMailData struct { + Name string + Email string + UserID string + WelcomeURL string +} + +func renderTextTemplate(name string, data welcomeMailData) (string, error) { + tmpl, err := texttemplate.ParseFS(mailTemplates, name) + if err != nil { + return "", err + } + var out bytes.Buffer + if err := tmpl.Execute(&out, data); err != nil { + return "", err + } + return strings.TrimSpace(out.String()), nil +} + +func renderHTMLTemplate(name string, data welcomeMailData) (string, error) { + tmpl, err := htmltemplate.ParseFS(mailTemplates, name) + if err != nil { + return "", err + } + var out bytes.Buffer + if err := tmpl.Execute(&out, data); err != nil { + return "", err + } + return strings.TrimSpace(out.String()), nil +}